Skip to content
Get Started

Zebric Quickstart (5 minutes)

This quick start gets you up and running with a Zebric web application on your local machine.

You’ll need Node.js 22 or above. Zebric’s CI and published images use Node.js 24.

Terminal window
npm install -g @zebric/cli

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 = true
create = "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 = 10
required = 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" }
Terminal window
zebric dev --blueprint blueprint.toml --seed

Open http://localhost:3000 in your browser. You’ll see:

  • A public list page at / showing all posts, including the three sample posts from seed
  • A public detail page at /posts/:id for each post
  • A protected form at /posts/new for 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.

Zebric read your TOML blueprint and:

  1. Created a SQLite database with a Post table matching your entity definition
  2. Generated routes for each page (/, /posts/new, /posts/:id)
  3. Rendered server-side HTML using the layout type you specified (list, form, detail)
  4. Wired up CRUD operations so the form creates records and the list queries them
  5. Enabled email/password authentication and server-side sessions through Better Auth
  6. Kept reading public while requiring authentication for every create, update, or delete operation

No code was generated. The runtime interprets the blueprint directly.