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:
- Version unpinning — removes
VERSION=from your deploy workflow and netlify.toml - 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
asyncinstead ofdefer(matching Plausible's new snippet) - Drops
data-domainattribute (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 foundnow suggestsseite initinstead of a bare errorseite newnow tells you the dev server will auto-reload
Other Improvements
--hostflag on serve:seite serve --host 0.0.0.0binds to all interfaces for network access (default:127.0.0.1); handles hostnames likelocalhostwithout panicking--openflag on serve:seite serve --openlaunches your browser automatically- Init file tree:
seite initnow 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 listnow 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 Link URL Prefix
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
_redirectsfile 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 upgradedocuments the new features in CLAUDE.md for existing projects- Custom
templates/base.htmlusers 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_urlfromseite.tomlif no URL is provided --strategy desktopflag for desktop audits (default: mobile)--keyflag 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 initnow scaffoldsminify = truein[build]for new sitesseite upgradeaddsminify = trueto 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
extensionsis set withoutscript_url— Plausible deprecated the filename-based extension approach in October 2025 - Use
script_urlwith your unique snippet URL from Plausible → Settings → Installation
v0.6.0
Previous / Next Article Navigation
- Post pages now include
prev_postandnext_posttemplate 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.htmltemplate renders a minimal prev/next nav section - Custom templates can use
prev_post.title,prev_post.url,prev_post.date, andprev_post.description(same fields onnext_post) - New i18n keys
t.prev_postandt.next_postfor translatable labels
v0.5.0
Context Rules (.claude/rules/)
seite initnow generates a lean CLAUDE.md (~160 lines) plus path-scoped.claude/rules/*.mdfiles 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.mdonly loads when editingtemplates/**) - Follows Anthropic's recommendation of keeping CLAUDE.md under 200 lines for better instruction adherence
Upgrade
seite upgradecreates.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 serveon 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
BuildCachestores 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
| Change | Effect |
|---|---|
| Content file edited | Rebuild that page only |
| Content file added | Build the new page |
| Content file deleted | Remove from indexes |
| Template changed | Full rebuild |
| Data file changed | Full rebuild |
seite.toml changed | Full rebuild |
| Static file changed | Re-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.gitignoreif 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 upgradenot updating the version in.seite/config.jsonwhen 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.mdprovides homepage content, but for any collection - The
index.mdis extracted from the collection listing so it doesn't appear as a regular item - For paginated collections, the
index.mdcontent appears on page 1
Docs Index Template
- New default
docs-index.htmltemplate: docs collections now get a dedicated index page with sidebar navigation, matching individual doc pages - When
content/docs/index.mdexists, it renders as the landing page with full sidebar - When no
index.mdexists, 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_toin 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.mdrenders atdocs.example.com/ - Subdomain roots also support
redirect_tofor routing to a specific page
v0.4.2
Configuration
- Added
subdomain_base_urlfield on collections: explicit URL override for subdomain deploys (e.g.,subdomain_base_url = "https://docs.example.com"avoids thewwwprefix issue whenbase_urlishttps://www.example.com)
Developer Experience
- Dev server preview hints now show the resolved subdomain URL (including explicit overrides)
- Validation rejects
subdomain_base_urlwithoutsubdomainand non-HTTP URLs
v0.4.1
AI Integration
- MCP
seite://contentnow includessubdomain,subdomain_url, anddeploy_projectfields per collection - MCP
seite_buildresponse includessubdomain_buildsarray with collection name, subdomain, base URL, and output directory
Developer Experience
seite initscaffolded CLAUDE.md now documents subdomain collections (base URL, preview path, deploy project) and includesdist-subdomains/in project structureseite upgradeadds Subdomain Deploys section to CLAUDE.md anddist-subdomains/to .gitignore for existing projects upgrading to 0.4.x- Config reference scaffold documents
subdomainanddeploy_projectcollection fields - Features scaffold lists subdomain deploys
v0.4.0
Build Pipeline
- Per-collection subdomain support: set
subdomain = "docs"on a collection to build it intodist-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/setupbecomeshttps://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_projectconfig seite deploy --setupauto-creates Cloudflare/Netlify projects for subdomain collections ({main-project}-{subdomain}naming) and writesdeploy_projectback 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 .gitignorenow includesdist-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_siteJSON 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.shfor flamegraph profiling with samply - Enhanced
bench/run.shwith per-step timing capture and--with-imagesflag
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-contentCSS for landing pages with styled headings, stat grids, blockquotes, and feature lists - Safe DOM search: Search JavaScript rewritten to use
createElement/textContent/appendChildinstead ofinnerHTML
Math/LaTeX Rendering
- New
math = trueoption 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-displayoverflow handling - Available when built with the
mathfeature flag (enabled by default)
AVIF Image Format
- New
avif = trueoption in[images]config enables AVIF variant generation - Configurable AVIF quality via
avif_quality(default: 70, since AVIF compresses better than WebP) - AVIF source inputs (
.aviffiles) now accepted in the image pipeline <picture>elements emit<source type="image/avif">before WebP for optimal compression- Uses the
imagecrate'sravifbackend 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_checkintegration test that failed without network access: now uses--target-versionto avoid network dependency in CI
v0.2.4
Brand Identity Builder Skill
- New
/brand-identityskill scaffolded for every site onseite initandseite 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: 1for automatic updates on future releases
v0.2.3
Plausible Analytics Extensions
- New
extensionsfield in[analytics]config for Plausible script extensions: enablestagged-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_urlis 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, andfile-downloadsextensions on seite.sh - Added conversion events to homepage CTAs:
GetStarted,ViewGitHub,CopyInstall,CopyQuickstart,GetStartedCTA,ViewGitHubCTA
Image Processing
- PNG encoding now uses
CompressionType::Bestwith adaptive filtering instead of the default fast compression: resized PNGs are significantly smaller without any loss in quality - Previously, the
imagecrate's defaultCompressionType::Fastproduced poorly compressed PNGs, often larger than well-optimized source files
v0.2.2
Image Processing
- JPEG encoding now respects the
qualitysetting in[images]config (previously used default quality) - WebP encoding switched from lossless-only (
imagecrate) to lossy vialibwebp(webpcrate), 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 inpublic/are copied to the output root (dist/) before generation, enablingfavicon.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_dirconfig 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:imageandtwitter:imageURLs: relative image paths are now absolutized withbase_urlduring build so social previews work correctly
Developer Experience
seite initnow creates apublic/directory alongsidestatic/anddata/seite upgradecreatespublic/for existing projects upgrading to v0.2.1- Link checker skips
/favicon.icosince 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.htmltemplate
Content
- 6 collection presets: posts, docs, pages, changelog, roadmap, trust center
- 5 built-in shortcodes:
youtube,vimeo,gist,callout,figure: plus user-defined shortcodes fromtemplates/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
--draftsflag 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 agentspawns Claude Code with full site context: content inventory, frontmatter format, template list, available commandsseite 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 initgenerates.claude/CLAUDE.mdwith 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-runpreview,--previewfor 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>andseite collection list - Project metadata and upgrades:
.seite/config.jsontracks version,seite upgradeapplies version-gated changes - Self-update from GitHub Releases with SHA256 checksum verification
- Shell installer for macOS/Linux (
curl | sh), PowerShell installer for Windows