Skip to content
P7CO edited this page Jul 20, 2026 · 7 revisions

Sardine CMS

Sardine CMS is a multilingual, static-first CMS framework: a content and publishing engine that pairs a real editorial workflow (translations, review states, validation gates) with deterministic static builds.

What makes it different

  • EN is the source of truth; PT-PT, ES, FR and DE translations carry explicit states (missing / outdated / complete) derived from content checksums — edit the source and its translations flag themselves outdated automatically.
  • Validation before publish, always: language parity, unique slugs, media references, alt-text coverage, category rules. Errors block publishing.
  • Deterministic builds: same input → byte-identical output, with hashed asset URLs, full multilingual SEO (canonical, hreflang, Open Graph, JSON-LD, sitemap, RSS) and deployment targets for Azure Static Web Apps, nginx and generic hosts.
  • The database is never the source of truth: portable JSON/Markdown export is. SQLite in development; PostgreSQL, MySQL/MariaDB or SQL Server in production — same storage contract.
  • Design-agnostic: themes are packages discovered via entry points; the bundled reference theme is just one example.

Documentation

Page What it covers
Getting Started Install, scaffold, seed, build, preview
CLI Reference Every cms command and option
Configuration The sardine.toml reference
Content Model Articles, pages, sections, media, translation states
Storage Backends SQLite, PostgreSQL, migrations, conformance
Themes Theme packages, template contexts, overrides, islands
Admin Panel Running the admin, accounts, roles, editors
Architecture Layered packages and the ADR index
Deployment Export targets and the demo pipeline
Development and Testing Contributing, gates, test suites

Status

Milestones 0–5 are complete. M6 has shipped explicit extensions, menus, responsive image derivatives, redirects, lossless portable dump/import, a controlled foreign-blog adapter and design-aware autosave/live preview. System hardening is in force: hostile XML and active URLs are rejected, preview/media access is private, uploads are bounded and non-replacing, login defenses are resource-bounded, and CI inputs/deployment secrets are isolated. Reusable-block authoring is the next product implementation. The detailed capability inventory lives in docs/ROADMAP.md.

Clone this wiki locally