← Alternatives

Sourcey vs Sphinx

A shorter route from Doxygen XML to a good-looking site.

Sourcey reads Doxygen XML directly and puts the reference beside Markdown guides. That can simplify a C++ docs build. Sphinx still has reasons to stay, especially Python autodoc, document cross-references, and multiple output formats.

What sourcey produces

The same C++ comments. A better-looking place to read them.

Icey C++ API reference rendered by Sourcey from Doxygen XML

Icey keeps Doxygen for extraction and uses Sourcey to present the XML alongside its guides. Classes, signatures, and examples belong to the same site.

See how Icey uses Doxygen and Sourcey →

Comparison

Compare the build you actually run.

A Sphinx project with a few pages is different from one built around domains, extensions, and PDF output. Count those responsibilities before removing the tool that owns them.

Sphinx compared with sourcey, feature by feature
FeatureSphinxsourcey
AuthoringreStructuredText; MyST MarkdownMarkdown and components
Doxygen XMLBreathe extensionBuilt-in adapter
Python autodocSphinx extensionNo equivalent built in
Cross-project symbol linksIntersphinx inventoriesExplicit documentation links
Output formatsHTML, LaTeX, man, EPUB, moreStatic HTML and text exports
PresentationTheme and extension ecosystemSourcey themes and CSS
Build toolchainPython; optional extractorsSourcey; required extractors
HostingYour static host or a serviceYour static host
Tradeoffs

What is Sphinx doing for this project?

  1. 01

    For C++, inspect the XML route

    Breathe brings Doxygen XML into Sphinx. A project may also use Exhale to generate the reference hierarchy. Sourcey can read the XML directly, which gives you another option if that reference and a set of guides are the whole job. Keep Doxygen in either case and compare the difficult symbols before removing any stage.

    Breathe’s Doxygen-to-Sphinx documentation

  2. 02

    Markdown is already an option in Sphinx

    Sphinx supports Markdown through MyST-Parser. A desire to stop writing reStructuredText is not, on its own, a reason to replace the whole site. The migration question is whether your pages depend on Sphinx roles, directives, domains, or extensions that ordinary Markdown will not preserve.

    Sphinx’s Markdown support

  3. 03

    Keep the features the manual depends on

    Python autodoc and Intersphinx are substantial capabilities. So are the builders for formats such as LaTeX and manual pages. Sourcey does not supply equivalent replacements for those workflows. If they are central to your documentation, try improving the Sphinx theme or navigation before planning a renderer migration.

    Sphinx’s object documentation and cross-reference guide

  4. 04

    Use the design as part of the test

    Sourcey gives generated reference a deliberate visual treatment, with guides sharing the same site. Icey shows the C++ result. Compare a dense page, a small screen, and the route from a guide into a type. Sourcey’s Vite-based preview is useful while editing, but any build-time comparison should include Doxygen extraction and use your actual project.

    Icey’s Doxygen and Sourcey workflow

Migration

Audit the extensions before converting the files.

Do a bounded trial on one section. Converting prose is only part of moving a Sphinx project.

  1. 01

    Read conf.py and the build commands

    List extensions, builders, generated sources, external inventories, and theme overrides. Mark any required capability without a replacement. A Python manual built around autodoc is a poor candidate for a blind Markdown conversion.

  2. 02

    Try the reference separately

    For C++, keep the Doxyfile and point Sourcey at its XML. This example assumes the output is in build/doxygen/xml. Compare the same symbols in both sites before moving the surrounding manual.

    import { defineConfig, doxygen } from "sourcey";
    
    export default defineConfig({
      name: "My C++ library",
      navigation: {
        tabs: [{
          tab: "C++ API",
          slug: "cpp",
          source: doxygen({ xml: "./build/doxygen/xml" }),
        }],
      },
    });
  3. 03

    Convert a representative guide

    Preserve admonitions, code includes, semantic cross-references, tables, and links. A converter can help with syntax, but it cannot decide what a custom directive meant. Review MyST roles as carefully as reStructuredText roles.

  4. 04

    Check the published outputs people use

    Follow links from guides into the API, test search and old anchors, and confirm whether PDF or man-page consumers still need the Sphinx build. Keep that output where it remains useful rather than pretending the migration covers it.

FAQ

Common questions.

Does Sourcey support Sphinx autodoc?

Sourcey has its own inputs for OpenAPI, Doxygen XML, Go, Rust, MCP manifests, and Markdown. It is not a Sphinx extension host and does not run Python autodoc. Keep Sphinx when that capability is central to the project.

Can I move MyST Markdown without changes?

Some prose and code blocks will be straightforward. MyST can also contain roles, directives, and cross-references interpreted by Sphinx. Audit those constructs and compare their meaning in the rendered output before calling the conversion complete.

Is Sourcey faster than Sphinx?

There is no useful universal number. Measure clean builds and edit-preview cycles on the same input, including extraction and plugins. Choose the tool that covers your required outputs with a build your team can maintain.