The libraries and tools NgMd bundles by default. Every layer is replaceable.
Technologies
NgMd is built on three headline pieces (Angular, AnalogJS, Vite) and a curated set of supporting libraries. Each layer is replaceable.
Runtime Stable
The framework. v22+.
Meta-framework: file-based routing, SSR/SSG, markdown content collections. v2.7+.
Dev server and build tool. v8.
Styling
Components
| Package |
Role |
@angular/elements |
Bridges NgmdUi components to Custom Elements so they upgrade inside <analog-markdown [innerHTML]>. Dynamic-imported on the client for SSR safety. |
@lucide/angular |
Icon set used throughout the site frame and card icons. |
Content pipeline
| Package |
Role |
@analogjs/content |
Markdown content collections that the catch-all reads via injectContent(). |
marked |
Markdown parser. |
marked-shiki |
Bridge running Shiki over fenced code blocks at build time. |
shiki |
VS Code-grade syntax highlighting. Held at ^1.29.2 because newer 4.x conflicts with @analogjs/platform 2.7's peer dep. |
front-matter |
Frontmatter parser used by AnalogJS content collections. |
Marked extensions
Custom extensions wired into the marked pipeline:
ngmd-video and ngmd-image inline media tags, plus *Keyword auto-linking declared in ngmd.config.ts.
Code-fence file="..." imports, group="..." tabs, {1,3-5} line highlighting.
Build pipeline
Vite plugins committed alongside vite.config.ts:
| Plugin |
Role |
varsPlugin |
Replaces the version token in .md sources with the create-ngmd version, or the project's own version in a scaffolded site. |
externalLinkGuard |
Errors on raw external anchors missing target="_blank". |
internalLinkGuard |
Errors on broken in-page and cross-page anchor fragments in builds; a terminal warning in dev. |
pageMetaPlugin |
Emits virtual:ngmd/page-meta with editUrl + lastUpdated per route, derived from git log. |
sitemapPlugin |
Writes sitemap.xml and robots.txt into the client bundle. Skips pages with noIndex: true. |
rawMdPlugin |
Serves every .md body at <route>.md so LLM consumers can fetch clean markdown. |
searchIndexPlugin |
Collects page, heading and snippet records at build time as virtual:ngmd/search-index. The palette builds its Orama index from them in the browser. |
apiGenPlugin |
Parses TypeScript sources via ts-morph based on ngmd.api.ts and exposes virtual:ngmd/api-index for the /api routes and palette symbol search. |
Distribution
| Package |
Role |
create-ngmd |
The scaffolder. pnpm create ngmd@latest my-docs. Node builtins only, zero deps. Published as 0.5.2. |
Package management
All four package managers work. The scaffolder auto-detects which one you ran it with.
Where to next