Eigen is a fast, opinionated static site generator built in Rust. It renders full HTML pages and HTMX fragments side-by-side — seamless partial page loads, zero client-side framework required.
Blazing fast builds powered by Rust. Templates compile through minijinja, data fetches are cached, and static assets are copied in parallel.
Every page generates both a full HTML document and a standalone fragment. HTMX partial page loads work out of the box — no configuration needed.
Pull data from any REST API directly in your template frontmatter. Filter, sort, and limit results. Responses are cached per-build.
Generate hundreds of pages from a single [slug].html template. Powered by collection queries with automatic slug sanitization.
Axum-powered dev server with SSE live reload, smart rebuilds, and built-in API proxy to eliminate CORS issues during development.
One site.toml controls everything — metadata, build options, data sources, asset localization, and environment variable interpolation.
Use Jinja2 syntax via minijinja. Reference local YAML/JSON files or remote APIs directly in your template's YAML frontmatter.
Each {% block %} is automatically extracted as an HTML fragment alongside the full page. No extra work required.
link_to() for seamless navigationThe link_to function emits href, hx-get, hx-target, and hx-push-url in one call. Progressive enhancement baked in.
The output is a plain dist/ folder. Deploy to Netlify, Vercel, Cloudflare Pages, S3, or any static host.
# Site configuration [site] name = "My Blog" base_url = "https://myblog.com" [build] fragments = true [sources.blog_api] url = "https://api.example.com" headers = { Authorization = "Bearer ${API_TOKEN}" }
<!-- templates/posts/[post].html --> --- collection: source: blog_api path: /posts slug_field: id item_as: post --- {% extends "_base.html" %} {% block content %} <article> <h1>{{ post.title }}</h1> <p>{{ post.body }}</p> </article> {% endblock %}
# Eigen generates BOTH files automatically: dist/posts/1.html # Full HTML page dist/_fragments/posts/1.html # Just the <article> block # The link_to() function wires it all up: <a href="/posts/1.html" hx-get="/_fragments/posts/1.html" hx-target="#content" hx-push-url="/posts/1.html"> Read Post </a>
Eigen is open source and ready for your next project.