seite 0.1.2

AI-native static site generator — every page ships as HTML, markdown, and structured data
Documentation

Every page ships as HTML for browsers, markdown for LLMs, and JSON-LD for search engines. Single binary. Zero config. Built with Rust.

curl -fsSL https://seite.sh/install.sh | sh
seite init mysite --title "My Site" --collections posts,docs,pages
cd mysite && seite serve

Why seite

Most static site generators produce HTML and stop there. seite builds for three audiences at once:

  • Browsers get pages with full SEO metadata, Open Graph, Twitter Cards, and JSON-LD structured data
  • LLMs get llms.txt, llms-full.txt, and a .md copy of every page for direct consumption
  • AI tools get a built-in MCP server that exposes your entire site as structured resources

All from markdown + YAML frontmatter. No JavaScript runtime. No build dependencies. One binary does everything.

Features

  • AI agentseite agent spawns Claude Code with full site context. Create posts, apply themes, and manage content conversationally
  • MCP serverseite mcp exposes docs, config, content, and themes to any AI tool via the Model Context Protocol
  • 6 bundled themes — default, minimal, dark, docs, brutalist, bento — or generate a custom one with seite theme create "coral brutalist with lime accents"
  • 6 collection presets — posts, docs, pages, changelog, roadmap, and trust center (compliance hub)
  • Multi-language — filename-based i18n with per-language URLs, RSS feeds, sitemaps, search indexes, and hreflang tags
  • Image pipeline — auto-resize, WebP conversion, srcset/<picture> elements, lazy loading
  • Deploy anywhere — GitHub Pages, Cloudflare Pages, Netlify with guided setup, pre-flight checks, and --dry-run
  • Analytics — Google Analytics, GTM, Plausible, Fathom, Umami with optional cookie consent banner
  • Shortcodesyoutube, vimeo, gist, callout, figure built-in, plus user-defined templates
  • Multi-site workspaces — manage multiple sites from one directory with unified dev server
  • Self-updateseite self-update fetches the latest release with SHA256 checksum verification

Install

macOS / Linux:

curl -fsSL https://seite.sh/install.sh | sh

Windows (PowerShell):

irm https://seite.sh/install.ps1 | iex

From source (requires Rust toolchain):

cargo install seite

Pin a specific version:

VERSION=v0.1.0 curl -fsSL https://seite.sh/install.sh | sh

Quickstart

# Create a new site with blog posts, documentation, and static pages
seite init mysite --title "My Site" --collections posts,docs,pages
cd mysite

# Start the dev server with live reload
seite serve

Open http://localhost:3000. Edit content in content/, templates in templates/. The dev server live-reloads on every change.

# Create content
seite new post "Hello World" --tags intro,rust
seite new doc "Getting Started"
seite new changelog "v1.0.0" --tags new,improvement

# Deploy
seite deploy                  # commit, push, build, deploy
seite deploy --dry-run        # preview what would happen
seite deploy --setup          # guided first-time setup

Build output

seite build runs a 13-step pipeline. For a site with posts and docs, it produces:

dist/
├── index.html                 # Homepage
├── posts/
│   ├── hello-world.html       # HTML for browsers
│   └── hello-world.md         # Markdown for LLMs
├── docs/
│   └── getting-started.html
├── feed.xml                   # RSS feed
├── sitemap.xml                # XML sitemap with hreflang
├── search-index.json          # Client-side search index
├── robots.txt
├── llms.txt                   # LLM discovery summary
├── llms-full.txt              # Full markdown for LLM indexing
├── 404.html
└── static/

Every HTML page includes canonical URLs, Open Graph tags, Twitter Cards, JSON-LD structured data (BlogPosting/Article/WebSite), and links to its markdown alternate.

AI integration

Agent

seite agent spawns Claude Code as a subprocess with rich site context — config, content inventory, templates, and available commands. No API keys needed; it uses your Claude Code subscription directly.

seite agent "write a blog post about Rust error handling"
seite agent     # interactive session

MCP server

seite mcp runs a Model Context Protocol server over stdio. Claude Code auto-starts it via .claude/settings.json (created by seite init).

Resourcesseite://docs, seite://config, seite://content, seite://themes, seite://trust

Toolsseite_build, seite_create_content, seite_search, seite_apply_theme, seite_lookup_docs

LLM discovery

Every build generates llms.txt (summary) and llms-full.txt (complete markdown) for LLM indexing, plus a .md copy of every page. Multilingual sites get per-language versions.

Collections

Six built-in presets, each with dedicated templates and theme CSS:

Preset Dated RSS Nested Use case
posts Blog posts, articles
docs Documentation with sidebar navigation
pages Standalone pages (About, Contact)
changelog Release notes with colored tag badges
roadmap Public roadmap with status tracking
trust Compliance hub (SOC 2, ISO 27001, GDPR, ...)
seite collection add changelog    # add to existing site
seite new changelog "v2.0" --tags new,breaking

Themes

Six themes ship with the binary — no downloads, no CDNs:

Theme Description
default Clean centered column, system fonts, blue links
minimal Georgia serif, literary feel, generous whitespace
dark True black #0a0a0a, violet accents, visible focus rings
docs Fixed sidebar with auto-scrolling nav, GitHub-style
brutalist Cream background, thick black borders, hard shadows, yellow accents
bento CSS grid cards, rounded corners, mixed sizes, soft shadows
seite theme list                              # show all themes
seite theme apply dark                        # switch theme
seite theme create "neon cyberpunk on black"  # AI-generated custom theme
seite theme install https://example.com/t.tera  # install from URL
seite theme export my-theme                   # share your theme

All themes include: responsive design, accessibility (skip-to-main, ARIA labels, focus rings, prefers-reduced-motion), search, pagination, language switcher, and full SEO/structured data output.

Multi-language

Filename-based translations. Fully backward-compatible — single-language sites work identically.

content/posts/
├── hello-world.md        → /posts/hello-world
├── hello-world.es.md     → /es/posts/hello-world
└── hello-world.fr.md     → /fr/posts/hello-world
# seite.toml
[languages.es]
title = "Mi Sitio"

[languages.fr]
title = "Mon Site"

Each language gets its own index, RSS feed, search index, and LLM discovery files. The sitemap includes xhtml:link alternates for all translations.

Deployment

seite deploy              # commit, push, build, deploy
seite deploy --dry-run    # preview without deploying
seite deploy --setup      # interactive guided setup
seite deploy --domain example.com  # configure custom domain

Three targets with pre-flight checks, auto-recovery on failures, and post-deploy verification:

[deploy]
target = "cloudflare"    # or "github-pages" or "netlify"

seite init auto-generates the CI workflow for your chosen target.

Configuration

# seite.toml — minimal config (everything else is optional)
[site]
title = "My Site"
base_url = "https://example.com"

[[collections]]
name = "posts"
[site]
title = "My Site"
description = "A site built with seite"
base_url = "https://example.com"
language = "en"
author = "Your Name"

[[collections]]
name = "posts"
# name = "docs" | "pages" | "changelog" | "roadmap" | "trust"
# paginate = 10          # enable pagination

[build]
output_dir = "dist"
data_dir = "data"         # YAML/JSON/TOML → {{ data.filename }} in templates
minify = true             # strip CSS/JS comments, collapse whitespace
fingerprint = true        # name.<hash8>.ext + asset-manifest.json

[deploy]
target = "github-pages"   # or "cloudflare" or "netlify"
auto_commit = true

[images]
widths = [480, 800, 1200]
quality = 80
webp = true
lazy_loading = true

[analytics]
provider = "plausible"    # or "google", "gtm", "fathom", "umami"
id = "example.com"
cookie_consent = false    # set true to show consent banner
# script_url = "..."      # custom URL for self-hosted analytics

[languages.es]
title = "Mi Sitio"

[trust]
company = "Acme Corp"
frameworks = ["soc2", "iso27001"]

Data files

Drop YAML, JSON, or TOML files in data/ and access them in any template:

# data/nav.yaml
- title: Blog
  url: /posts
- title: Docs
  url: /docs
- title: GitHub
  url: https://github.com/user/repo
  external: true
<!-- Available as {{ data.nav }} in all templates -->

All bundled themes automatically render data.nav (header) and data.footer (footer links + copyright).

Workspaces

Manage multiple sites from a single directory:

seite workspace init my-workspace
seite workspace add blog --collections posts,pages
seite workspace add docs --collections docs
seite build --site blog    # build one site
seite serve                # unified dev server at /<site-name>/
seite deploy               # deploy all sites

Documentation

Full docs at seite.sh

Contributing

Contributions are welcome. Please open an issue to discuss larger changes before submitting a PR.

cargo build          # build
cargo test           # 331 tests (139 unit + 192 integration)
cargo clippy         # must be zero warnings

License

MIT