Popular tools and solutions
Questions
What tools are out there?
What are their pros and cons?
Objectives
Choose the right tool for the right reason.
Documentation Tools: comparison
We try to compare documentation tools in various dimensions:
Convenience: how easy it is to contribute and set up, for different kinds of people?
Maintainability and Reproducibility: is it easy to retrieve the information for different versions of the code? Good for tools that can be version-controlled along with the code.
Even better if correctness of information can be checked automatically (does the output of a snippet of code match the docs?)Searchability: is it easy to find the information we need?
Readability: is it easy to read when rendered? Can one copy-paste from it easily?
LLM-friendliness: is it convenient to feed to an LLM or an AI-agent?
Type |
Convenient |
Maintainable/ |
Searchable |
Readable |
LLM |
Notes |
|---|---|---|---|---|---|---|
In-code |
✅✅ (P), |
✅🟨 |
🟨 |
❌ |
✅🟨 |
|
README |
✅ |
✅🟨 |
🟨 |
✅ |
✅ |
typically enough |
HTML |
🟨 |
✅🟨 |
✅ |
✅✅ |
❌ |
powerful, |
Wikis |
🟨 (P) |
❌❌ |
✅ |
✅ |
❌ |
|
Latex |
🟨 |
❌🟨 |
🟨 |
✅ (?) |
❌ |
✅Physics/Math, |
Jupyter |
🟨 🟨/❌ |
✅✅ |
🟨 (?) |
✅ |
🟨 |
✅ validation tooling |
🟨 |
🟨 |
N/A |
🟨/❌ |
✅✅ |
Abbreviations in the table:
P: For Programmers, who live in the code;
U: For Users;
NP: For Non-Programmers.
HTML static site generators
There are many tools generate documentation that can be viewed locally, or hosted on the web.
Here are some HTML static site generators, relevant in our communities. These tools offer some or all of these features:
API Reference generation: they read the source code scanning for docstrings, and render them to HTML
Search: they offer a “whole site” search feature (non trivial, when viewing only one page). (if you can download )
Validation: check that the code snipped in the documentation match the real behaviour of the code.
Continuous checks: regenerate automatically every time you save, so that you can catch errors early
Sphinx ← this is how this lesson material is built
Generate HTML/PDF/LaTeX from RST and Markdown (MyST)
Basically all Python projects use Sphinx but Sphinx is not limited to Python.
Read the docs hosts public Sphinx documentation for free!
Search:
limited, keyword-based client-side (Javascript that runs in browser)
Full-text server-side on Read the docs
Validation: via doctest
MkDocs: A Markdown-first static site generator (with a vast system of plugins developed independently).
API Reference generation: via mkdocstrings
Search: search plugin for client-side (Javascript that runs in the browser - lunr.js) Project now (as of 2026) not maintained [1]
-
API Reference generation: has also support for Python
-
API Reference generation out of the box, generates static call graph
Focus on Documentation directly in the source code
MarkDown-like syntax, with its own flavour and special commands
Search:
limited keyword-based client-side
full text search server-side
Sphinx can be also used to generate documentation for C++ projects, using the XML output from Doxygen via Breathe
-
API Reference generation out of the box, generates static call graph (but has limited Fortran parsing capabilities)
Focus on Documentation directly in the source code
MarkDown-like syntax, with its own flavour and special commands
Search:
limited keyword-based client-side
full text search server-side
-
Python-based
Search: client-side (Javascript that runs in the browser - lunr.js)
-
Using MarkDown (JuliaMarkdown flavour)
Parses Julia code and in-code documentation/docstrings
Search: client-side (but typically the whole site is loaded for search on every page)
Validation: runs the code and checks
Uses MarkDown (CommonMark flavour)
Search: client-side (Javascript that runs in the browser - elasticlunr.js)
Validation: validates code examples when run with
--test
These are general-purpose static website generators that match the philosophy of the other tools presented so far, but might be better suited for blogging, reports or other kinds of publications:
Hosting Documentation on the Web
GitHub, GitLab, and Bitbucket make it possible to serve HTML pages:
Read The Docs is also free to use for open source code, and can be connected to common software forges.
Discussion
Do you know an awesome tool or feature that should be in this list? Let us know! (click on “Edit on GitHub” at the top of this page)
Plain Text formats: reStructuredText and Markdown
# This is a section in Markdown This is a section in RST
========================
## This is a subsection This is a subsection
--------------------
Nothing special needed for Nothing special needed for
a normal paragraph. a normal paragraph.
::
This is a code block This is a code block
**Bold** and *emphasized*. **Bold** and *emphasized*.
A list: A list:
- this is an item - this is an item
- another item - another item
There is more: images, There is more: images,
tables, links, ... tables, links, ...
Two of the most popular lightweight markup languages.
reStructuredText (RST) has more features than Markdown but the choice is a matter of taste.
There are (unfortunately) many flavors of Markdown.
Motivation to stick to a standard text-based format: They make it easier to move the documentation to other tools which also expect a standard format, as the project/organization grows.
We use MyST flavored Markdown in the Sphinx and Markdown episode and the Hosting websites/homepages on GitHub Pages example.
Nice resource to learn Markdown: Learn Markdown in 60 seconds
Pandoc can convert between MD and RST (and many other formats).
Keypoints
READMEs are typically a good starting point
Some popular solutions make reproducibility and maintenance of multiple code versions difficult.
The landscape of tools is very diversified and every community has their own favourite.
The basic functionality of all Static site generators is very similar, but specific aspects (API ref generation, search, validation) differ.