NgMd
May 31, 2026 ยท View on GitHub
A comprehensive list of features we could add. Pulled from adev, VitePress, Starlight, Nextra, Docusaurus. Not all of these will ship. Use this as a menu to pick from.
Status legend: โ done ยท ๐ก partial ยท โ not done
1. Authoring components
NgMd's model: prose lives in .md, chrome lives as Angular components composed in .page.ts. The adev pattern of custom HTML tags inside markdown was explored and rejected in May 2026 (dual-pipeline marked instances plus HTML-escape friction made it more cost than win). Inline media (<ngmd-video>, <ngmd-image>) is the exception, kept as marked extensions because the tags are self-closing leaves with no markdown body.
Shipped as Angular components under src/app/ui/:
- โ
<ngmd-callout type="info|tip|success|warning|danger" title="...">โ bordered box with coloured stripe - โ
<ngmd-alert severity="info|warning|critical|helpful|important">โ single-line banner - โ
<ngmd-card title="..." link="..." cta="...">โ bordered card, optional router link - โ
<ngmd-tabs>+<ngmd-tab title="...">โ hand-rolled tabs with ARIA roles, arrow-key navigation, and Home/End shortcuts. Works inline in.md(children are components, not directive-on-template). - โ
<ngmd-pill-row>+<ngmd-pill href="..." title="...">โ horizontal pill links - โ
<ngmd-workflow>+<ngmd-step title="...">โ numbered step list - โ
<ngmd-hero title="..." gradient>โ page hero - โ
<ngmd-code-block header="..." language="..." [code]>โ code block with header bar, lazy-loaded shiki + dual theme
Shipped as marked extensions (usable inline in .md):
- โ
<ngmd-video src="..." title="..."/>โ YouTube / Vimeo URL normalisation - โ
<ngmd-image src="..." alt="..." caption="..."/>โ figure with caption + lazy load - โ
<ngmd-accordion>+<ngmd-accordion-item title="..." open>โ disclosure list backed by native<details>for keyboard + a11y for free - โ
<ngmd-badge variant="alpha|beta|stable|deprecated|new">โ inline status pill - โ
*Keywordinline auto-linking โ declare inngmd.config.ts > keywords,*AnalogJSetc. become links
Code-fence affordances (build-time marked extensions):
- โ
```ts file="src/foo.ts#L5-L20"โ import code from source, GitHub-style line ranges,// ngmd-ignore-linestrip markers, header bar links to GitHub - โ
```bash group="install" name="pnpm" activeโ adjacent fences with samegroup=merge into a tabbed UI - โ
```ts {1,3-5}โ highlight matching lines with a fuchsia stripe + tint
Open follow-ups:
- โ
<ngmd-card-grid columns="2|3">โ n-up card grid, mobile stacks to single column - โ Combined
file=+{1,3-5}line highlight on the same fence โ adev parity, ~1h. Tweak the regex inngmd-code-import.tsto also parse the brace list. - โ Diff view via
```diffโ adev parity, ~1h. Shiki already emits the tokens; just need CSS for green/red lines. - โ
<ngmd-hero>image slot via content projection โ adev'sdocs-decorative-headerhas an image slot. ~1-2h to add a named<ng-content select="[hero-image]">and lay it out next to the title. - โ Multi-file code group โ extend
group="..."so different fences inside one group can beapp.ts+app.html+app.cssstyle (adev'sdocs-code-multifile). 1-2 days; the marked extension already supports grouping, needs richer tab labels + better visual treatment. - โ Stackblitz preview embed (
<ngmd-stackblitz project="...">) โ adev'sdocs-code previewdoes runnable demos. 1-2 days. Big tutorial unlock. - โ API reference table component โ specialised shape for class members (signature / default / description), even before auto-extraction. ~half day.
2. Page chrome (every docs starter has these)
- โ
Previous / Next page navigation at the bottom of each doc page (auto-derived from
ngmd.config.tsnav) - โ "Edit on GitHub" link per page
- โ
"Last updated" timestamp pulled from git history (
git log -1 --format=%cs) - โ
Heading anchor copy-link โ hover an h1/h2/h3 to reveal a
#icon that copies the URL - โ Reading time estimate (word count / 200 wpm)
- โ "Was this page helpful?" feedback widget at bottom
- โ Page-level frontmatter overrides for layout / title / description / OG image
3. Content tools
- โ Mermaid diagram rendering โ
```mermaidblocks - โ Math rendering โ KaTeX or MathJax for
```mathblocks or$...$inline - โ Footnotes (
[^1]markdown syntax) - โ Task lists rendering
[ ]/[x] - โ Definition lists
- โ Emoji shortcodes (
:smile:โ ๐) - โ Tweet / CodePen / CodeSandbox embeds
- โ Image lightbox on click
- ๐ก Image optimization โ manual for now, no automatic responsive srcset
4. Search / discovery
- โ
Cmd+K palette โ Orama BM25 + fuzzy (length-scaled) + heading/title/body boosts +
<mark>highlighting (0.1.2) - โ
Algolia DocSearch integration (opt-in via
site.algoliakeys +pnpm add algoliasearch, 0.1.2) - โ
Orama offline search index built at build time (
search-index.plugin.tsโvirtual:ngmd/search-index, 0.1.2) - โ Search result keyboard navigation (arrows + enter). Reverted in 0.1.2 pending a proper focus / scroll polish pass.
- โ
Recent searches + โ
favorites (
localStorage, 0.1.2 recents / 0.1.3 favorites). Star toggle per row, split into Favorites + Recent sections.
5. Library-author features
- โ API reference auto-generation from JSDoc / ts-morph (the headline library-author feature, explicitly punted to a future release)
- โ
Keyword auto-linking โ page-tier via
*Keyword(API-tier deferred, depends on auto-gen above) - โ Symbol search in palette
- โ Component playgrounds with editable code + Stackblitz launcher
- โ Interactive props/args/controls (Storybook-style)
- โ Status badges per component (alpha / beta / stable / deprecated)
6. Build / infrastructure
- โ
Build-time external-link guard (Vite plugin, errors on raw external
<a>withouttarget="_blank") - โ
Build-time internal-link guard (errors on broken
#fragmentand/route#fragmentlinks) - โ
Build-time page-meta plugin (
virtual:ngmd/page-metaexposeseditUrl+lastUpdatedper route) - โ Sitemap.xml auto-generation
- โ robots.txt
- โ RSS feed for changelog / blog
- โ Service worker / PWA support
- โ OG image auto-generation per page
- โ Twitter card meta auto-fill
- โ Analytics integration hooks
7. Theming / branding
- โ
CSS-variable theme tokens (
--bg,--bg-muted,--fg,--muted,--border,--border-strong,--primary,--accent,--accent-soft,--accent-gradient,--radius-*,--font-*) - โ Fuchsia accent wired through sidebar active, TOC active, palette row, prev/next hover, heading anchor hover, markdown link hover + focus ring
- ๐ก Theme is documented in
theming.mdbut the live preview / swatch grid is missing - โ Live theme preview component that swaps tokens
- โ Theme presets / palettes (e.g. "Stone", "Slate", "Rose", "Violet")
- โ Brand assets page (logo, colors, fonts displayed in a kit)
- โ Print stylesheet
- โ RTL language support
8. Multi-version + i18n (v2 territory)
- โ Versioned docs (Docusaurus-style โ
v1/,v2/folders, version switcher in header) - โ i18n / locale switcher (header dropdown, locale-prefixed routes)
- โ Translation memory / source-of-truth tracking
9. Authoring DX
- โ
npx create-ngmdscaffolder โ published ascreate-ngmd@0.0.3on npm. Works viapnpm create ngmd@latest,npm create ngmd@latest,yarn create ngmd,bun create ngmd. Slim template ships with the[...slug].page.tscatch-all so users drop.mdfiles and get routes with no wrapper. - โ
ngmd add <component>CLI for shadcn-style component installation - โ
ngmd new page <slug>CLI to generate a new markdown page + sidebar entry - โ VS Code snippets for common docs patterns (callout, tabs, pill row)
10. Polish / nice-to-have
- โ
View Transitions API crossfade between routes (
withViewTransitions()inapp.config.ts, 150ms duration tuned instyles.css; falls back to default behaviour on Chrome <111) - โ Loading skeleton while markdown content loads
- โ Back-to-top button
- โ Keyboard shortcut help dialog (press
?) - โ Inline code-block copy success toast
- โ Code-block line numbers
- โ
Code-block line highlighting (
```ts {3-5}syntax) - โ Code-block diff view (
```diffblocks โ shiki supports, needs CSS) - โ Inline
Show sourcetoggle on component demos - โ Lighthouse audit + a11y compliance pass
11. Already shipped (for reference)
Foundation:
- โ AnalogJS + Vite 8 + Angular 21 + pnpm/npm/yarn/bun support
- โ
Markdown content collections via
src/content/ - โ
Shiki syntax highlighting pinned to
1.29.2(bash,md,json,ts,html,css) - โ
Tailwind v4 + class-based dark mode (
@variant dark) - โ Light / dark / auto theme cycle with no-flash inline boot script
Chrome:
- โ
Translucent sticky header with
backdrop-blur-sm - โ
Sidebar accordion driven by
ngmd.config.ts - โ Breadcrumb derived from current route
- โ Right-side on-page TOC with scroll-spy
- โ Mobile drawer for sidebar + collapsible "On this page"
- โ Cmd+K command palette with content-aware search
- โ Page footer per docs route: prev/next + edit-on-github + last-updated
- โ Heading anchor copy buttons (h1/h2/h3, fuchsia hover)
- โ
Code-block copy buttons on every
<pre>(runtime enhancer) - โ External links auto-targeted to a new tab (runtime enhancer)
- โ
Smooth scroll on page navigation, sticky-header offset via
ViewportScroller.setOffset - โ Body scroll lock when palette open
- โ 404 page with chrome-hidden layout
Authoring:
- โ
Authoring component suite under
src/app/ui/: callout, alert, card, card-grid, tabs (hand-rolled ARIA + keyboard nav), pill row, workflow, hero, code-block (lazy-shiki + dual theme), accordion, badge, video, image - โ
<ngmd-video>+<ngmd-image>marked extensions for inline media in.md - โ
*Keywordinline auto-linking (12 default keywords inngmd.config.ts) - โ Code-fence file imports with GitHub-linked header bar
- โ
Code-fence group tabs (
group="install" name="pnpm" active) - โ
Code-fence line highlighting (
```ts {1,3-5})
Build pipeline:
- โ
External-link guard (Vite plugin, errors on raw external anchors missing
target="_blank") - โ Internal-link guard (errors on broken in-page and cross-page anchor fragments)
- โ
page-meta plugin โ
virtual:ngmd/page-meta - โ
sitemap plugin โ
sitemap.xml+robots.txtemitted into client build
Distribution:
- โ
create-ngmd/scaffolder (Node builtins, slim template, package-manager detection) - โ
Showcase page at
/concepts/componentsdemoing every NgmdUi component - โ Hexagon logo with rose โ fuchsia โ purple gradient stroke, Geist Mono wordmark
- โ Open Graph + meta tags, SVG favicon
- โ License, README, package.json metadata
Up next
Three candidates picked from a wider feature review. Pick from the top.
- โ JSDoc-driven API reference. Opt-in
ngmd.api.ts-style scope file globs TS sources, parses JSDoc (viats-morphor the Angular compiler API), emits virtual.page.tsroutes. Render@deprecated/@experimental/@betaas inline status badges. Heaviest lift on this list; the single biggest missing feature for library docs use cases. - โ
Sidebar status badges. Shipped in 0.1.1 (frontmatter), migrated to nav config in 0.1.2 matching adev's
NavigationItem.statuspattern.{label, href, status: 'beta'}on aNavItemrenders a coloured chip next to the sidebar label. Six variants (new,updated,alpha,beta,stable,deprecated) sourced from the singleBADGE_VARIANTSmap insrc/types/badge.ts. See /concepts/markdown-routes#sidebar-status-badges. - โ
Search relevance pass. Replaced the keyword-substring filter with Orama (BM25 + fuzzy + heading/title/body boost). Build-time index plugin emits
virtual:ngmd/search-index;SearchServicepicks Orama by default or Algolia DocSearch whensite.algoliais set. AddsnoIndex: truefrontmatter, search history inlocalStorage, and<mark>match highlighting. See /concepts/search.