• Do not write source files for empty hierarchies (#134).

  • Support specialized template functions (#117).

  • Prevent sphinx from processing files that are incorporated via a .. include:: directive by renaming them to .rst.include suffix (#136).

  • Add :project: {app.config.breathe_default_project} to every breathe directive to make the monkeypatch (#27) work (#139).


  • Use the correct PyPI name beautifulsoup4 rather than bs4 (#120).

  • Fix deprecated MutableMapping import for python 3.10 support (#124).

  • Enable parallel builds (use the right setup function…) (#126).

  • Add support for .. doxygenpage:: (#114). Huge thanks to:
    • @hidmic for the initial implementiation, and

    • @2bndy5 and @clalancette for their efforts in improving the doxygen-breathe-exhale-sphinx ecosystem (and consequently, encouraging me to resume work on this project).

  • Escape * in template page titles (#118).

  • Fix titles / links for directories with underscores (#127).


  • Allow unabridged API to exclude different kinds (#67). unabridgedOrphanKinds allows users to exclude a specific kind from getting dumped in the unabridged API beneath the hierarchies.

    By default, the unabridged API will exclude "file" and "dir", given that the file hierarchy already includes these.


  • Make sure spaces in directory / filenames are quoted when sent to Doxygen (#60).


  • Fix bug where a union child of a namespace does not link correctly in the class hierarchy (#40).

  • Do not force pygments lexer to unconditionally use cpp for <programlisting> pages. Doxygen encodes a language, which is parsed and converted to the appropriate pygments lexer (#42).

    • Added new configuration variable lexerMapping for additional control over pygments language to use.

    • This marks the beginning of mixed-language support, but much more needs to be done for this!

  • Most overloaded functions should now work. See #45 for more information, including function overloads that do not currently work.

    • For consistency, the full api listing includes fully qualified function names (previously: Function foo, now: Function namespace::foo(int)).

  • Stopped using deprecated sphinx API (#47).

  • Tree view hierarchies are minified by default (#48).

  • Parent directory links generated for directory and file pages (#49).

  • Tree view and namespace exclusion bypass configuration variable listingExclude added (#50).

    • Better logic for finding the file node that defined a given compound.

    • Doxygen produces inconsistencies with the paths, some are Windows paths and some are *nix paths. These should now all be corrected using os.path.normpath.


  • Exhale no longer produces filenames that are longer than the operating system can handle (#35).

    • Internal links have changed, more heavily discouraged in docs. Ideally the internal link generation scheme will not need to change again, but they might.

    • Exhale can handle absurdly long file paths by using the \\?\ prefix on Windows. If you run into a situation where this affects you, Sphinx actually cannot handle this. So try and build in a higher directory, e.g. C:\your_project (paths greater than 260 characters cause this issue).

  • First mostly functional release for Windows (there were many locations where os.path.normpath needed to be used.

  • Bug: bug introduced where a union child of a namespace does not link correctly in the class hierarchy.


  • Fix bug that prevents Customizing Breathe Output from working. Was checking isinstance(val_t, six.string_types), but should have been checking isinstance(val, six.string_types).

  • Fix / improve key guessing for when an invalid key is given in exhale_args.


  • Colorized printing on Read The Docs is disabled, since their build logs online don’t display the color.

  • Doxygen stdout and stderr are directed to /dev/null on Read The Docs. See #14.


  • First release with manual namespace documentation parsing (same as files).

  • Fixed bad error message when multiple potential file parents are found, which produced an exception preventing the rest of the build. Full description can be found in #12.


  • Page level configuration metadata added to all pages (rather than just leaf-like pages).

  • Fixed textwrap.dedent inconsistencies when more than one nested type is enumerated.