Incremental Computation

dodeca uses Picante, an async incremental query runtime. Everything is a query; queries are memoized async functions that track which inputs they read.

When you change a file, picante traces exactly which outputs depend on it and only recomputes those. Edit features.md and only that page re-renders—other pages, CSS, images, and fonts stay cached.

SourceFile → parse_file → build_tree → render_page → all_rendered_html → build_site
                                ↑
TemplateFile → load_template ───┘

The cache persists to disk via facet-postcard. Even a cold start benefits from previous work. Large outputs (images, fonts) are stored separately in content-addressed storage (CAS) to keep the picante database small.

See Architecture for how picante, CAS, and plugins work together.