The content platform that fits in one file.
Publr is an agentic-first CMS: a complete content platform compiled into a single small binary that runs anywhere, natively on a server or entirely inside your browser, and is as easy for an automated agent to drive as for a person.
- Everything you expect: content types with every field type, records, media, users and roles, a visual editor when you want one.
- One contract: every capability is an operation; the admin, the CLI, the REST API and plugins all use the same ones, with permissions decided once.
- Tiny core, plugins for the rest: workflows, revisions, releases, integrations and other enterprise features are plugins on the same SDK.
- Owned top to bottom: pure Zig, three vendored libraries, one SQLite
file, no npm, no frameworks.
zig buildand you have it. - Runs in the browser: the same binary as WebAssembly, no server at all.
Status: v0.2, pre-release. Nothing is stable yet.
One binary. The installer detects your OS and CPU, downloads the matching
build, verifies its checksum and puts publr on your PATH:
curl -fsSL https://publr.dev/install.sh | sh
If you would rather not pipe a script into your shell, fetch it, check it against the hash published here, and only then run it:
curl -fsSL https://raw.githubusercontent.com/publr-org/publr/v0.2.0/install.sh -o install.sh
echo "<sha256 of install.sh, published with each release> install.sh" | shasum -a 256 -c -
sh install.sh
Or pick a build by hand from the releases page (macOS and Linux, Apple Silicon and x86_64). Every build ships with its SHA-256 next to it, and the installer refuses a mismatch.
publr serve # http://127.0.0.1:8080
publr init --email you@example.com --display_name You # first admin; the password is generated and shown once
publr --help # every command; publr <namespace> <verb> --help for details
The database lives in data/publr.db next to where you run it (--db <path>
to choose another).
Requires Zig 0.16.0.
zig build run -- serve # build and serve natively
zig build run -- serve --browser # the same, running in your browser tab (after: zig build browser)
zig build test # tests
zig build verify # tests + wasm check + formatting + tidy rules + smoke; run before calling anything done
- Philosophy: why Publr is shaped the way it is.
- Architecture: how Publr works, in plain terms.
- Content: types, records, documents, statuses, media.
- Admin: the plain HTML admin at
/admin. - Authentication: accounts, sessions, passwords, setup.
- SDK: the plugin surface: operations, hooks, UI.
- Plugins: compiled-in plugins and runtime (WebAssembly) plugins.
- CLI reference: flags and every command, one page per namespace.
- REST API: the server and the
/api/routes. - Publr in the browser: the same binary as WebAssembly, no server.
- Database schema: every table, column and index, and why.
- Dependencies: the three libraries, and the decision tree for any more.
- Build reference: every build step and rule.