Doxygen output, modernized.
Doxygen has been the C++ documentation standard for 26 years. The parser is solid. The HTML output is not. Sourcey takes Doxygen's XML and produces docs that look like they belong in 2026.
Feature by feature.
Same capabilities. No monthly bill. Static HTML you own and deploy yourself.
| Doxygen | Sourcey | |
|---|---|---|
| C++ parsing | Built-in | Via Doxygen XML |
| HTML output quality | Dated | Modern |
| Setup complexity | Doxyfile | Doxyfile + sourcey.config.ts |
| Dark mode | No | Yes |
| Search | Basic | Instant fuzzy search |
| Markdown guides | Limited | Yes |
| OpenAPI support | No | Native |
| Custom themes | CSS override | 3 built-in presets + custom CSS |
| Pricing | Free | Free |
The Doxygen problem.
1990s HTML output
Doxygen's default HTML output hasn't meaningfully changed in two decades. The styling is table-based, the navigation is rigid, there's no dark mode, and the search is a basic text match. For projects that care about developer experience, shipping Doxygen's default output signals neglect.
CSA.ch published an analysis in 2024 concluding that Doxygen's HTML output "looks old-fashioned and does not meet today's web design standards." The doxygen-awesome-css project has 1,300+ GitHub stars — its entire purpose is making Doxygen look slightly less terrible. That star count is the market demand for this problem, quantified.
The 4-tool pipeline
The current "best practice" for modern-looking C++ docs is a four-tool chain: Doxygen generates XML, Breathe reads the XML, Exhale auto-generates Sphinx RST files from it, and Sphinx renders the final HTML. Four tools, four configs, four sets of version compatibility issues, four potential points of failure on every build.
The Slint team evaluated every C++ documentation tool and settled on exactly this pipeline, calling the setup "fairly complex" and acknowledging that "many different projects need to play well together." They chose it anyway because nothing better existed. Sourcey replaces three of those four tools. You keep Doxygen for parsing; Sourcey handles everything else.
Alternatives that never shipped
Standardese was built as a proper Doxygen replacement with its own C++ parser. The lead developer (Jonathan Muller) left the project. There's no stable 1.0. Community maintenance is limping along. hdoc built an impressive Clang-based parser but requires a commercial license for business use and remains niche. DoxyPress forked Doxygen's codebase and modernized the internals, but the output has the same fundamental problems.
The pattern repeats: building a C++ parser is genuinely hard, and every project that tries eventually stalls or stays small. Sourcey sidesteps this entirely. Doxygen's parser works. It's been battle-tested on OpenCV, Boost, Qt-adjacent libraries, and thousands of embedded/firmware projects. The problem was never the parsing.
Switching parsers is a trap
Every team that tried to escape Doxygen by adopting a new parser learned the same lesson: C++ parsing is a tar pit, and build time matters. OpenCV switched from Doxygen to Sphinx for their v3 docs, then switched back — because Doxygen builds in 1 minute and Sphinx took 31 minutes for the same codebase.
You shouldn't have to abandon your parser to get good-looking docs. Sourcey doesn't replace Doxygen's parser. It takes Doxygen's XML output — which is actually comprehensive and well-structured — and produces modern HTML from it. Keep your Doxyfile, keep your comment style, keep your 1-minute builds.
One command. Five minutes.
Sourcey reads Doxygen's XML output via moxygen. You keep your Doxyfile and comments. You add one config file.
Enable XML output
Add two lines to your existing Doxyfile.
# In your existing Doxyfile
GENERATE_XML = YES
XML_OUTPUT = xml Run Doxygen
Same as before. The XML directory appears alongside your html/ output.
$ doxygen Doxyfile
# build/doxygen/html/ ← the old output
# build/doxygen/xml/ ← what Sourcey reads Configure
Point a doxygen tab at the XML. Add markdown guides alongside the API reference if you want them.
export default {
name: "Your Library",
theme: {
colors: { primary: "#2563eb" },
},
navigation: {
tabs: [
{
tab: "Documentation",
groups: [
{
group: "Start Here",
pages: ["index", "getting-started", "installation"],
},
{
group: "Guides",
pages: ["concepts", "examples", "troubleshooting"],
},
],
},
{
tab: "API Reference",
doxygen: {
xml: "./build/doxygen/xml",
language: "cpp",
},
},
],
},
}; Build
Reads XML, generates pages via moxygen, outputs static HTML.
$ npx sourcey build
Sourcey — building documentation site
Pages: 47
Output: dist
Time: 2.1s Common questions.
Does Sourcey replace Doxygen?
No. Sourcey replaces Doxygen's HTML output, not Doxygen itself. You still run Doxygen to parse your C++ source code and generate XML. Sourcey takes that XML and produces modern, searchable, dark-mode-ready documentation from it.
Do I need to change my code comments?
No. Sourcey reads standard Doxygen XML output. Your existing @param, @return, @brief, @class comments work as-is. Keep your Doxyfile, keep your comment style.
What languages does this work with?
Anything Doxygen can parse: C, C++, Python, Java, C#, Objective-C, PHP, Fortran, VHDL, and more. If Doxygen generates XML from it, Sourcey can render it.
Can I mix Doxygen API docs with markdown guides?
Yes. This is one of the main advantages. Define a doxygen tab for your API reference and separate tabs with markdown groups for installation guides, tutorials, and conceptual docs. Everything lives in one site with shared navigation and search.
How does this compare to Breathe + Sphinx?
Breathe + Exhale + Sphinx is a four-tool pipeline that converts Doxygen XML to RST to HTML. Sourcey replaces all three of those intermediate tools. One config file, one build command, same XML input, better output.
Does this work with existing Doxygen comments?
Yes. Sourcey reads Doxygen's XML output, which is generated from your existing comments. Any comment syntax Doxygen understands — @brief, @param, @return, @class, @defgroup, Javadoc-style, Qt-style — works without modification.
Own your docs.
Open source. Self-host it, fork it, ship it on your own infrastructure. No account required.
Fork the demo →