Fumero
Generate a Fumadocs API reference from a Python module.
Fumero reads an importable module with griffe and writes a Fumadocs API reference: one page per module and one per class, alongside the React components that render them.
The reference is generated from the code. Signatures, type annotations and default values are read from the source, and the prose is taken from the docstrings. Nothing is restated by hand, so the reference cannot fall out of step with the code it documents.
Install
uv add fumero --dev # or pip install fumero
Quick start
Install the components into the docs app that will render the output:
fumero init src/components/mdx
Register them once, so every generated page knows how to render itself:
// src/mdx-components.tsx
import defaultMdxComponents from 'fumadocs-ui/mdx';
import * as Pdx from '@/components/mdx/pdx-components';
export function getMDXComponents(components?: MDXComponents): MDXComponents {
return { ...defaultMdxComponents, ...Pdx, ...components };
}
The loader plugin that came with them labels the sidebar entries that lead to a module:
// src/lib/source.ts
import { fumeroPlugin } from '@/components/mdx/pdx-plugin';
export const source = loader({
plugins: [fumeroPlugin()],
baseUrl: '/docs',
source: docs.toFumadocsSource(),
});
A generated page carries its kind under _fumero, and Fumadocs keeps only the frontmatter its schema
names, so let the rest through:
// source.config.ts
schema: pageSchema.loose(),
Then document a module:
fumero generate example --output content/docs/api --base-url /api --with-meta
A module is read from its source, not by importing it, so documenting a package does not run it.
The exception is a module with no source to read, such as a C extension: that one is imported, and
importing it runs whatever its module-level code does. Pass --no-inspect to read the .pyi stubs
beside the binary instead, and nothing is imported at all.
Configuration
Every option is a flag on fumero generate and a key in a [tool.fumero] table. Options that do
not change between runs belong in pyproject.toml:
[tool.fumero]
output = "content/docs/api"
base-url = "/api"
exclude = ["example.internal", "*.tests"]
with-meta = true
A flag overrides the file, which overrides the defaults.
Documentation
The full documentation lives at here. Fumero documents itself, so the API reference there is a working example of the output as much as it is a reference.
Development
This project uses devenv to manage the development environment. It sets up Python, uv, and everything else you need.
# Install devenv if you haven't already
# https://devenv.sh/getting-started/
# Enter the dev shell - this installs all dependencies automatically
devenv shell
Once you are in the shell, lint, type check, and test with:
uv run ruff check
uv run ty check
uv run pytest
Release files for fumero 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fumero-0.2.0.tar.gz | 38.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fumero-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.2 kB
Release files / fumero-0.2.0.tar.gz
| Download URL | fumero-0.2.0.tar.gz |
|---|---|
| Size | 38.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7a51614e9c348de88589c64ad28c51e982dcd05dbb796d376c0e313badb1fca3
|
|
BLAKE2b-256 checksum How to use checksums |
4829aaff3aec1966961b0d07f3dae34653034849b5b448afcd8aeb263e784ff6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / fumero-0.2.0-py3-none-any.whl
| Download URL | fumero-0.2.0-py3-none-any.whl |
|---|---|
| Size | 47.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1e8ae317cb873210fa41055db247756ce48cfbcefa97298c8342075f1511cb77
|
|
BLAKE2b-256 checksum How to use checksums |
349e1056404416b677a266f1510193c2696b7e3a6e210a3ffcf016af04b6e687
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|