Starlight, with the API and code reference built in.
Starlight is an excellent Astro docs framework: static, near-zero-JS, MIT, and Markdown-first. On output model and performance, it and Sourcey are peers, and this page will not pretend otherwise. The difference is sources. Starlight is built for hand-authored Markdown; Sourcey generates reference from OpenAPI, MCP, Doxygen XML, godoc, and rustdoc in the same build.
Side by side.
Both are Astro-based, static, and near-zero-JS. They tie on output and performance; they differ on how many source formats each reads first-party.
| Starlight | Sourcey | |
|---|---|---|
| OpenAPI reference | Community plugin | Native |
| Doxygen / C++ docs | No | Native |
| godoc / Go docs | No | Native |
| rustdoc / Rust docs | No | Native |
| MCP server docs | No | Native |
| Static HTML output | Yes | Yes |
| Near-zero JS | Yes | Yes |
| Content format | Markdown / MDX / Markdoc | Markdown and MDX |
| Built on Astro | Yes | Yes |
| License | MIT | AGPL-3.0 |
| Pricing | Free | Free |
Where the two differ, and where they don't.
Reference is hand-authored or a community plugin
Starlight is Markdown, MDX, and Markdoc first. OpenAPI comes through the community starlight-openapi plugin, and there is no notable Doxygen, godoc, rustdoc, or MCP path. Sourcey treats those as first-party source types, so the reference is generated, not written by hand or bolted on.
The common OpenAPI route for Starlight is the community starlight-openapi integration. Sourcey reads OpenAPI, MCP, Doxygen XML, godoc, and rustdoc as built-in sources.
Both are Node builds; the inputs differ
Both tools need a Node build: Starlight through Astro, Sourcey as an npm package (with Docker and Nix images if you would rather not install Node directly). Neither is zero-setup for a C++ or Go team. The real difference is what each can read: Starlight renders Markdown you write, while Sourcey also generates reference from the Doxygen XML, godoc, and rustdoc those teams already produce.
Generate versus hand-write
Starlight assumes you author the pages. Sourcey assumes a spec or a source tree generates the reference and you write the guides around it. If your docs are entirely hand-written Markdown, that assumption is a wash; if they track an API or a codebase, generation is the difference.
A live Sourcey build: generated OpenAPI reference as static HTML, the source format Starlight reads only through a community plugin.
Bring your Markdown. Add what Starlight could not read.
Markdown transfers cleanly between two Markdown-first, Astro-based tools. The win is adding generated reference, not redoing the guides.
Init
Creates sourcey.config.ts and detects any OpenAPI specs in the project.
npx sourcey init Move your Markdown
Content pages transfer directly. Starlight frontmatter and sidebar config become Sourcey navigation in sourcey.config.ts.
Add first-party reference
Point a tab at your OpenAPI spec, Doxygen XML, godoc, or rustdoc. This is the part Starlight needed a plugin for or could not do.
import { defineConfig, doxygen, markdown } from "sourcey";
export default defineConfig({
name: "Your Library",
navigation: {
tabs: [
{ tab: "Guides", source: markdown({ groups: [] }) },
{ tab: "API Reference", source: doxygen({ xml: "./build/xml", language: "cpp" }) },
],
},
}); Build
Static HTML, the same near-zero-JS output model you already had. Deploy anywhere.
$ npx sourcey build
Sourcey: building documentation site
Output: dist/ Common questions.
Isn't Starlight also static and near-zero-JS?
Yes. On output model, performance, and license they are peers, and you should not switch for those reasons. The reason to choose Sourcey is first-party OpenAPI, MCP, Doxygen, godoc, and rustdoc in one build. The reason to stay on Starlight is that your docs are hand-written Markdown and you do not need generated reference.
Both are built on Astro. What is actually different?
Sources. Starlight is built to render Markdown you author. Sourcey is built to generate reference from a spec or a source tree, and to render your guides alongside it. Same output model, different input model.
Should I use Starlight instead?
If your documentation is hand-written Markdown with no API or code reference, Starlight is a great choice and there is little reason to move. If you need generated reference from OpenAPI, Doxygen, godoc, rustdoc, or MCP in one site, that is what Sourcey adds.
Can I bring my Starlight docs?
Markdown transfers cleanly, since both tools are Markdown-first. Sidebar and frontmatter config moves into sourcey.config.ts. The point of moving is to add the reference Starlight needed a plugin for or could not read at all.
Compare with other tools
All comparisons →
Own your docs.
Open source under AGPL. Self-host it, fork it, run it on your own infrastructure.
Fork the demo →