MCPcopy Index your code
hub / github.com/bearcove/dodeca

github.com/bearcove/dodeca @v0.17.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.17.0 ↗ · + Follow
6,473 symbols 21,395 edges 370 files 1,826 documented · 28% updated 10d agov0.17.0 · 2026-06-26★ 21240 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

dodeca

MIT + Apache 2.0 salsa | yes please

A fully incremental static site generator.

Philosophy

Dev mode = Production mode. Unlike other static site generators that take shortcuts in development (skipping minification, using original asset paths, etc.), dodeca serves exactly what you'll get in production: cache-busted URLs, minified HTML, subsetted fonts, responsive images—the works. Even font subsetting runs in dev!

This is possible because dodeca uses picante for incremental computation. Every transformation is a cached query. Change a file and only the affected queries re-run. First page load builds what's needed; subsequent requests are instant.

Custom template engine. Dodeca includes its own Jinja-like template engine. This gives you the power of a real language (conditionals, loops, variable interpolation) without the complexity of learning a new syntax. The engine includes rich diagnostics with line/column information for template errors.

Processor architecture. Dodeca's build pipeline is made of focused processor crates for image optimization, CSS processing, syntax highlighting, search indexing, and more. They are linked into the ddc binary and called directly through typed facades.

Getting Started

Install dodeca:

The recommended way to install dodeca is the install script, which fetches prebuilt binaries from object storage. Releases ship a single ddc binary with the built-in processors linked in.

curl --proto '=https' --tlsv1.2 -LsSf https://bearcove-dist.s3.fr-par.scw.cloud/dodeca/install.sh | sh

Supported by the installer: - macOS (Apple Silicon / arm64) - Linux (x86_64)

After that, you can create a new site:

ddc init my-site
cd my-site
ddc serve

This starts a development server at http://localhost:8080 with live reload.

Key Features

  • Incremental builds: Only affected files are re-processed on changes
  • Cache-busted URLs: Assets get unique names based on content hash
  • Image optimization: Built-in image processing with responsive variants
  • Font subsetting: Automatically subset fonts to used characters
  • HTML minification: Minify HTML in production builds
  • Template engine: Powerful, easy-to-learn Jinja-like templates
  • Code execution: Execute code samples and capture output
  • Link checking: Verify all links in your site
  • Extensible: Plugin system for custom transformations

Structure

The dodeca workspace includes:

  • dodeca: Main SSG binary (ddc CLI)
  • gingembre: Template engine with rich diagnostics
  • cell-*: Processor and protocol crates for transformations
  • livereload-client: WASM client for live reload in development

Development

Build everything:

cargo xtask build

Run tests:

cargo test --workspace

Build the documentation:

cargo doc --workspace --no-deps --open

Contributing

Contributions are welcome! Please open issues and pull requests on GitHub.

Sponsors

Thanks to all individual sponsors:

GitHub Sponsors

<img src="https://github.com/bearcove/dodeca/raw/v0.17.0/static/sponsors-v3/patreon-light.svg" height="40" alt="Patreon">

...along with corporate sponsors:

AWS

Zed

...without whom this work could not exist.

License

Licensed under either of:

at your option.

Extension points exported contracts — how you extend this code

CodeBlockHandler (Interface)
A handler for rendering code blocks. Implementations can provide syntax highlighting, diagram rendering, or any other t [7 …
libs/marq/src/handler.rs
PrettyError (Interface)
Trait for errors that can be formatted with source context [8 implementers]
crates/gingembre/src/error.rs
DiffTree (Interface)
Trait for types that can be diffed as trees. This abstracts over the tree storage, allowing different implementations ( [5 …
libs/hotmeal/cinereus/src/tree.rs
Notification (Interface)
(no doc) [22 implementers]
libs/lsp-types/src/notification.rs
Shape (Interface)
(no doc) [14 implementers]
libs/pikru/src/render/shapes.rs
AuthoringProjectProvider (Interface)
Builds an `AuthoringProject` from the host's live db (snapshot + overlays), so the in-process LSP reuses the server's al [2 …
crates/dodeca/src/authoring_model.rs
RouterContext (Interface)
Router context used by the HTTP router to call back into dodeca. [1 implementers]
cells/cell-http/src/main.rs
TemplateRenderer (Interface)
Renderer interface implemented by the template processor The template renderer receives render requests and produces HT [1 …
cells/cell-gingembre-proto/src/lib.rs

Core symbols most depended-on inside this repo

clone
called by 1175
libs/hotmeal/cinereus/src/tree.rs
map
called by 821
libs/pikru/src/types.rs
push_str
called by 679
libs/hotmeal/hotmeal/src/stem.rs
iter
called by 567
libs/aasvg/src/path.rs
push
called by 549
crates/gingembre/src/lazy.rs
insert
called by 498
libs/aasvg/src/path.rs
expect
called by 497
crates/gingembre-syntax/src/parser.rs
push
called by 447
libs/hotmeal/cinereus/src/chawathe.rs

Shape

Function 3,226
Method 1,706
Class 1,048
Enum 412
Interface 81

Languages

Rust94%
TypeScript6%
Python1%

Modules by API surface

crates/dodeca-authoring-lsp/src/authoring_lsp.rs296 symbols
crates/dodeca/src/coverage/code_units.rs171 symbols
libs/lsp-types/src/lib.rs155 symbols
libs/marq/src/render.rs153 symbols
crates/gingembre/src/render.rs153 symbols
crates/dodeca/src/serve.rs142 symbols
libs/hotmeal/hotmeal/src/dom.rs121 symbols
crates/dodeca/src/authoring_templates.rs111 symbols
libs/hotmeal/hotmeal/src/diff.rs108 symbols
libs/pikru/src/types.rs107 symbols
crates/dodeca/src/queries.rs101 symbols
xtask/src/ci.rs82 symbols

For agents

$ claude mcp add dodeca \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page