Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cacaodocs-0.1.20.tar.gz (35.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cacaodocs-0.1.20-py3-none-any.whl (35.3 kB view details)

Uploaded Python 3

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

Hashes for cacaodocs-0.1.20.tar.gz
Algorithm Hash digest
SHA256 84b945b66a770b30e18f18a6ad6151dc032ed04af10c4de59dd0e4ed2f903f2d
MD5 4b40e804086ab21adf5593dfb0f3c109
BLAKE2b-256 39ca54263de7f3ed1b6f2a22330c712494f17a78c5b0fd3d6e7443579b3b682d

See more details on using hashes here.

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

Hashes for cacaodocs-0.1.20-py3-none-any.whl
Algorithm Hash digest
SHA256 1633715d3e3125c99f83fb0df169bcf5377b4328384f433d203a84058a5a11c6
MD5 d5dea2d2d9821daaa49cd4d37fa47588
BLAKE2b-256 97c75e123f266560cb4231601ebabf67703264bb48f383191cce27f0eda23db0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page