Zebric Quickstart (5 minutes)
This quick start gets you up and running with a Zebric web application on your local machine.
Prerequisites
Section titled “Prerequisites”You’ll need Node.js 22 or above. Zebric’s CI and published images use Node.js 24.
Install Zebric
Section titled “Install Zebric”npm install -g @zebric/cliCreate a Blueprint
Section titled “Create a Blueprint”Create a new file named blueprint.toml:
version = "0.6.0"
[project]name = "My Blog"version = "1.0.0"description = "A simple blog"
[project.runtime]min_version = "0.6.0"
[auth]providers = ["email"]trustedOrigins = ["http://localhost:3000"]
# Define a Post entity with three fields[entity.Post]fields = [ { name = "id", type = "ULID", primary_key = true }, { name = "title", type = "Text", required = true }, { name = "body", type = "LongText", required = true }, { name = "published", type = "Boolean", default = false }, { name = "createdAt", type = "DateTime", default = "now" }]seed = [ { title = "Welcome to Zebric", body = "This blog runs from a single TOML blueprint. Edit blueprint.toml and the page reloads.", published = true }, { title = "How seeding works", body = "These sample posts come from the seed array on the Post entity. zebric dev --seed inserts them when the table is empty.", published = true }, { title = "Write your own", body = "Sign up, visit /posts/new, and publish your first post.", published = false }]
[entity.Post.access]read = truecreate = "authenticated"update = "authenticated"delete = "authenticated"
# Home page — list all posts[page."/"]title = "All Posts"auth = "none"layout = "list"
[page."/".query.posts]entity = "Post"orderBy = { createdAt = "desc" }
# Create-post form[page."/posts/new"]title = "New Post"auth = "required"layout = "form"
[page."/posts/new".form]entity = "Post"method = "create"
[[page."/posts/new".form.fields]]name = "title"type = "text"label = "Title"required = true
[[page."/posts/new".form.fields]]name = "body"type = "textarea"label = "Body"rows = 10required = true
[page."/posts/new".form.onSuccess]redirect = "/"message = "Post created!"
# Post detail page[page."/posts/:id"]title = "Post Detail"auth = "none"layout = "detail"
[page."/posts/:id".query.post]entity = "Post"where = { id = "$params.id" }Start the Dev Server
Section titled “Start the Dev Server”zebric dev --blueprint blueprint.toml --seedOpen http://localhost:3000 in your browser. You’ll see:
- A public list page at
/showing all posts, including the three sample posts fromseed - A public detail page at
/posts/:idfor each post - A protected form at
/posts/newfor signed-in users
Visit /posts/new. Zebric redirects you to its built-in sign-in page because
the form has auth = "required". Select Sign up, create an account, then
return to /posts/new and publish your first post. Readers can visit the list
and detail pages without signing in.
What Just Happened?
Section titled “What Just Happened?”Zebric read your TOML blueprint and:
- Created a SQLite database with a
Posttable matching your entity definition - Generated routes for each page (
/,/posts/new,/posts/:id) - Rendered server-side HTML using the layout type you specified (list, form, detail)
- Wired up CRUD operations so the form creates records and the list queries them
- Enabled email/password authentication and server-side sessions through Better Auth
- Kept reading public while requiring authentication for every create, update, or delete operation
No code was generated. The runtime interprets the blueprint directly.
Next Steps
Section titled “Next Steps”- Learn more about authentication and access control
- Add an
authorIdfield and let authors update their own posts - Add workflows to automate status transitions
- Explore the example blueprints for more patterns