Multi-Site Workspaces

Manage multiple seite static sites in a single repository with shared resources, a unified dev server, and coordinated multi-target deploys.

seite's workspace system lets you manage multiple static site generator projects from a single repository with shared builds, a unified dev server, and coordinated deploys.

Overview

A workspace lets you manage multiple seite sites from a single directory. Each site has its own seite.toml, content, and templates, but they share a root and can share data, static files, and templates.

Use cases:

  • Company site + blog + docs as separate sites in one repo
  • Multi-brand sites that share templates or data
  • Monorepo with a marketing site and product documentation

Quick Start

# Initialize a workspace
seite workspace init my-workspace

# Add sites
seite workspace add blog --collections posts,pages --title "Blog"
seite workspace add docs --collections docs --title "Documentation"

# Build all sites
seite build

# Serve all sites with unified dev server
seite serve

# Build/serve a specific site
seite build --site blog
seite serve --site docs

Creating a Workspace

seite workspace init [name]

This creates:

my-workspace/
├── seite-workspace.toml   # Workspace configuration
├── sites/                # Default directory for sites
├── data/                 # Shared data files
├── static/               # Shared static assets
└── templates/            # Shared templates

If you omit the name, an interactive prompt asks for it.

Adding Sites

seite workspace add <name> [options]
FlagDescription
--pathDirectory for the site (default: sites/<name>)
--titleSite title
--collectionsComma-separated collections (default: posts,pages)

This creates a full site scaffold inside the workspace and registers it in seite-workspace.toml:

seite workspace add blog --collections posts,pages --title "My Blog"
seite workspace add docs --collections docs --title "Documentation" --path sites/documentation

Configuration

The workspace is configured through seite-workspace.toml at the workspace root:

[workspace]
name = "my-workspace"

# Shared resources available to all sites (optional)
# shared_data = "data"
# shared_static = "static"
# shared_templates = "templates"

[[sites]]
name = "blog"
path = "sites/blog"
# base_url = "https://blog.example.com"   # Override site's base_url
# output_dir = "dist/blog"                # Override output location

[[sites]]
name = "docs"
path = "sites/docs"

# Cross-site features (optional)
# [cross_site]
# unified_sitemap = true
# cross_site_links = true
# unified_search = false

Workspace Fields

FieldTypeDescription
workspace.namestringWorkspace name
workspace.shared_datastringPath to shared data directory
workspace.shared_staticstringPath to shared static assets
workspace.shared_templatesstringPath to shared templates

Site Fields

FieldTypeDescription
namestringSite identifier (used in --site flag and URL routing)
pathstringPath to the site directory (relative to workspace root)
base_urlstringOverride the site's base_url from its seite.toml
output_dirstringOverride output directory (relative to workspace root)

Each site must have its own seite.toml inside its directory.

The --site Flag

When inside a workspace, build, serve, and deploy operate on all sites by default; check and upgrade do too when run from the workspace root (inside a site's directory they cover just that site). Use the global --site flag to target a specific site:

seite build --site blog       # Build only the blog
seite deploy --site docs      # Deploy only the docs
seite serve --site blog       # Serve only the blog

The --site flag is available on all commands when a seite-workspace.toml is detected.

Building

seite build                   # Build all sites
seite build --site blog       # Build one site
seite build --strict          # Treat broken links as errors (per-site)

Each site is built independently with its own config and templates. Build output shows per-site progress:

[1/2] Building site 'blog'
✓ 12 posts, 3 pages (0.45s)
[2/2] Building site 'docs'
✓ 8 docs (0.32s)
── Workspace build complete ──
✓ blog: 12 posts, 3 pages | docs: 8 docs

Internal link validation runs per-site after each build.

Development Server

seite serve                   # Serve all sites
seite serve --site blog       # Serve one site

The workspace dev server routes requests by site name:

  • http://localhost:3000/: workspace index listing all sites
  • http://localhost:3000/blog/: blog site
  • http://localhost:3000/docs/: docs site

File watching is per-site: when you edit a blog post, only the blog rebuilds. Live reload works across all sites.

Deploying

seite deploy                  # Deploy all sites
seite deploy --site blog      # Deploy one site
seite deploy --dry-run        # Preview all deploys

Each site deploys according to its own seite.toml deploy config. Sites can use different deploy targets: one on GitHub Pages, another on Cloudflare.

Tip

Use seite deploy --site blog --dry-run to preview a single site's deploy before pushing to production.

Upgrading

seite upgrade                 # Upgrade every site (one confirmation)
seite upgrade --site blog     # Upgrade one site
seite upgrade --check         # CI: exit 1 if any site needs upgrading

After installing a new seite binary, run seite upgrade from the workspace root to bring every site's agent files and config up to date. Changes are listed per site before anything is written. Running it inside a site's directory upgrades only that site.

Checking Status

seite workspace list          # List all sites with config status
seite workspace status        # Detailed workspace status (config, build state, titles)

Workspace Detection

seite automatically detects workspaces by walking up the directory tree looking for seite-workspace.toml. This means you can run commands from anywhere inside the workspace:

cd my-workspace/sites/blog
seite build                   # Detects workspace, builds all sites
seite build --site blog       # Builds just the blog

If no seite-workspace.toml is found, seite operates in standalone mode using the local seite.toml.

Next Steps

  • Configuration: site-level seite.toml settings that each workspace site uses
  • Deployment: deploy targets and options for each site
  • CLI Reference: complete list of commands and flags