Sphinx documentation
Welcome to The Pencil Code documentation hub! Whether you are here to read, build, or rewrite history one .rst file at a time, this page will guide you through using and contributing to our Sphinx-based documentation system.
Why Sphinx (and not PDFs)?
Personal opinion of the writer — not an official stance of the Pencil Code community (yet).
PDF manuals were great — in 1983, when documentation came on CD-ROMs and printers made that satisfying dot-matrix screech. But this is 2025:
Reasons PDFs no longer cut it:
Requires a separate app just to open — assuming your phone didn’t uninstall it to free space for cat videos.
You can’t bookmark sections, only pages, and scrolling to “page 146 of 274” isn’t navigation — it’s a pilgrimage.
Search only works if the PDF was exported properly — otherwise Ctrl+F is just placebo.
You can’t embed GIFs, interactive plots, or collapsible code blocks — unless you print them on paper and wave them around theatrically.
Every time you update one sentence, you have to re-export and redistribute the entire file, like it’s a Soviet-era newspaper.
Mobile users must pinch-zoom like raccoons rummaging through a garbage can.
PDFs don’t do dark mode. They blind you at 2 AM and don’t even apologize.
Reasons Sphinx/ReadTheDocs wins by default:
Opens in any browser, even on smart fridges and game consoles running Chromium.
Updates instantly — no re-uploading 20 MB files just because a comma moved.
URLs link directly to functions, sections, or parameters, not the entire Dead Sea Scrolls.
Integrates with copy buttons, syntax highlighting, collapsible content, math rendering, and actually clickable links.
Can embed videos, images, Jupyter notebooks, Mermaid diagrams, or whatever wizardry you throw at it.
Users can switch instantly between latest, stable, or even historic “oops” versions.
Feels like part of the internet — not like downloading a legal document from 1997.
In short: Sphinx + ReadTheDocs = documentation that feels like it belongs in 2025, not the printer era.
Using the documentation
This space is designed to organize all Pencil Code knowledge into a structure that:
You can navigate without psychic powers
You can search without chanting regex
You can read without scrolling through 500 lines of Fortran (and much less intimidating)
The pages you are reading are built with Sphinx, hosted on ReadTheDocs, and generated from two sources:
Text documentation — written in reStructuredText (.rst) or Markdown (.md) and rendered into webpages.
Autogenerated documentation — extracted from inline comments in the source code and formatted by Sphinx extensions.
Note
Sphinx was born in the Python ecosystem, so it speaks fluent Python.
It also speaks okay-ish Fortran with the help of sphinx-fortran — like a tourist using Google Translate.
Note
Sphinx can format your documentation beautifully… But only if you write actual documentation. It’s a renderer, not an AI therapist.
Contributing to the documentation
You can improve:
The human-written docs (like this file)
The code’s inline documentation, which feeds into the autodoc system
The documentation source lives in the main Pencil Code GitHub repository.
To contribute:
Clone the repository — instructions are in Download the Pencil Code
Navigate to the documentation folder:
$ cd pencil-code/doc/readthedocs
Edit the .rst files
Commit and push your changes
ReadTheDocs will automatically rebuild the documentation — like magic, but with CI.
Compiling the documentation locally
Best practice: build the documentation locally before committing, so you don’t accidentally break the website and summon angry developers.
There are two ways to build locally:
Use Docker (guaranteed to work, unless the universe is against you)
Use Sphinx directly (fast if you already have all the dependencies)
Using the Docker Builder
This project includes a preconfigured Docker environment built specifically for compiling the Pencil Code documentation. No guessing versions, no hunting for obscure Fortran bindings — everything is already installed inside the container.
Requirements
Docker must be installed on your system. See Installation.
How to run - full/slow
Navigate to:
~/pencil-code/doc/readthedocs/documentation-docker
Then run:
make
This will build and use a Docker container to generate the full Sphinx documentation into:
~/pencil-code/doc/readthedocs/_build/html/
The first run builds the full environment — dependencies, images, and possibly your patience — so grab a coffee.
Subsequent runs are fast and only rebuild modified files.
Note
This command generates the html of all the rst files and the automatic documentation for all Python and Fortran modules. It currently takes around 20 minutes.
How to run - fast
If you already have a complete documentation build and only need to test updates to text files, you don’t need to rebuild all the autodoc output.
Fast build — ignores autogenerated code docs (useful when you’re editing prose, not APIs):
make fast
Fast enough that you can’t leave your desk for coffee. It’s usually up and running in about one minute.
Output goes to _build/html.
Using Sphinx Directly
If you already have Python tooling installed, you can build the docs directly.
Make sure
pipis installed.Install these required Python packages (e.g. via
pip3):sphinx sphinx-autoapi sphinxcontrib.images sphinx-rtd-theme rstcloth six latexcodec bibtexparser pybtex sphinxcontrib.bibtex matplotlib
Build the documentation as follows:
git pull --rebase # make sure your local copy is fresh make html # full build
This builds everything, including autogenerated Python and Fortran code documentation.
The first build takes a few minutes. Subsequent builds are much faster.
Output appears in _build/html.
If Sphinx refuses to install or errors out in mysterious ways, don’t panic — blame dependency hell, and use the Docker setup provided in this repository.
Fast build
The same “fast” target works for direct builds too:
make fast
When you only need to rebuild text changes, this keeps your workflow snappy and your CPU fans calm.