A TypeDoc plugin that turns your project's reflections into a fast, modern static
site: server-rendered HTML, lazily-hydrated interactive islands, fuzzy + full-text
search, light and dark themes, and a companion .md of every page for LLMs.
Highlights
- Built for TypeScript — your TypeDoc reflections become a structured API model, then a polished static site. No CSS or build config to get started.
- Fast & framework-free — server-rendered pages with lazily-hydrated Preact islands; each page loads only the JS it actually uses.
- Search built in — a fuzzy command palette (
Ctrl K) over titles, descriptions, content, and per-member deep links. Always on, nothing to configure. - Guides + API in one site — hand-written Markdown guides and the auto-generated reference share one sidebar and one search.
- Localization in progress — the
clean-jsdoci18n tooling already extracts translatable strings from a TypeDoc project; the full per-locale build (with a language switcher, per-language fonts, andhreflang) is landing next. - LLM-friendly — every page ships a clean companion
.md, plus a copy-page button to hand any page to Claude / ChatGPT / Perplexity. A downloadable skill turns any coding assistant into a setup expert. - Polished by default — light/dark OKLCH themes, Google Fonts, shiki syntax
highlighting, a Monaco source viewer, and
Source: file:linelinks.
Quick start
npm install --save-dev typedoc @clean-jsdoc-theme/typedoc
typedoc is a peer dependency — you bring your own. Load the plugin and select
its output in typedoc.json; theme options live under cleanJsdocTheme:
{
"entryPoints": ["src/index.ts"],
"plugin": ["@clean-jsdoc-theme/typedoc"],
"outputs": [{ "name": "clean-jsdoc-theme", "path": "dist" }],
"cleanJsdocTheme": {
"siteName": "My Library",
// Optional: a directory of hand-written Markdown/HTML guides rendered
// alongside the API (folder layout → URL + sidebar group; per-file
// frontmatter overrides; a root `index.md` becomes the home page).
"docs": "docs"
}
}
The home page comes from TypeDoc's own top-level
"readme"option (or a rootdocs/index.md). Bothreadmeand the theme block sit at the top level oftypedoc.json—readmeis TypeDoc's, the theme options nest undercleanJsdocTheme.
Build, then serve over HTTP (the island chunks and the search index are fetched, which file:// blocks):
npx typedoc
npx serve dist
Documentation
- Setup & full reference — ankdev.me/clean-jsdoc-theme/theme/typedoc-getting-started: installation, the
cleanJsdocThemeoptions, and theming — everything configured undercleanJsdocThemein yourtypedoc.json. - Using JSDoc instead? Install
clean-jsdoc-theme— the JSDoc template with the same look and feature set. - FAQ & recipes — ankdev.me/clean-jsdoc-theme/guides/faq: how to embed CodePen / YouTube / sites, write rich doc comments (callouts, steps), and common config tweaks.
- Live demo — ankdev.me/clean-jsdoc-theme/api-docs: a real generated API reference, so you can see the output before installing.
Contributing 🤝
Feedback shapes this plugin directly, and contributors are welcome:
- 🐛 Hit a bug or odd output? Open an issue with a small reproduction — that's the single most useful thing you can do.
- 💡 Missing something or have an idea? Feature requests and questions are welcome in the issue tracker.
- 🛠️ Want to dig in? PRs are genuinely welcome. The adapter lives in
packages/typedoc/(itsNOTES.mdrecords the verified TypeDoc API facts it relies on). Friendly areas to start: type rendering, reflection edge cases, and the localized build. See CONTRIBUTING.md.
No contribution is too small — a typo fix, a repro, or a docs tweak all help. Verified against TypeDoc 0.28.x. Thanks for helping make the TypeScript documentation story great. ❤️
Contributors
Thanks to everyone who has helped build clean-jsdoc-theme.