pystdoc: Python Structural & Topological Documentation Engine
pystdoc (Python Structural & Topological Documentation Engine) is an enterprise-grade, high-precision codebase and architectural documentation generator powered by LLMs, AST parsing, and libclang.
It analyzes codebases in bottom-up + top-down topological passes, constructs hierarchical execution/data models, and synthesizes clean, human-centric Markdown and Mermaid diagrams within a 16K context window.
[!WARNING] ⚠️ Caution: Potential LLM API Usage Costs
pystdocperforms thorough, multi-pass analysis by sending prompts for individual symbols, modules, and architecture synthesis. When using commercial paid API endpoints (such as OpenAI GPT-4, Claude, etc.), analyzing large codebases can consume a significant amount of tokens and may incur substantial financial costs. We strongly recommend using self-hosted/local LLM backends (e.g., LiteRT-LM, Ollama, vLLM, or LocalAI) or setting strict API budget limits before running against large projects.
📁 Output Directory: .docgen/
[!IMPORTANT] All generated documentation, architecture designs, and caches are automatically centralized inside the
.docgen/directory of your target project. Your existing source code files are never modified.
When pystdoc finishes, you can explore the complete documentation suite starting from .docgen/README.md:
your_project/
├── .docgen/ # <-- Centralized output directory
│ ├── README.md # Executive summary: "What does this project actually do?"
│ ├── design/ # System architecture and design documentation
│ │ ├── overview.md # Architecture overview & inter-module Mermaid diagram
│ │ ├── data_models.md # Data structure design, models, lifecycle & integrity
│ │ ├── execution_model.md # Runtime execution model, paradigms, & control flow
│ │ └── modules/ # Module-by-module detailed design documents
│ │ ├── module_a.md
│ │ └── ...
│ ├── documents/ # Granular symbol & source code documentation
│ │ ├── src/main.c.md # File-level overview and symbol list
│ │ ├── src/main.c.fn.main.md # Individual symbol document (with call graph & context)
│ │ └── ...
│ ├── files.txt # List of scanned source files
│ └── index.db # SQLite WAL database for instantaneous incremental caching
├── src/
└── ...
🌟 Key Features
- Topological & Structural Ordering (Tarjan SCC + Kahn DAG):
- Evaluates call graphs in $O(V+E)$ linear time.
- Automatically breaks cyclic mutual recursions and organizes code symbols into dependency-safe execution levels.
- Level-by-level parallel LLM execution guarantees context-rich bottom-up summaries without race conditions.
- 3-in-1 Unified Documentation Pipeline:
docgen: Bottom-up & top-down symbol-level documentation with SHA-256 and SQLite caching (.docgen/documents/).designgen: Map-Reduce architectural synthesis (.docgen/design/).reportgen/pystdoc: Executive summary README (.docgen/README.md) answering "What does this project actually do?"
- C/C++, Python & Shell Deep Understanding:
compile_commands.jsonIntegration: Full include path resolution and macro expansion vialibclang.- Fully Qualified Domain Names (FQDN): Disambiguates identical symbol names across large monorepos.
- Standard LLM Options & Multi-Language Support:
- Works with Ollama, LiteRT-LM, vLLM, and OpenAI API.
- Supports
--host,--model,--token/--api-key,--context-size, and--language(e.g.English,Japanese,日本語).
🚀 Quick Start
Installation
pip install pystdoc
Basic Usage
1. Generate Full Documentation & README (One Command)
pystdoc --dir ./my_project/
Output will be created at ./my_project/.docgen/README.md.
2. Generate in Japanese
pystdoc --dir ./my_project/ --language 日本語
3. Run Individual Steps
# Generate symbol-level docs into .docgen/documents/
docgen --dir ./my_project/ -j 4
# Synthesize architecture design docs into .docgen/design/
designgen --dir ./my_project/
4. Practical Real-World Example (Dedicated Remote LLM Server)
pystdoc --dir ./target_project/ --host 192.168.0.123:11434 --model gemma4-26b-a4b --language 日本語
⚙️ CLI Options
| Option | Alias / Env | Default | Description |
|---|---|---|---|
--dir |
./ |
Target project directory path | |
--language |
-l |
English |
Output documentation language (English, Japanese, 日本語) |
--host |
-H, --base-url |
http://127.0.0.1:11434 |
LLM server host endpoint URL |
--model |
-m, LLM_MODEL |
gemma4-26b-a4b |
LLM model identifier |
--token |
--api-key, OPENAI_API_KEY |
None |
API Bearer token |
--context-size |
--ctx-size |
16384 |
Context window size |
--concurrency |
-j |
1 |
Number of parallel LLM workers |
--force |
-f |
false |
Force regenerate all documents ignoring cache |
--compile-commands |
None |
Path to compile_commands.json |
📄 License
MIT License. Author: tab4moji.
Metadata
Release files for pystdoc 0.5.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pystdoc-0.5.7.tar.gz | 60.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pystdoc-0.5.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.9 kB
Release files / pystdoc-0.5.7.tar.gz
| Download URL | pystdoc-0.5.7.tar.gz |
|---|---|
| Size | 60.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0e843c0609f8159251573b3aacac006e07fea35c8ecd2a75a4e537aab4988b94
|
|
BLAKE2b-256 checksum How to use checksums |
7bce6781a79d42b1038eedc0e43451d12e8c1d2b23bcc1d4a83d014ea49f34cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / pystdoc-0.5.7-py3-none-any.whl
| Download URL | pystdoc-0.5.7-py3-none-any.whl |
|---|---|
| Size | 44.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
275e456be6f03973191abe32906a9fd74e92e3a60479a77ae33ec418ab521305
|
|
BLAKE2b-256 checksum How to use checksums |
e91d357810b4ea576916bd2f0b22f72b050e53e962a0aff1581137cf9a13a7ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|