Build and run enterprise-grade websites and web apps. With AI, by hand, or in code.
A full platform in one small binary: content, users, plugins and a real admin for all of it.
Every plugin sandboxed. Fast, accessible, SEO-ready pages by default. Runs anywhere.
Agents, admin, code · Output · Admin · One contract · Sandboxed plugins · Code · Runs anywhere
|
Bring any agent you like. It can build apps and plugins, model the schema and
manage content: anything you can do, under your permissions. |
Static pages with islands, optimized images, accessible and made for search.
Nothing to configure. Just build. |
|
Your data gets a proper home: content, structure, media, people and roles, made
for the people who run the site every day. |
Every installed plugin runs sealed off, with only the access you grant. Inside one
small binary: no extra server, no vendor cloud. |
Some changes are faster to ask for. Some are faster to click. Some you want to write and review yourself. Publr never decides for you: every part of it is open to every way of working.
| Ask your agent | Use the admin | Write code | CLI and API | |
|---|---|---|---|---|
| Define content types and fields | ✓ | ✓ | ✓ | ✓ |
| Write, edit and translate content | ✓ | ✓ | ✓ | ✓ |
| Publish, review, roll back | ✓ | ✓ | ✓ | ✓ |
| Add a shop, bookings, a newsletter | ✓ | ✓ | ✓ | ✓ |
| Manage people and roles | ✓ | ✓ | ✓ | ✓ |
"Your agent" means whichever one you already use: Claude Code, Codex, Cursor or any other that runs commands. One skill teaches it Publr, and from there it builds apps and plugins, models the schema and manages content, with exactly the permissions you give it. Agents
Build the whole site with a prompt and fix one typo by hand. Design the schema yourself and let the agent fill in a hundred products. Script a change, then check it in the admin. All of it lands in the same place, under the same rules.
Whoever builds it, the agent or you, what comes out is fast, accessible and ready for search engines. Nothing to configure, no checklist to work through.
Your content is not rows in a database you inspect with a separate tool. Publr ships an admin built for the people who live with the site every day.
Every capability in Publr, from creating a record to signing in, is one operation. The admin, the CLI, the REST API, plugins and agents are all thin doors onto the same operations, through one pipeline that checks permissions, validates input, runs in a transaction and records what happened.
So nothing is AI-only and nothing is UI-only. A feature added once is there for every door, documented. An agent can do exactly what its person may do, no more, and there is no back door for anyone. Architecture
Every installed plugin runs in its own WebAssembly sandbox, inside the Publr binary.
| No sandbox | Developer's server | Platform VMs | Wasm functions | Publr | |
|---|---|---|---|---|---|
| Every plugin sandboxed | ✗ | ✓ | ✓ | ✓ | ✓ |
| Failures contained | ✗ | ✓ | ✓ | ✓ | ✓ |
| Open source, self-hosted | ✓ | ✗ | ✗ | ✗ | ✓ |
| No vendor lock-in | ✓ | ✗ | ✗ | ✗ | ✓ |
| No extra server or VM | ✓ | ✗ | ✗ | ✓ | ✓ |
| Extends everything, UI included | ✓ | partly | partly | ✗ | ✓ |
What an agent writes is what you would write: readable code you can review and own.
A content type: a Zig struct, its fields and rules
/// Post
///
/// An article on the blog, with a page of its own.
pub const Post = struct {
/// Title
title: []const u8,
/// Slug
slug: ?[]const u8 = null,
};
pub const Posts = publr.record.define(Post, .{
.name = "blog.post",
.public = true,
.fields = .{
.title = .{ .validation = .{ .min_len = 1, .max_len = 120 } },
.slug = .{ .kind = "slug", .options = .{ .source = "title" } },
},
});
pub const plugin = publr.plugin.define(manifest, .{ .records = &.{Posts} });The doc comments become the labels and help in the admin. The same type can be made in the admin, no code needed. Plugin API
A page: a .publr template, built to a static file
---
import Base from '../../layouts/base.publr';
import LatestPosts from '../../components/latest-posts.publr';
const post = Publr.build.getEntry();
---
<Base title={post.title}>
<article>
<h1>{post.title}</h1>
<LatestPosts heading="More posts" island />
</article>
</Base>content/posts/[slug].publr is one page per published post. Publish a post and only
the pages that read it are rewritten. Apps
A query: GROQ, nested records in one read
*[_type == "product" && slug == $slug][0]{
title,
"variants": *[_type == "variant" && product == ^._id] | order(price.GBP) { title, price }
}
The same query runs in templates, from the CLI and at GET /api/record.query.
Queries
- Many apps, one project. A marketing site, a members area, a product people pay for, its docs: each an app over the same content and plugins. Fix it once, every app gets it.
- Built-in back office. Database, sign-in, users, roles, media, queued jobs, schedules and webhooks. Nothing to wire up, no separate bills. SDK
- Permissions decided once. Every call, from a person, a plugin, a token or an agent, is judged by the same policies. When in doubt, Publr does not allow. Auth
- Updates you can trust. Every update backs the whole site up first, and a failed one rolls back and says why. Updates
| Where | How |
|---|---|
| Your computer | One process, one port, one file of data. |
| Your server | Copy the binary and the site's folder. A $5 VPS is plenty. |
| Publr Cloud | Hosted, with changes made on a branch before they reach the live site. |
| A browser tab | The same binary as WebAssembly, behind a service worker. No server. |
| Any static host | Every app built to plain files. |
Leave whenever you like. Your site is a folder: take it with you.
Publr is Zig from the HTTP server to the templates, the CSS engine and the admin. No npm, no bundler, no framework, no build-time network access. Three libraries (SQLite, stb, libwebp), vendored as-is. When something is slow, wrong or insecure, the fix is in this repository, not on someone else's roadmap.
The core stays small enough to read in an afternoon. Workflows, environments, languages and integrations are plugins on the same SDK any third party uses, so the plugin API stays honest: Publr is its heaviest user. Philosophy · Dependencies
v0.2, early access. Publr is moving fast, and formats may still change between releases. Updates
| Running a site | Building on it | How it works |
|---|---|---|
| Content | Agents | Philosophy |
| Admin | Apps | Architecture |
| Authentication | Plugins | SDK |
| Queries | Plugin API | Database schema |
| CLI | REST API | Publr in the browser |
| Updates | Streaming islands | Build reference |



















