Generate documentation from Python docstrings, powered by Cacao.
Project description
CacaoDocs
A documentation generator for Python projects, powered by Cacao.
CacaoDocs scans your Python source code, parses docstrings, and generates an interactive documentation app with WebSocket-driven reactivity. No static HTML — your docs are a live app.
Links
Installation
pip install cacaodocs
Quick Start
# Initialize config (optional)
cacaodocs init
# Build docs from your source directory
cacaodocs build ./src -o ./docs
# Serve the generated docs
cacaodocs serve ./docs
Doc Types
CacaoDocs introduces a doc type system — categories that change how docstrings are parsed and displayed. Types can be set explicitly with a Type: directive or auto-detected from decorators.
Built-in Types
| Type | Description | Auto-detected from |
|---|---|---|
function |
Regular functions and methods | Default for all functions |
api |
REST API endpoints | @app.get, @router.post, @app.route, etc. |
class |
Python classes | Class definitions |
page |
Markdown documentation | .md files |
config |
Settings and environment variables | Type: config directive |
event |
Webhooks, signals, pub/sub | Type: event directive |
Function (default)
Standard Google-style docstrings work out of the box:
def hash_password(password: str, salt: str = None) -> str:
"""Hash a password using bcrypt.
Args:
password (str): The plaintext password.
salt (str): Optional salt. Generated if not provided.
Returns:
str: The hashed password string.
Raises:
ValueError: If password is empty or too short.
Examples:
>>> hash_password("mysecretpass")
'$2b$12$...'
"""
API Endpoints
API endpoints are auto-detected from Flask, FastAPI, and Django REST decorators. You can also use additional API-specific sections:
@app.get("/users/{user_id}")
def get_user(user_id: int):
"""Get a user by ID.
Path Params:
user_id (int): The user's unique identifier.
Query Params:
include (str): Comma-separated fields to include.
Response (200):
id (int): The user ID.
name (str): Full name.
email (str): Email address.
Response (404):
detail (str): User not found.
"""
Supported frameworks for auto-detection:
- FastAPI:
@app.get,@app.post,@router.put,@router.delete, etc. - Flask:
@app.route,@blueprint.route - Django REST:
@api_view
The HTTP method and route path are extracted automatically from the decorator.
Config
Document application settings with type, default values, required flags, and environment variable mappings:
def load_settings():
"""Application settings.
Type: config
Fields:
DEBUG (bool, default=False): Enable debug mode.
SECRET_KEY (str, required, env=APP_SECRET): Secret key for signing.
DATABASE_URL (str, required, env=DATABASE_URL): PostgreSQL connection string.
PORT (int, default=8000): Server port.
"""
Event
Document webhooks, signals, and event handlers:
def on_user_signup(data: dict):
"""User signup event.
Type: event
Trigger: When a new user completes registration.
Payload:
user_id (int): The new user ID.
email (str): The user's email.
plan (str): Selected subscription plan.
"""
Custom Types
Define your own doc types in cacao.yaml:
doc_types:
cli_command:
label: "CLI Command"
icon: "terminal"
sections:
- name: "Usage"
format: code
- name: "Options"
format: args
- name: "Flags"
format: args
database_model:
label: "Model"
icon: "database"
sections:
- name: "Fields"
format: args
- name: "Indexes"
- name: "Relations"
Then use them in your docstrings:
def deploy():
"""Deploy the application.
Type: cli_command
Usage:
deploy --env production --tag v1.2.3
Options:
env (str): Target environment.
tag (str): Version tag to deploy.
"""
Configuration
Create a cacao.yaml in your project root:
title: "My Project"
description: "API Documentation"
version: "1.0.0"
theme: "dark"
github_url: "https://github.com/username/repo"
exclude_patterns:
- "__pycache__"
- ".venv"
- "node_modules"
Features
- Doc Types — Function, API, Class, Page, Config, Event, and Custom types
- Auto-Detection — Flask/FastAPI/Django endpoints detected from decorators
- Call Map — Visualize function call relationships across your codebase
- Interactive App — Generated docs are a live Cacao app, not static HTML
- Google-style Docstrings — Extended with API, config, and event sections
- Custom Types — Define your own doc types via
cacao.yaml
Contributing
Contributions are welcome — issues, feature requests, and pull requests.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cacaodocs-0.1.20.tar.gz.
File metadata
- Download URL: cacaodocs-0.1.20.tar.gz
- Upload date:
- Size: 35.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84b945b66a770b30e18f18a6ad6151dc032ed04af10c4de59dd0e4ed2f903f2d
|
|
| MD5 |
4b40e804086ab21adf5593dfb0f3c109
|
|
| BLAKE2b-256 |
39ca54263de7f3ed1b6f2a22330c712494f17a78c5b0fd3d6e7443579b3b682d
|
File details
Details for the file cacaodocs-0.1.20-py3-none-any.whl.
File metadata
- Download URL: cacaodocs-0.1.20-py3-none-any.whl
- Upload date:
- Size: 35.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1633715d3e3125c99f83fb0df169bcf5377b4328384f433d203a84058a5a11c6
|
|
| MD5 |
d5dea2d2d9821daaa49cd4d37fa47588
|
|
| BLAKE2b-256 |
97c75e123f266560cb4231601ebabf67703264bb48f383191cce27f0eda23db0
|