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

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.1.0

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.1.0
File Size Uploaded
fumero-0.1.0.tar.gz 37.7 kB Details

Built distribution (wheel)

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

Total release size: 84.5 kB

Release files / fumero-0.1.0.tar.gz

Download URL fumero-0.1.0.tar.gz
Size 37.7 kB
Tags Source
SHA-256 checksum
How to use checksums
405468e822afd97cd0f2ad802d36af9a4602191311ac56cef3b49b96e8ca3d02
BLAKE2b-256 checksum
How to use checksums
1006bc5c25b4f2255af544492a40e5ab6bf8fbd4a1dc0ed54bb4e942c8149e07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","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.1.0-py3-none-any.whl

Download URL fumero-0.1.0-py3-none-any.whl
Size 46.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1326a2a53356403438fd2a33993452b09634da8e062f28236c7acbff72bb7de
BLAKE2b-256 checksum
How to use checksums
473b760ada156f837e6c52f295f84bf630498e0e488fac9aae13ddb775f33e39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","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

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.0 This release

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