Releases

Release history and changelog for seite.

v0.12.0

Subdomain Deploy Steps in Generated Workflows

seite init and seite deploy --setup now auto-generate deploy steps for subdomain collections. Previously, when a collection had subdomain and deploy_project configured, only the main site was deployed in CI — users had to manually add the subdomain deploy step.

Now the generated Cloudflare workflow includes steps like:

- name: Deploy docs to Cloudflare Pages
  uses: cloudflare/wrangler-action@v3
  with:
    apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
    accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
    command: pages deploy dist-subdomains/docs --project-name my-docs

Netlify workflows get equivalent steps with per-collection site ID secrets (NETLIFY_SITE_ID_DOCS).

GitHub Pages is unchanged — it doesn't support multi-project deploys.

Always Install Latest seite in CI

Generated workflows no longer pin VERSION=x.y.z in the install command. Instead they use:

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

The install script resolves the latest release via version.txt. This means your CI always uses the current seite version without needing to manually update the workflow or run seite upgrade.

If you need to pin a specific version, you can still set VERSION=0.12.0 manually in your workflow.

Upgrade Path

Run seite upgrade to apply both changes to existing projects:

  1. Version unpinning — removes VERSION= from your deploy workflow and netlify.toml
  2. Subdomain steps — adds missing deploy steps for collections with deploy_project

Both are non-destructive: the upgrade regenerates the workflow from your current seite.toml configuration.

v0.11.0

AVIF Image Processing Fix

seite no longer attempts to decode .avif files in the image processing pipeline. The image crate's avif feature only enables AVIF encoding (generating AVIF variants from PNG/JPG/WebP sources), not decoding. Previously, .avif files in static/ would trigger a The image format Avif is not supported warning on every build.

AVIF files are still copied to dist/ and served correctly — they just skip the resize/optimize step. Since AVIF is already heavily compressed, re-processing provides no benefit.

Translatable Callout Shortcode Labels

The built-in callout shortcode now supports i18n. Previously, callout titles (Info, Tip, Warning, Danger) were hardcoded in English regardless of the site language.

Shortcode templates now receive the {{ t }} translation object, matching the convention used by page templates. Callout labels use these new UI string keys:

  • callout_info (default: "Info")
  • callout_tip (default: "Tip")
  • callout_warning (default: "Warning")
  • callout_danger (default: "Danger")

Override them in data/i18n/{lang}.yaml:

# data/i18n/de.yaml
callout_info: "Hinweis"
callout_tip: "Tipp"
callout_warning: "Warnung"
callout_danger: "Gefahr"

You can also pass a title argument to any callout for a one-off override:

{{% callout(type="tip", title="Pro-Tipp") %}}
Custom title regardless of language.
{{% end %}}

User-defined shortcode templates can now use {{ t.any_key }} to access translated UI strings.

v0.10.1

Plausible New Snippet Format

Plausible replaced extension-based script URLs with unique per-site snippet URLs in October 2025. seite now fully supports the new format when script_url is set:

  • Uses async instead of defer (matching Plausible's new snippet)
  • Drops data-domain attribute (domain is encoded in the unique URL)
  • Injects the plausible.init() bootstrapper for custom event support (tagged events, outbound links, etc.)
  • Works with both direct injection and cookie consent banner modes

New recommended config:

[analytics]
provider = "plausible"
id = "example.com"
script_url = "https://plausible.io/js/pa-XXXXXXXXXX.js"

The legacy extensions approach continues to work for existing setups. The id field is still required as a site identifier even when using script_url.

The seite.sh website has been migrated to the new snippet format.

v0.9.0

Developer experience overhaul — every interaction with seite now feels more polished and informative.

Build Progress Feedback

The build pipeline now shows animated spinners for each of its 15+ steps, with per-step timing. No more staring at a blank terminal during long builds.

Vite-Style Dev Server

seite serve now displays the URL prominently with network address, matching the visual style of Vite and Astro:

  seite v0.9.0

  ➜  Local:   http://localhost:3000/
  ➜  Network: http://192.168.1.5:3000/

Shell Completions

New seite completions <shell> command generates tab-completion scripts for Bash, Zsh, Fish, PowerShell, and Elvish.

Welcome Screen

Running seite with no arguments now shows a friendly welcome with context-aware commands instead of raw help text.

Smart Error Hints

  • "Did you mean?" suggestions for misspelled collection names, theme names, and other identifiers (powered by strsim)
  • Config file not found now suggests seite init instead of a bare error
  • seite new now tells you the dev server will auto-reload

Other Improvements

  • --host flag on serve: seite serve --host 0.0.0.0 binds to all interfaces for network access (default: 127.0.0.1); handles hostnames like localhost without panicking
  • --open flag on serve: seite serve --open launches your browser automatically
  • Init file tree: seite init now shows the project structure after scaffolding
  • Stable build output: Collection counts in build summary are now sorted alphabetically (no more random order)
  • Theme gallery link: seite theme list now links to the theme gallery for visual previews; column alignment works correctly with ANSI color output
  • Network URL: only shown when the server is bound to all interfaces, not on loopback
  • Completions: output is clean for shell redirection (seite completions bash > file.sh)

v0.8.2

Heading HTML Injection (Security Fix)

Markdown headings containing HTML special characters (e.g., <, >, &) were rendered without escaping, allowing raw HTML injection into the page. A heading like ## Use <script> tags would inject a literal <script> element into the output.

Heading text is now HTML-escaped before being written into <h> tags, matching the behavior of all other inline content.

Multilingual site.language Incorrect for Non-Default Languages

SiteContext::for_lang() always set site.language to the default language from seite.toml instead of the language actually being rendered. This meant <html lang="..."> and any template logic using {{ site.language }} would show the wrong language code on translated pages.

site.language now correctly reflects the page's language for every render pass.

Plausible Deprecation Warning Printed Once Per HTML File

The Plausible extensions deprecation notice was emitted inside the per-file analytics injection loop, which runs in parallel via Rayon. On a site with 200 pages, the warning printed 200 times. The warning is now emitted once before the post-processing loop.

Image src Attribute Extraction Matched Partial Names

The extract_attr helper used during image post-processing matched attribute names by substring. Searching for src would match data-src if it appeared earlier in the tag, causing the wrong URL to be used for srcset generation and <picture> element construction.

Attribute matching now requires a whitespace boundary before the attribute name, so data-src no longer shadows src.

v0.8.1

PageSpeed Insights URL Encoding

seite perf now percent-encodes the target URL before passing it to the PageSpeed Insights API. Previously, URLs containing special characters (spaces, ampersands, query strings) would silently produce a malformed API request and return no results.

Atom Feed Author Compliance

Atom feeds (atom.xml) now always include a feed-level <author> element, satisfying RFC 4287 §4.1.1. Previously, if author was not set in seite.toml, the element was omitted — leaving entries without an author and producing a spec-invalid feed. The feed now falls back to the site title when no author is configured.

Set an explicit author in seite.toml to control the value:

[site]
author = "Your Name"

Tag archive links in the default post.html and posts-index.html templates were incorrectly hardcoded to /blog/tags/{tag}. Tag archive pages are always generated at /tags/{tag} regardless of the collection's url_prefix. The templates now use the correct path, so tag links work for any url_prefix setting.

CLAUDE.md Pagination Example

The CLAUDE.md scaffold generated by seite init and seite upgrade contained two hardcoded /posts/ examples in the Key Conventions section — one for clean URL format and one for pagination. These have been replaced with generic placeholders that won't contradict the actual url_prefix configured for a site. Existing CLAUDE.md files are not affected; run seite upgrade to get the updated scaffold.

v0.8.0

Atom 1.0 Feeds

Every collection with has_rss = true now generates both feed.xml (RSS 2.0) and atom.xml (Atom 1.0). Atom feeds include all required elements per RFC 4287: <updated>, <id>, <author>, and <link rel="self">.

  • Per-collection and per-language feeds are generated automatically
  • All 10 bundled themes include <link rel="alternate" type="application/atom+xml"> autodiscovery
  • No configuration changes needed — if you have RSS, you now have Atom too

Redirect Aliases via Frontmatter

Add aliases to any page's frontmatter to create redirects from old URLs:

---
title: My Post
aliases:
  - /old-url
  - /legacy/path
---

During build, seite generates:

  • A lightweight HTML redirect file at each alias path with <meta http-equiv="refresh"> and <link rel="canonical">
  • A _redirects file with 301 status codes for Netlify and Cloudflare Pages compatibility

Security: alias paths are validated against path traversal and HTML-escaped in redirect output.

Upgrade Path

  • seite upgrade documents the new features in CLAUDE.md for existing projects
  • Custom templates/base.html users get a hint to add Atom autodiscovery (bundled themes are updated automatically)

v0.7.0

seite perf — PageSpeed Insights Audit

  • New seite perf [URL] command hits the PageSpeed Insights API and reports Performance score + FCP, LCP, TBT, CLS, and Speed Index — color-coded green/yellow/red
  • Defaults to base_url from seite.toml if no URL is provided
  • --strategy desktop flag for desktop audits (default: mobile)
  • --key flag for a PSI API key (increases rate limit)
  • Production deploys (seite deploy) now automatically run a PageSpeed audit on the live URL after deployment

CSS/JS Minification On by Default

  • seite init now scaffolds minify = true in [build] for new sites
  • seite upgrade adds minify = true to existing sites that don't have it set (non-destructive — skips if already configured either way)

Plausible Analytics Deprecation Warning

  • Warns at build time when extensions is set without script_url — Plausible deprecated the filename-based extension approach in October 2025
  • Use script_url with your unique snippet URL from Plausible → Settings → Installation

v0.6.0

Previous / Next Article Navigation

  • Post pages now include prev_post and next_post template variables linking to adjacent articles in the same collection
  • Adjacent posts are computed per language, so multilingual sites link within the same language
  • Date-based collections link chronologically (newer/older); weight-based collections follow sort order
  • Default post.html template renders a minimal prev/next nav section
  • Custom templates can use prev_post.title, prev_post.url, prev_post.date, and prev_post.description (same fields on next_post)
  • New i18n keys t.prev_post and t.next_post for translatable labels

v0.5.0

Context Rules (.claude/rules/)

  • seite init now generates a lean CLAUDE.md (~160 lines) plus path-scoped .claude/rules/*.md files that Claude loads automatically when working with matching files
  • 8 always-present rules: SEO requirements, templates, i18n, data files, shortcodes, config reference, features, design prompts
  • 2 conditional rules: contact form (when [contact] configured), trust center (when trust collection present)
  • Rules use YAML frontmatter with paths: for automatic scoping (e.g., templates.md only loads when editing templates/**)
  • Follows Anthropic's recommendation of keeping CLAUDE.md under 200 lines for better instruction adherence

Upgrade

  • seite upgrade creates .claude/rules/ files for existing projects (non-destructive — existing CLAUDE.md is not modified)
  • Post-upgrade hint suggests trimming CLAUDE.md if it's large, since detailed content now lives in rules files

v0.4.5

Bug Fix: File Watcher Rebuild Loop on Linux

  • Fixed an infinite rebuild loop in seite serve on Ubuntu and other Linux systems with strictatime or relatime mount options
  • The file watcher now ignores metadata-only events (atime updates, IN_ATTRIB) that are triggered when the build reads files from watched directories
  • After each build completes, accumulated file events are drained to prevent stale events from immediately triggering another rebuild
  • Fix applies to both standalone server and workspace server

v0.10.0

Incremental Builds

The dev server (seite serve) now uses incremental builds. A build cache (.seite/build-cache.json) tracks file modification times and content hashes across builds. When the file watcher triggers a rebuild:

  • Nothing changed → build is skipped entirely (no wasted CPU, instant response)
  • Only content changed → output directory is preserved, only changed pages are re-rendered (indexes, feeds, sitemap still regenerate — they're fast)
  • Template, data, or config changed → full rebuild (correctness requires it)

This means editing a single blog post on a 200-page site no longer rebuilds all 200 pages.

How It Works

  • BuildCache stores per-file mtimes and FNV-1a content hashes in .seite/build-cache.json
  • On each rebuild, the cache diffs current file state against the stored snapshot
  • Changed content items are re-processed through markdown rendering and template expansion
  • Unchanged items keep their existing HTML in dist/
  • The cache is updated after every successful build

What Triggers What

ChangeEffect
Content file editedRebuild that page only
Content file addedBuild the new page
Content file deletedRemove from indexes
Template changedFull rebuild
Data file changedFull rebuild
seite.toml changedFull rebuild
Static file changedRe-copy that file

Build Output

The build stats now show whether a build was incremental:

Incremental build 42 posts, 12 docs in 0.3s (5 static files copied, 51 items unchanged)

Notes

  • seite build (production) always does a full clean build — incremental is dev-server only
  • Add .seite/ to .gitignore if not already present (the cache is machine-local)
  • The cache uses FNV-1a hashing for speed — it's a build cache, not a security mechanism

v0.4.4

Bug Fix: Upgrade Version Stamping

  • Fixed seite upgrade not updating the version in .seite/config.json when no file-level actions were needed
  • Previously, if all upgrade step checks found nothing to create/merge/append (e.g., upgrading from 0.4.0 to 0.4.3 with no new upgrade steps), the version would remain at the old value even though the upgrade reported success
  • Now the version is always stamped to the current binary version, even when there are no file changes to apply
  • Fixed "page" references in upgrade success messages to say "seite"

v0.4.3

Collection Index Pages

  • Added support for content/{collection}/index.md: any collection can now have a custom index page that injects content into the collection's index template as {{ page.content }}
  • Works identically to how content/pages/index.md provides homepage content, but for any collection
  • The index.md is extracted from the collection listing so it doesn't appear as a regular item
  • For paginated collections, the index.md content appears on page 1

Docs Index Template

  • New default docs-index.html template: docs collections now get a dedicated index page with sidebar navigation, matching individual doc pages
  • When content/docs/index.md exists, it renders as the landing page with full sidebar
  • When no index.md exists, auto-generates a section overview grouped by subdirectory
  • Sidebar nav ({{ nav }}) is now passed to all collection index templates (both paginated and non-paginated), not just individual pages

Redirect Support

  • Collection index pages now support extra.redirect_to in frontmatter: set a URL to redirect /docs/ to a specific doc page (e.g., /docs/getting-started)
  • Works for both regular collection indexes and subdomain roots
  • Generates an instant HTML redirect (meta refresh + JavaScript)

Subdomain Root Pages

  • Subdomain collections now support root pages via content/{collection}/index.md: e.g., content/docs/index.md renders at docs.example.com/
  • Subdomain roots also support redirect_to for routing to a specific page

v0.4.2

Configuration

  • Added subdomain_base_url field on collections: explicit URL override for subdomain deploys (e.g., subdomain_base_url = "https://docs.example.com" avoids the www prefix issue when base_url is https://www.example.com)

Developer Experience

  • Dev server preview hints now show the resolved subdomain URL (including explicit overrides)
  • Validation rejects subdomain_base_url without subdomain and non-HTTP URLs

v0.4.1

AI Integration

  • MCP seite://content now includes subdomain, subdomain_url, and deploy_project fields per collection
  • MCP seite_build response includes subdomain_builds array with collection name, subdomain, base URL, and output directory

Developer Experience

  • seite init scaffolded CLAUDE.md now documents subdomain collections (base URL, preview path, deploy project) and includes dist-subdomains/ in project structure
  • seite upgrade adds Subdomain Deploys section to CLAUDE.md and dist-subdomains/ to .gitignore for existing projects upgrading to 0.4.x
  • Config reference scaffold documents subdomain and deploy_project collection fields
  • Features scaffold lists subdomain deploys

v0.4.0

Build Pipeline

  • Per-collection subdomain support: set subdomain = "docs" on a collection to build it into dist-subdomains/docs/ with its own sitemap, RSS, robots.txt, llms.txt, and search index
  • Cross-subdomain link rewriting: internal links targeting subdomain collections are automatically rewritten to absolute URLs (e.g., /docs/setup becomes https://docs.example.com/setup)
  • Reverse link rewriting for subdomain sites: links from subdomain content back to main-site collections resolve to absolute main-site URLs

Deploy

  • Subdomain collections deploy independently to their own Cloudflare Pages or Netlify projects via per-collection deploy_project config
  • seite deploy --setup auto-creates Cloudflare/Netlify projects for subdomain collections ({main-project}-{subdomain} naming) and writes deploy_project back to seite.toml
  • Dry-run output now shows subdomain deploy plan alongside main site
  • GitHub Pages warning when subdomain collections are configured (subdomains not supported on GH Pages)
  • Workspace deploy detects cross-site domain conflicts (e.g., subdomain overlapping another site's base_url)

Developer Experience

  • Dev server previews subdomain content at /{name}-preview/ paths
  • .gitignore now includes dist-subdomains/ for new projects
  • Config validation rejects duplicate subdomain values across collections

v0.3.3

Further build pipeline optimizations: eliminate redundant file walks and per-page allocations.

  • Link checking folded into post-process pass: internal link validation now runs during the existing HTML post-processing walk instead of a separate file read pass
  • Cached i18n context per language: the 37-key UI strings JSON object is now built once per language instead of reconstructed on every page render
  • Hoisted shortcode site context: the identical sc_site JSON is pre-computed once instead of rebuilt per page during content processing
  • Removed redundant string clone: expanded_body.clone() eliminated when math rendering is disabled

1k pages cold build: ~357ms → ~275ms on Apple M4 Pro (cumulative from v0.3.1: ~443ms → ~275ms, 38% faster).

v0.3.2

Parallelize the build pipeline with rayon and consolidate HTML post-processing for faster builds.

  • Rayon parallelism across content processing (5x faster), image processing (3x faster), page rendering, markdown output, and HTML post-processing
  • Single-pass HTML post-processing: image srcset rewriting, code copy button injection, base path URL rewriting, and analytics injection now run in one read-transform-write pass instead of four separate file walks
  • New bench/profile.sh for flamegraph profiling with samply
  • Enhanced bench/run.sh with per-step timing capture and --with-images flag

1k pages cold build: ~443ms → ~357ms on Apple M4 Pro.

v0.3.1

Fix Windows build by switching KaTeX from quick-js to duktape backend. The quick-js JavaScript engine does not support Windows targets, causing release builds to fail.

v0.3.0

4 New Bundled Themes

  • Landing: Light SaaS landing page theme with Fraunces/Outfit fonts. Hero section, feature cards with accent borders, 4-column stats grid, testimonial blocks, asymmetric post grid
  • Terminal: Dark terminal aesthetic with IBM Plex Mono, green accent (#00ff41), scanline effects, blinking cursor, monospace throughout
  • Magazine: Editorial newspaper theme with Playfair Display/Source Serif 4/DM Sans. 3-column article grid, full-width lead article, editorial masthead with diamond dividers
  • Academic: Tufte-inspired scholarly theme with EB Garamond serif. Narrow reading column (60%), small-caps section headings, sidenote-style footnotes, section symbols

2026 Design Refresh for All Themes

Every bundled theme upgraded with:

  • Google Fonts: Each theme gets a distinctive typeface: Outfit (default), Lora (minimal), Sora (dark), IBM Plex Sans/Mono (docs), Archivo + DM Mono (brutalist), Manrope (bento)
  • Homepage content styles: Rich .homepage-content CSS for landing pages with styled headings, stat grids, blockquotes, and feature lists
  • Safe DOM search: Search JavaScript rewritten to use createElement/textContent/appendChild instead of innerHTML

Math/LaTeX Rendering

  • New math = true option in [build] config enables server-side KaTeX rendering
  • $inline$ and $$display$$ math delimiters are rendered to HTML during the markdown pipeline
  • KaTeX CSS automatically loaded from CDN when math is enabled
  • Code blocks and inline code spans are correctly skipped
  • All 6 bundled themes include conditional KaTeX CSS and .katex-display overflow handling
  • Available when built with the math feature flag (enabled by default)

AVIF Image Format

  • New avif = true option in [images] config enables AVIF variant generation
  • Configurable AVIF quality via avif_quality (default: 70, since AVIF compresses better than WebP)
  • AVIF source inputs (.avif files) now accepted in the image pipeline
  • <picture> elements emit <source type="image/avif"> before WebP for optimal compression
  • Uses the image crate's ravif backend for pure-Rust AVIF encoding

SEO/GEO Improvements

  • Skip loading="lazy" on first image per page to preserve LCP performance
  • Improved AI crawler management in robots.txt: allow search crawlers, block training crawlers

Fixes

  • Fixed test_self_update_check integration test that failed without network access: now uses --target-version to avoid network dependency in CI

v0.2.4

Brand Identity Builder Skill

  • New /brand-identity skill scaffolded for every site on seite init and seite upgrade
  • 5-phase guided workflow: brand discovery, color palette design, SVG logo creation, favicon generation, and optional theme integration
  • Color palette saved to data/brand.yaml: available in templates as {{ data.brand.colors.primary }}
  • Output files: static/logo.svg, public/favicon.svg, public/favicon.ico (optional), data/brand.yaml
  • Skill versioning via # seite-skill-version: 1 for automatic updates on future releases

v0.2.3

Plausible Analytics Extensions

  • New extensions field in [analytics] config for Plausible script extensions: enables tagged-events, outbound-links, file-downloads, and other Plausible extensions
  • Extensions are appended to the script filename automatically (e.g., script.tagged-events.outbound-links.js)
  • When script_url is set, extensions are ignored: full control stays with the user
  • Works with both direct injection and cookie consent banner modes

seite.sh Conversion Tracking

  • Enabled tagged-events, outbound-links, and file-downloads extensions on seite.sh
  • Added conversion events to homepage CTAs: GetStarted, ViewGitHub, CopyInstall, CopyQuickstart, GetStartedCTA, ViewGitHubCTA

Image Processing

  • PNG encoding now uses CompressionType::Best with adaptive filtering instead of the default fast compression: resized PNGs are significantly smaller without any loss in quality
  • Previously, the image crate's default CompressionType::Fast produced poorly compressed PNGs, often larger than well-optimized source files

v0.2.2

Image Processing

  • JPEG encoding now respects the quality setting in [images] config (previously used default quality)
  • WebP encoding switched from lossless-only (image crate) to lossy via libwebp (webp crate), producing significantly smaller files at the configured quality level
  • PNG encoding unchanged (lossless by nature, quality setting does not apply)

v0.2.1

Build Pipeline

  • Added public/ directory support: files in public/ are copied to the output root (dist/) before generation, enabling favicon.ico, .well-known/, _redirects, and other root-level files without the /static/ prefix
  • Conflict warnings when a public/ file would be overwritten by a generated file (e.g., robots.txt, sitemap.xml)
  • New public_dir config option in [build] section (defaults to "public")
  • Dev server and workspace server now watch the public/ directory for changes

Themes

  • Added <link rel="icon" href="/favicon.ico"> to all 6 bundled themes
  • Added title="Markdown" attribute to the markdown alternate link in all themes
  • Fixed og:image and twitter:image URLs: relative image paths are now absolutized with base_url during build so social previews work correctly

Developer Experience

  • seite init now creates a public/ directory alongside static/ and data/
  • seite upgrade creates public/ for existing projects upgrading to v0.2.1
  • Link checker skips /favicon.ico since it's theme-injected and the file is optional

v0.1.0

Initial public release.

Build Pipeline

  • 13-step build pipeline producing HTML, markdown, RSS, sitemap, search index, and LLM discovery files
  • Image processing: auto-resize to configured widths, WebP conversion, srcset/<picture> injection, loading="lazy"
  • Asset pipeline with CSS/JS minification (build.minify) and fingerprinted filenames (build.fingerprint)
  • Pagination with configurable items per page, generates /posts/, /posts/page/2/, etc.
  • Tag pages: auto-generated /tags/ index and /tags/{tag}/ archives
  • Table of contents auto-generated from heading hierarchy with anchor IDs
  • Excerpts via <!-- more --> marker or auto-extracted from first paragraph
  • Reading time (238 WPM) and word count on every page
  • Internal link validation at build time
  • 404 page auto-generated from 404.html template

Content

  • 6 collection presets: posts, docs, pages, changelog, roadmap, trust center
  • 5 built-in shortcodes: youtube, vimeo, gist, callout, figure: plus user-defined shortcodes from templates/shortcodes/
  • Data files (YAML/JSON/TOML from data/ directory) injected into template context as {{ data.filename }}
  • Multi-language (i18n) with filename-based translations, per-language URLs, RSS feeds, sitemaps, hreflang tags, and language switcher UI
  • extra: frontmatter field for arbitrary key-value data accessible in templates
  • Draft exclusion with --drafts flag to include during development

Themes

  • 6 bundled themes: default, minimal, dark, docs, brutalist, bento
  • AI-generated custom themes via seite theme create "<description>" (requires Claude Code)
  • Theme install from URL (seite theme install <url>) and export for sharing (seite theme export <name>)
  • All themes include SEO meta tags, Open Graph, Twitter Cards, JSON-LD structured data, accessibility features, and i18n support

AI Integration

  • seite agent spawns Claude Code with full site context: content inventory, frontmatter format, template list, available commands
  • seite agent "prompt" for non-interactive one-shot content generation
  • MCP server (seite mcp) with 5 tools and 6+ resources for AI tool integration, auto-started by Claude Code
  • Every site ships llms.txt, llms-full.txt, and raw markdown alongside HTML
  • seite init generates .claude/CLAUDE.md with comprehensive site context for AI agents

Deploy

  • GitHub Pages, Cloudflare Pages, and Netlify, all built in
  • Guided setup via seite deploy --setup (creates repos/projects, configures auth, generates CI workflows)
  • Pre-flight checks validate output dir, base_url, CLI tools, git state before deploying
  • --dry-run preview, --preview for staging/branch deploys
  • Custom domain management with DNS record display and auto-attachment
  • Post-deploy verification (homepage 200, robots.txt, sitemap.xml, llms.txt reachability)
  • Auto-commit and push before deploy with auto_commit = true

Developer Experience

  • Interactive dev server with REPL (new, agent, theme, build, status, stop) and live reload
  • Analytics support: Google Analytics, GTM, Plausible, Fathom, Umami, with optional cookie consent banner
  • Multi-site workspaces (seite-workspace.toml) with unified dev server and per-site deploy
  • Collection management: seite collection add <preset> and seite collection list
  • Project metadata and upgrades: .seite/config.json tracks version, seite upgrade applies version-gated changes
  • Self-update from GitHub Releases with SHA256 checksum verification
  • Shell installer for macOS/Linux (curl | sh), PowerShell installer for Windows