NgMd
On this page ▾
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

Package Role
tailwindcss Utility CSS, @variant dark for class-based dark mode. v4.
@tailwindcss/typography prose styles for rendered markdown.

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