Silo is a small, standards-based headless CMS that runs as one process and lives in one data directory. You define your content collections in JSON Schema — a format your existing tools already understand — and Silo hands you a generated admin UI, a full REST API, and portable plain-JSON data that you can move anywhere. There is no proprietary field language, no query language, and no opaque binary format. What Silo stores, every other tool can already read.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/org-quicko/silo/llms.txt
Use this file to discover all available pages before exploring further.
Features
Collections
Define content types with JSON Schema draft 2020-12, validated in full by Ajv. Every write is checked; reads are never blocked by schema changes.
Generated Admin UI
The admin reads a collection’s schema and draws the form automatically.
x-silo-* keywords control how fields are rendered and protected. The UI is a plain client of the public API — extend, fork, or replace it.REST API
Clean routes under
/api, JSON everywhere, no URL versioning. Standard formats throughout: ULIDs for IDs, RFC 3339 UTC for timestamps, tarballs for archives, and the S3 API for media.Media Library
Upload files to local disk or any S3-compatible bucket — AWS S3, MinIO, Cloudflare R2, DigitalOcean Spaces. Folders, tags, type filters, and safe deletion guarded by reference checks.
Search
Full-text search at three scopes: one collection, one environment, or everything a key can read. Filter with a JSON AST over RFC 9535 JSONPath. All of it lives in the URL.
API Keys
Claims-based authentication with no users and no sessions. A key carries explicit claims; access is deny by default. A key can only mint keys covered by its own claims.
Safe Concurrent Writes
PUT and DELETE on an entry require the revision you expect, as If-Match. A mismatch returns 409, so two admin tabs cannot overwrite each other silently.Per-Environment Variables
Declare a variable name once in a project, value it in each environment, and Silo substitutes each
{{NAME}} on the way out. One entry, different resolved values in staging and prod.Plugins
Drop a directory into
<data dir>/plugins/ and list it in silo.toml. A plugin can add hooks, HTTP routes, admin panels, or custom storage drivers — all through the same public API a key would use.MCP / AI
Point Claude Code, Codex, Cursor, or Claude Desktop at
/api/mcp with an API key. The model gets tools to browse schemas, read, search, create, and update entries — bounded by that key’s claims.Portable Data
One command exports every project, environment, schema, entry, and media file. One command imports it again. Name a project, environment, or collection to move only that slice.
Replaceable Parts
Storage is SQLite, flat files, or your own driver. Media is local disk or any S3-compatible bucket. The architecture is ports and adapters — every moving part sits behind an interface you can replace.
Architecture
Silo is one TypeScript process on Bun, with six runtime dependencies. It needs no database server, no cache, no queue, and no search cluster. SQLite is bundled into the runtime. Media goes to local disk by default. The server hosts its own React admin UI and compiles to a standalone binary that you can place anywhere on yourPATH.
Two Silo processes over a single data directory are explicitly refused. Each instance needs its own directory and its own port. Running multiple instances on one machine is fine — give each a separate
--data path.silo export produces, so an fs-backed instance is a live backup you can copy with cp, replicate with rsync, or inspect in git.
Generated Admin UI
The admin UI is a React application served from inside the binary itself. It reads a collection’s JSON Schema and draws the form automatically — no code required. When a schema construct cannot be represented as a form field, Silo falls back to a raw JSON editor for that part only.x-silo-* keywords in a schema give you additional control over how the admin renders and protects a collection — for example, marking fields as private or declaring which fields are indexed for search.
Portable Data
One command exports every project, environment, schema, entry, and media file into a.tar.gz archive. One command imports it again — into any running Silo instance. You can name a single project, environment, or collection to move only that slice, and choose whether media travels with it.
Get Started
Quickstart
Install Silo, start the server, and make your first API call in under five minutes.
Concepts
Learn how instances, projects, environments, collections, entries, and API keys relate to each other.
Silo is licensed under AGPL-3.0-or-later. Source code and issue tracker live at github.com/org-quicko/silo.