Build and ship better apps

Rastrillo is an uncompromising Go web framework,
designed for the agentic age.

Unlock your full team’s potential: Rapid iteration, blazing full-stack performance, a rich featureset, simple deployments, and compliance-ready security and accessibility.

Database HTTP Server Sessions and Sign-In HTML Templates CSS Design System Progressive JS Background Jobs One Binary

What does better mean?

There are many tradeoffs involved when building software, but some choices are objectively better.

Value

  • More value for money
  • Reducing reliance on big tech
  • Self-hosting as first class

Control

  • Control where data lives
  • Continuous backups
  • Robust deployments anywhere in the world
  • Different versions for different users

Speed

  • Ship faster than ever
  • Iterating on real apps rather than prototypes
  • Massive runtime performance

Quality

  • Uncompromising user experiences
  • More secure by default
  • Accessibility compliance ready from day one

Go faster

The Go programming language is the perfect blend of fast—both compile and runtime—and rich in features

  • The great runtime performance of Go
  • Full HTML pages rendered in milliseconds
  • Delightfully fast build, compile, build dev loops
  • A rich ecosystem of libraries across the full stack, from HTTP requests to HTML and JSON rendering

Built by agents, for agents and humans

Designed to be easy to use, whether assisted or not

actions/
  • index.GET.goGET /
  • posts/[id]/index.GET.goGET /posts/{id}
  • admin/posts/index.GET.goGET /admin/posts
  • admin/posts/[id]/publish.POST.goPOST /admin/posts/{id}/publish
  • admin/posts/[id]/delete.POST.goPOST /admin/posts/{id}/delete
Real files from examples/blog, one per route.
  • Declarative manifestsDescribe a resource in TOML and generate its store, actions and screens.
  • A CLI for common tasksrastrillo new starts an app, rastrillo dev rebuilds as you edit, and rastrillo migration writes schema changes.
  • Filesystem-backed actionsEach route is one file, named for its path and method.
  • Readable GoGenerated code is plain Go, committed and reviewed like your own.

Where we’re going, we don’t need rails

Experience the pure joy of putting a file on a remote host and having a working web app. Rastrillo apps are full stack: database, HTTP server, HTML, CSS, JS all in a single binary that runs anywhere. What’s old is new again.

Let’s de-jank the web, one app at a time

The push toward SPAs was supposed to lead to faster apps and better experiences, but we got the opposite: computers are faster than ever but web apps feel slower. Rastrillo apps encourage instant page loads, server-rendered HTML, with uncompromising client-side experiences with progressively-enhanced JS.

Single-page app
Rastrillo

A design system for everyone

The Rastrillo design system is a robust design system using elegant, semantic markup to create usable baseline styles for your apps.

Preview theme
<header rst-page-header>
  <div rst-page-header-titles>
    <h1>Requests</h1>
    <p rst-page-header-sub>Newest first.</p>
  </div>
  <a rst-btn="primary" href="/requests/new">New request</a>
</header>
<nav rst-seg-tabs aria-label="Requests">
  <a href="/requests" aria-current="page">All</a>
  <a href="/requests?open">Open</a>
  <a href="/requests?resolved">Resolved</a>
</nav>
<div rst-card style="--rst-cols: 1fr auto">
  <div rst-lrow>
    <a class="rst-nm" href="/requests/4471">Invoice never arrived</a>
    <span rst-status rst-tone="warning">Waiting</span>
  </div>
  <div rst-lrow>
    <a class="rst-nm" href="/requests/4468">Card declined</a>
    <span rst-status rst-tone="neutral">Open</span>
  </div>
</div>
<!-- Open and Resolved panes (rst-stats, and rst-box
     with rst-detail and rst-switch) sit here, hidden
     until their tab is clicked -->
<!-- ...plus a few lines of script for tabs and toast -->
Plain HTML with rst- attributes. Custom elements, ids, and classes are left clear for your apps.
  • Get good-looking admin screens out of the box
  • A full set of configurable design tokens
  • A host of the most common components
  • Light: <20KiB gzipped
  • WCAG AA 2.2 accessibility audit-ready
  • Proper hierarchy-based mobile navigation
Try it out

Get started

Choose how to start

Paste this into your agent of choice

Build me a [describe your app] with Rastrillo. Read https://rastrillo.org/SKILL.md first. Then install the CLI with go install amadan.net/rastrillo/rastrillo/cmd/rastrillo@latest, run rastrillo new, and keep go test ./... passing as you go.
  1. Clone the repo

    git clone https://github.com/rastrilloorg/rastrillo && cd rastrillo/examples/notes
  2. Run it

    CGO_ENABLED=0 go run ./cmd/notes -addr localhost:8080

    Sign up, write a note. Open a private window, sign up as someone else, and try to reach the first note by URL: 404.

  3. Start your own

    go install amadan.net/rastrillo/rastrillo/cmd/rastrillo@latest
    rastrillo new myapp && cd myapp && go mod tidy && go test ./...

Deployment

Rastrillo apps compile to a single binary, so they will run trivially on any deployment stack. For fast-simple CARLOS-native deployment, reach for CARLOS platform, and to get started immediately, use Carloku.

Choose how to deploy

Ask your agent:

Deploy this app to Carloku
  1. Install the platform binary

    brew install carlosframework/tap/carlos
  2. Build your app for the target host

    GOOS=linux GOARCH=arm64 go build -o myapp ./cmd/myapp
  3. Deploy it

    carlos deploy --app myapp ./myapp

    Ships, promotes and watches your hosts until the new build is live.

A growing list of features for a whole variety of proven use-cases

Data and storage

Database
GORM on pure-Go SQLite, with split writer and reader pools.
Migrations
Additive migrations, applied at startup in a safe order.
Mergeable store
Append-only event streams with a deterministic merge.
Blobs
Content-addressed files on object storage, with presigned URLs.

Sign-in and security

Sessions
Revocable server-side sessions, with step-up re-auth for sensitive routes.
CSRF
An origin check on every mutating request. No tokens to forget.
Owner scoping
Someone else's row answers 404, proven by a two-user test suite.
Magic links
Email sign-in that upgrades to Keymail where it can.
Passwords
Email and password, rate-limited per account.
Passkeys
WebAuthn as a second factor, with recovery codes.
Encryption
P-256 sealing and signing, with a matching browser module.

Screens and content

Design system
27 components and design tokens, light and dark.
Manifests
Declare a resource and get its store, actions and screens.
Localization
Locale-aware routes, translations with fallback, and a catalog check before you ship.
Scaffolding
rastrillo new gives you a working app with passing tests.

Background work

Jobs
Background tasks with a status page that works without JavaScript.
Live updates
Server-Sent Events where supported, plain polling where not.
Scheduling
Timers and recurring jobs that survive restarts and sleeping apps.

Agents and platform

SKILL.md
The whole framework in one file an agent can load.
Agent tools
Actions opt in as tools, with consent and attribution.
Hibernation
Apps sleep when idle and wake on the next request.
One binary
go build produces the whole app. No bundler, no runtime.