Transform complexity into clarity with C4 model documentation and LLM integration
loko (Papa Loko) is a modern architecture documentation tool that brings the C4 model to life through conversational design with LLMs, powerful CLI workflows, and beautiful documentation generation.
🤖 LLM-First Design - 17 MCP tools for conversational architecture with Claude, GPT, or Gemini
📝 Direct Editing - Edit markdown and D2 diagrams in your favorite editor
⚡ Real-Time Feedback - Watch mode rebuilds in <500ms with hot reload
🎨 Beautiful Output - Generate HTML, Markdown, and TOON formats
🔧 Powerful CLI - Scaffold, build, validate, serve, and query — all from the terminal
🐳 Docker Ready - Official images with all dependencies included
🎯 Zero Config - Smart defaults with optional customization via TOML
💰 Token Efficient - 9.2% token savings with TOON format + progressive context loading
🔗 Relationship Graph - Live dependency graph from frontmatter + D2 arrow syntax (v0.2.0)
🧩 Smart Templates - Technology-aware component scaffolding (7 categories, v0.2.0)
🔍 Drift Detection - Catch inconsistencies between D2 diagrams and frontmatter (v0.2.0)
macOS / Linux (Homebrew)
brew tap madstone-tech/tap
brew install lokoGo Install
go install github.com/madstone-tech/loko@latestDocker
docker pull ghcr.io/madstone-tech/loko:latest# Initialize a new project
loko init my-architecture
cd my-architecture
# Scaffold your first system
loko new system PaymentService
# Edit the generated files
vim src/PaymentService/system.md
vim src/PaymentService/system.d2
# Build and preview
loko serve
# Open http://localhost:8080That's it! You now have a live-reloading documentation site.
# Start MCP server
loko mcp
# In your LLM client (Claude, etc):
# "I'm building a payment processing system with an API and database"
# LLM uses loko to scaffold structure and create diagrams# Watch for changes
loko watch &
# Edit files in your editor
vim src/PaymentService/system.d2
# Automatically rebuilds and refreshes browser# Validate architecture (with drift detection)
loko validate --strict --exit-code --check-drift
# Build documentation
loko build --format html,markdown,toonSee docs/guides/ci-cd-integration.md for GitHub Actions and GitLab CI examples.
loko provides 17 MCP tools for LLM-assisted architecture workflows:
| Tool | Description |
|---|---|
query_project |
Get project metadata |
query_architecture |
Token-efficient architecture queries (summary/structure/full) |
search_elements |
Search by name, type, technology, or tags |
find_relationships |
Find connections between elements |
query_dependencies |
Find what a component depends on (direct + transitive) |
query_related_components |
Find components related to a given component |
analyze_coupling |
Measure coupling metrics across the architecture |
create_system |
Scaffold new system |
create_container |
Scaffold container |
create_component |
Scaffold with technology-aware template + optional D2 preview |
update_system |
Update system metadata |
update_container |
Update container metadata |
update_component |
Update component metadata |
update_diagram |
Write D2 code to file |
build_docs |
Generate HTML/Markdown/TOON docs (auto-populates component tables) |
validate |
Check architecture consistency + optional drift detection |
validate_diagram |
Verify D2 syntax |
Note:
find_relationships,query_dependencies,query_related_components, andanalyze_couplingreturn live graph data as of v0.2.0.
Setup: See docs/guides/mcp-integration-guide.md for Claude Desktop configuration.
Context
└── System
└── Container
└── Component
my-architecture/
├── loko.toml # Configuration
├── src/ # Source documentation
│ ├── context.md
│ ├── context.d2
│ └── SystemName/
│ ├── system.md
│ ├── system.d2
│ └── ContainerName/
│ ├── container.md
│ └── container.d2
└── dist/ # Generated output
└── index.html
loko follows Clean Architecture principles:
loko/
├── cmd/ # CLI commands (thin layer)
│
├── internal/
│ ├── core/ # THE HEART - zero external dependencies
│ │ ├── entities/ # Domain objects: Project, System, Container
│ │ ├── usecases/ # Application logic + port interfaces
│ │ └── errors/ # Domain-specific errors
│ │
│ ├── adapters/ # Infrastructure implementations
│ │ ├── config/ # TOML configuration
│ │ ├── filesystem/ # File operations
│ │ ├── d2/ # Diagram rendering
│ │ ├── encoding/ # JSON + TOON encoders
│ │ └── html/ # Site builder
│ │
│ ├── mcp/ # MCP server + tools
│ ├── api/ # HTTP API server
│ └── ui/ # Terminal UI (lipgloss)
│
├── templates/ # Starter templates
└── docs/ # Documentation + ADRs
loko is designed to minimize LLM token consumption:
# Quick overview (~200 tokens)
query_architecture --detail summary
# System hierarchy (~500 tokens)
query_architecture --detail structure
# Full details for one system (variable)
query_architecture --detail full --target PaymentServiceTOON v3.0 reduces tokens by 9.2% for structured data:
# Export architecture in token-efficient format
loko build --format toon
# Query with TOON format via MCP
query_architecture --format toon --detail summary
# Measured savings (5 systems, 15 containers):
# JSON: 4,550 tokens
# TOON: 4,131 tokens
# Savings: 9.2% (419 tokens)See docs/guides/toon-format-guide.md for details.
loko new component auto-selects the best template based on the component's technology:
| Category | Example Technologies |
|---|---|
compute |
AWS Lambda, Azure Functions, Cloud Run |
datastore |
PostgreSQL, DynamoDB, Redis, MongoDB |
messaging |
Kafka, SQS, RabbitMQ, SNS |
api |
REST, GraphQL, gRPC, FastAPI |
event |
EventBridge, Pub/Sub, Event Grid |
storage |
S3, GCS, Azure Blob |
generic |
(default fallback) |
# Auto-selected template based on technology
loko new component AuthService --parent api-service --technology "AWS Lambda"
# Preview the component's position in the container diagram
loko new component AuthService --parent api-service --preview
# Explicit override
loko new component AuthService --parent api-service --template datastoreSee docs/guides/templates.md for the full mapping table and custom templates.
loko builds a live dependency graph by merging two sources:
# frontmatter (system.md or component.md)
relationships:
- target: "DatabaseService"
label: "Reads from"
technology: "SQL"# D2 arrow syntax (system.d2)
AuthService -> DatabaseService: Queries# Query via CLI
loko query --relationships PaymentService
# Query via MCP
find_relationships --source "PaymentService/**"
query_dependencies --target "AuthService"See docs/guides/relationships.md for frontmatter syntax and D2 conventions.
Catch inconsistencies between your D2 diagrams and frontmatter metadata:
loko validate --check-drift
# WARNING AuthService: D2 tooltip differs from frontmatter description
# ERROR PaymentService: D2 arrow references non-existent component "OldService"
# Exit code 1 (errors found)Severity levels: WARNING (description mismatches) and ERROR (orphaned references, missing components).
See docs/guides/data-model.md for the source-of-truth hierarchy.
Powered by D2 with caching:
# src/System/system.d2
User -> API: Uses
API -> Database: Queriesloko render src/System/system.d2
# Generates: dist/diagrams/system.svgloko build --format html # Static website
loko build --format markdown # Single README.md
loko build --format toon # Token-efficient TOON formatloko.toml (TOML format):
[project]
name = "my-architecture"
description = "System architecture documentation"
[paths]
source = "./src"
output = "./dist"
[d2]
theme = "neutral-default"
layout = "elk"
cache = true
[outputs.html]
enabled = true
navigation = "sidebar"
search = true
[build]
parallel = true
max_workers = 4See docs/configuration.md for all options.
Check out examples/ for complete projects:
- simple-project - Minimal C4 documentation
- 3layer-app - Standard web → API → database
- microservices - Multi-service architecture
# Initialize project
docker run -v $(pwd):/workspace ghcr.io/madstone-tech/loko init my-arch
# Build documentation
docker run -v $(pwd):/workspace ghcr.io/madstone-tech/loko build
# Serve with hot reload
docker run -v $(pwd):/workspace -p 8080:8080 ghcr.io/madstone-tech/loko servegit clone https://github.com/madstone-tech/loko
cd loko
go mod download
make test
go run main.go --helpSee CONTRIBUTING.md for development guidelines.
Comprehensive documentation is available in the docs/ directory:
- Quick Start Guide - Get running in 5 minutes
- CLI Reference - All commands and flags
- Configuration Reference - Complete loko.toml options
- MCP Integration - AI-assisted architecture design
- Relationships Guide - Frontmatter syntax, D2 arrows, union merge
- Templates Guide - Technology-to-template mapping, custom templates
- Data Model & Drift Detection - Source of truth hierarchy
- MCP Setup Guide - Detailed MCP configuration
- MCP Integration Guide - v0.2.0 relationship tools
- CI/CD Integration - GitHub Actions, GitLab CI
- TOON Format Guide - Token-efficient notation
- Migration Guide v0.2.0 - Qualified node IDs
- API Reference - HTTP API endpoints
- ADR-0001: Clean Architecture
- ADR-0002: Token-Efficient MCP
- ADR-0003: TOON Format
- ADR-0004: Graph Conventions
- CHANGELOG - Version history and release notes
See the Documentation Index for the complete catalog.
- Clean Architecture with 18 port interfaces
- Domain entities (Project, System, Container, Component)
- CLI framework (Cobra + Viper) with shell completions
- Template system (standard-3layer, serverless project templates)
- D2 diagram rendering with caching
- HTML site generation with watch mode
- MCP server (15 tools for LLM integration)
- Functional Relationship Graph:
find_relationships,query_dependencies,query_related_components,analyze_couplingnow return live data - Technology-Aware Templates: 7 component templates (compute, datastore, messaging, api, event, storage, generic);
--templateoverride - D2 Diagram Preview:
loko new component --previewrenders component position; MCPpreview: trueparameter - Auto-Generated Tables:
{{component_table}}/{{container_table}}placeholders auto-populated in docs - Drift Detection:
loko validate --check-driftwith WARNING/ERROR severity and exit code 1 on errors - Coverage: Core package coverage improved from 58.1% to 80.7%
- OpenAPI serving (Swagger UI at
/api/docs) - Architecture diff and changelog generation
- Plugin system
- Multi-project support
We welcome contributions! loko is building in public — see our development progress.
- 🐛 Bug reports → Open an issue
- 💡 Feature requests → Start a discussion
- 🔧 Pull requests → See CONTRIBUTING.md
Business Source License 1.1 - Copyright (c) 2025-2026 MADSTONE TECHNOLOGY
loko builds on excellent open-source tools:
- D2 - Declarative diagramming
- ason - Template scaffolding
- TOON - Token-efficient notation
- C4 Model - Architecture visualization approach
- Cobra - CLI framework
- Bubbletea - TUI framework
Papa Loko is the lwa (spirit) in Haitian Vodou who guards sacred knowledge, maintains tradition, and passes down wisdom to initiates. As the first houngan (priest), he is the keeper of the ritual knowledge that connects the physical and spiritual worlds.
Like Papa Loko, this tool acts as the guardian of your architectural wisdom — organizing knowledge, maintaining documentation traditions, and making complex systems understandable.
"Papa Loko, you're the wind, pushing us, and we become butterflies." 🦋