Professional Sphinx documentation generator with intelligent auto-discovery. Automatically finds and unifies READMEs, changelogs, markdown guides, and API docs into beautifully organized documentation sites.
Project description
Introligo - Documentation Hub
Your repository's documentation, unified. Automatically discover, organize, and combine all your docsโREADMEs, Changelogs, Markdown guides, API docsโinto one beautiful Sphinx site.
Note: Introligo is an open-source component of the Celin Project, freely available for any project.
The Problem
Your documentation is scattered:
- ๐ README.md in the root
- ๐ User guides in
docs/ - ๐ CHANGELOG.md tracking history
- ๐ค CONTRIBUTING.md for contributors
- ๐ฆ Python docstrings in code
- ๐ง Example READMEs in subdirectories
Each file is useful, but together they're a mess.
The Solution: Introligo Hub
# Create hub_config.yaml
discovery:
enabled: true
auto_include:
readme: true
changelog: true
markdown_docs: "docs/**/*.md"
python -m introligo hub_config.yaml -o docs -v
cd docs && sphinx-build -b html . _build/html
Result: Professional Sphinx documentation, automatically organized. โจ
How It Works
1. Auto-Discovery
Introligo scans your repository and finds all documentation:
- README files (root and subdirectories)
- CHANGELOG.md
- CONTRIBUTING.md
- LICENSE
- Markdown guides
- RST files
2. Smart Organization
Documents are intelligently categorized:
- Getting Started โ READMEs, installation guides
- User Guides โ Tutorials, how-tos
- API Reference โ Code documentation
- About โ Changelog, contributing, license
3. Beautiful Output
Everything combines into a professional Sphinx site with:
- Automatic navigation (toctree)
- Searchable content
- Mobile-responsive design
- Light/dark mode
- Your choice of theme
Quick Start (3 Steps)
Step 1: Install
pip install PyYAML jinja2 sphinx furo
Step 2: Create Configuration
Create introligo_config.yaml in your project root:
index:
title: "๐ My Project Docs"
discovery:
enabled: true
auto_include:
readme: true
changelog: true
contributing: true
license: true
markdown_docs: "docs/**/*.md"
sphinx:
project: "My Project"
html_theme: "furo"
palette: "celin" # Beautiful cosmic theme
Step 3: Generate
python -m introligo introligo_config.yaml -o docs_output -v
cd docs_output
sphinx-build -b html . _build/html
python -m http.server 8000 --directory _build/html
Open http://localhost:8000 โ your docs are ready! ๐
Features
๐ Auto-Discovery
- Finds README, CHANGELOG, CONTRIBUTING, LICENSE automatically
- Scans for markdown files by pattern
- Discovers documentation anywhere in your repo
๐ง Smart Categorization
- Analyzes content to determine correct section
- Keywords-based classification
- Location-aware organization
- Handles multiple READMEs intelligently
๐ Multi-Format Support
- Markdown โ Converted to RST with smart link handling
- RST โ Included natively
- LaTeX โ Mathematical formulas
- Text โ Literal blocks
- Python โ Sphinx autodoc (automatic API extraction)
- C/C++ โ Doxygen/Breathe integration (automatic API extraction)
- Go โ Automatic extraction via
go doc(when Go is installed)
๐จ Beautiful Themes
- Built-in Celin palette (cosmic colors)
- Built-in Default palette
- Custom palette support
- Furo, RTD, Alabaster themes
- Auto-generated
conf.py
๐ฏ Flexible Configuration
- Hub Mode (automatic) - Recommended
- Classic Mode (manual control) - Power users
- Hybrid (mix both) - Best of both worlds
Real-World Example
Here's what Introligo finds in a typical project:
my-project/
โโโ README.md โ Getting Started
โโโ CHANGELOG.md โ About
โโโ CONTRIBUTING.md โ About
โโโ LICENSE โ About
โโโ docs/
โ โโโ tutorial.md โ User Guides
โ โโโ user-guide.md โ User Guides
โ โโโ advanced.md โ User Guides
โโโ src/
โโโ myproject/ โ API Reference (autodoc)
โโโ examples/
โโโ README.md โ User Guides
One command generates complete, organized documentation from all of this.
Configuration Guide
Minimal Configuration
discovery:
enabled: true
auto_include:
readme: true
changelog: true
That's it! Introligo finds and organizes your READMEs and changelog.
Recommended Configuration
index:
title: "๐ My Project Documentation"
description: "Complete documentation hub"
discovery:
enabled: true
scan_paths:
- "."
- "docs/"
auto_include:
readme: true
changelog: true
contributing: true
license: true
markdown_docs: "docs/**/*.md"
exclude_patterns:
- "node_modules"
- ".venv"
sphinx:
project: "My Project"
author: "Your Name"
html_theme: "furo"
palette: "celin"
Advanced: Mix Auto + Manual
discovery:
enabled: true
auto_include:
readme: true
changelog: true
# Manually add API docs and custom sections
modules:
api:
title: "๐ API Reference"
module: "myproject" # Python autodoc
architecture:
title: "๐๏ธ Architecture"
file_includes:
- "docs/design.md"
- "docs/decisions.md"
Use Cases
โ Open Source Projects
Perfect for: Projects with established docs scattered across README files and markdown guides.
discovery:
enabled: true
auto_include:
readme: true
changelog: true
contributing: true
license: true
โ Python Libraries
Perfect for: Libraries needing API docs combined with guides.
discovery:
enabled: true
auto_include:
readme: true
markdown_docs: "docs/**/*.md"
modules:
api:
module: "mylib" # Auto-generates API docs
โ Documentation Migration
Perfect for: Moving from markdown to Sphinx.
discovery:
enabled: true
scan_paths: ["."]
auto_include:
markdown_docs: "**/*.md" # Find everything
โ Multi-Language Projects
Perfect for: C++/Python projects with Doxygen and Sphinx.
discovery:
enabled: true
auto_include:
readme: true
doxygen:
xml_path: "build/doxygen/xml"
modules:
cpp_api:
language: cpp
doxygen_files: ["mylib.h"]
python_api:
module: "mylib"
Classic Mode (For Power Users)
If you need complete control over documentation structure:
# No discovery - manually define everything
modules:
getting_started:
title: "Getting Started"
file_includes: "README.md"
user_guide:
title: "User Guide"
parent: "getting_started"
file_includes: "docs/guide.md"
api:
title: "API Reference"
module: "myproject"
When to use Classic Mode:
- Complex hierarchical requirements
- Precise control needed
- Building docs from scratch
- Custom organization beyond categories
Most users should use Hub Mode.
Installation
Basic Installation
pip install PyYAML jinja2
With Sphinx (for building docs)
pip install PyYAML jinja2 sphinx furo
With C/C++ Support
pip install PyYAML jinja2 sphinx breathe
sudo apt-get install doxygen # or: brew install doxygen
With Go Support
Go documentation is extracted automatically when Go is installed:
pip install PyYAML jinja2 sphinx furo
# Install Go from https://go.dev/dl/ for automatic doc extraction
Note: Go documentation is extracted using go doc. If Go is not installed, Introligo gracefully falls back to providing links to pkg.go.dev.
Development Installation
git clone https://github.com/JakubBrzezo/introligo.git
cd introligo
pip install -e .[dev,docs]
Documentation
Examples
- Hub Example - Complete realistic project
- Python Example - Python autodoc
- C Example - Doxygen integration
- Go Example - Go package documentation
- LaTeX Example - Math formulas
- RST Example - RST includes
Guides
- Examples Guide - All examples explained
- Hub Architecture - Technical details
- Migration Guide - From Classic to Hub
Command Line
# Generate documentation
python -m introligo config.yaml -o output/
# Preview (dry-run)
python -m introligo config.yaml -o output/ --dry-run
# Verbose output
python -m introligo config.yaml -o output/ -v
# Custom template
python -m introligo config.yaml -o output/ -t custom.jinja2
# Strict mode (fail on errors)
python -m introligo config.yaml -o output/ --strict
Migrating to Hub Mode
From Scattered Docs
If you have READMEs and markdown files:
Before: Multiple disconnected files After: One command to unite them
discovery:
enabled: true
auto_include:
readme: true
markdown_docs: "docs/**/*.md"
From Classic Introligo
If you're using the old YAML approach:
Before:
modules:
getting_started:
title: "Getting Started"
file_includes: "README.md"
changelog:
title: "Changelog"
file_includes: "CHANGELOG.md"
After:
discovery:
enabled: true
auto_include:
readme: true
changelog: true
Much simpler! And you can still add manual modules.
FAQ
Q: Do I have to move my documentation files?
No! Introligo finds documentation wherever it is. READMEs, guides, and other files can stay in their current locations.
Q: What if auto-categorization gets it wrong?
Use manual modules to override:
discovery:
enabled: true
auto_include:
markdown_docs: "docs/**/*.md"
modules:
architecture: # Manually control this
title: "Architecture"
file_includes: "docs/architecture.md"
Q: Can I customize the organization?
Yes! Use hybrid modeโauto-discover common files, manually organize complex sections.
Q: Does it work with existing Sphinx projects?
Yes! Introligo generates RST files that work with any Sphinx setup.
Q: What about my existing conf.py?
Introligo can auto-generate conf.py, but if you have a custom one, just don't enable the sphinx section.
Requirements
- Python 3.8 or higher
- PyYAML >= 6.0
- Jinja2 >= 3.0
- Sphinx >= 4.0 (for building)
Optional:
- Breathe >= 4.0 (C/C++ documentation)
- Doxygen (C/C++ documentation)
Contributing
We welcome contributions! See CONTRIBUTING.md for:
- Development setup
- Running tests
- Code style
- Submitting PRs
License
Copyright (c) 2025 WT Tech Jakub Brzezowski
Introligo is an open-source component of the Celin Project. Free for any use, commercial or non-commercial.
Links
- Documentation: Full docs
- Issues: GitHub Issues
- Examples:
examples/
Made with โค๏ธ by WT Tech Jakub Brzezowski
Part of the Celin Project ecosystem
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 introligo-1.4.0.tar.gz.
File metadata
- Download URL: introligo-1.4.0.tar.gz
- Upload date:
- Size: 8.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b0e6f8a241e04ba58ccfbe8b9b32b57e070373b08ddb49d4b157c3485a554ee
|
|
| MD5 |
c9c879ce3bb584f87950914973605544
|
|
| BLAKE2b-256 |
6edfdbd611cc24399706cff50725216ec80e8ff6727c17c5ad0480aacb11fd2d
|
Provenance
The following attestation bundles were made for introligo-1.4.0.tar.gz:
Publisher:
publish-pypi.yml on JakubBrzezo/introligo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
introligo-1.4.0.tar.gz -
Subject digest:
4b0e6f8a241e04ba58ccfbe8b9b32b57e070373b08ddb49d4b157c3485a554ee - Sigstore transparency entry: 655227815
- Sigstore integration time:
-
Permalink:
JakubBrzezo/introligo@19b3708a6dd0fde9e66145d5ad6687d1a4de2b36 -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/JakubBrzezo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@19b3708a6dd0fde9e66145d5ad6687d1a4de2b36 -
Trigger Event:
push
-
Statement type:
File details
Details for the file introligo-1.4.0-py3-none-any.whl.
File metadata
- Download URL: introligo-1.4.0-py3-none-any.whl
- Upload date:
- Size: 60.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d8ec3045e51cb48d88d5ad5268cfe36f90513068d6a59edb88902a31e96301b
|
|
| MD5 |
8ad5aa218e7237e223451a18a9bf72cd
|
|
| BLAKE2b-256 |
e01e7ab8521f0885e3f51e7aaa427fe2443c0df2ed99a3babc1d96d1d94c1b30
|
Provenance
The following attestation bundles were made for introligo-1.4.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on JakubBrzezo/introligo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
introligo-1.4.0-py3-none-any.whl -
Subject digest:
5d8ec3045e51cb48d88d5ad5268cfe36f90513068d6a59edb88902a31e96301b - Sigstore transparency entry: 655227838
- Sigstore integration time:
-
Permalink:
JakubBrzezo/introligo@19b3708a6dd0fde9e66145d5ad6687d1a4de2b36 -
Branch / Tag:
refs/tags/v1.4.0 - Owner: https://github.com/JakubBrzezo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@19b3708a6dd0fde9e66145d5ad6687d1a4de2b36 -
Trigger Event:
push
-
Statement type: