Skip to main content

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

Metadata

Release files for fumero 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fumero 0.4.1
File Size Uploaded
fumero-0.4.1.tar.gz 40.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fumero 0.4.1
File Interpreter ABI Platform
fumero-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 90.6 kB

Release files / fumero-0.4.1.tar.gz

Download URL fumero-0.4.1.tar.gz
Size 40.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2723b4f5af295cf9ec1002871195410abfa8f2e21d8df592cdba00e0768ecf1b
BLAKE2b-256 checksum
How to use checksums
f140ba074c003e5cf546c1dee558ccd1fcf96b00d3e363b7d6b393749ac8fad4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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.4.1-py3-none-any.whl

Download URL fumero-0.4.1-py3-none-any.whl
Size 50.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ccb1bdc84685f6511cbfe7c6043eb4bafe1338ce3a357b4e403c729d0b1a7bf8
BLAKE2b-256 checksum
How to use checksums
e472a2d81e1091243b8cb33ff8ea6339985b0d7ab3f8b81c28a42ebc55288736
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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 history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page