Version 0.8.0 is live
The React framework
for Cloudflare Workers.
Build full-stack apps on Cloudflare with a minimal and predictable system. Made for humans and coding agents, so you can keep a clean codebase to read, understand and change yourself.
Read the developer docsnpx create-goribu new-appOpen-source · MIT License
// Load the post or return a 404.
export async function GET(req, res) {
const post = await req.d1`
SELECT title, body FROM posts
WHERE id = ${req.params.id}
`.get();
if (!post) return res.notFound();
return res.render({ post });
}
// Render the post as a React page.
export default function Post({ post }) {
return (
<article>
<h1>{post.title}</h1>
<p>{post.body}</p>
</article>
);
}Keep changes local
One file
The page UI and its handlers live together.
Stay predictable
One way
Clear patterns for humans and agents.
Be token efficient
Small API
Less conventions to hold in your head or your sessions.
Just declare resources
Code first
Spin up Cloudflare services like D1 and KV from code.
Stream pages
Server-driven
SSR for your initial load and just JSON for navigation.
Build fast.
Change things easily.
A route has its data and its UI in the same file. Most changes stay local, obvious and easy to review. No matter if you or your agent is making them.
const post = await req.d1`
SELECT title, body
FROM posts
WHERE id = ${req.params.id}
`.get();
// In the page component
<p>{post.body}</p>
const post = await req.d1`
Changed line: SELECT title, body, author
FROM posts
WHERE id = ${req.params.id}
`.get();
// In the page component
<p>{post.body}</p>
Changed line: <footer>By {post.author}</footer>
The resources you want.
Right in your code.
You or your agent can declare and use a D1 database or a KV store, if your app needs them. Just deploy and Goribu handles this and more, for you.
import { defineConfig } from "goribu/server";
export default defineConfig({
name: "my-app",
compatibilityDate: "2026-09-01",
database: {
type: "d1",
name: "my-app-db",
},
kv: { name: "my-app-kv" },
});From dev to production
pnpm devRun your app with local versions of the resources you declared, using the same bindings as production.
pnpm checkRead the production plan. Review resources and pending migrations before making any changes to production.
pnpm run deployValidate, build and provision declared resources. Apply pending migrations, then upload your app to Cloudflare.
Reliable architecture.
Less complexity.
Request-time pages stream on the first visit. App navigation asks for page data.
Static HTML is built ahead of time and served without invoking the Worker.
First visit
- Request
- Worker handler
- Stream HTML
Real content immediately
Navigation
- Link click
- Fetch page JSON
- Swap into the next page
App-like navigation with server-loaded data
Static route
- Request
- Served from Cloudflare CDN
Static HTML without a Worker invocation
TypeScript or JavaScript
Typed by default or use
--jsfor plain JavaScript. Whatever you prefer, the framework stays the same.Forms
Server mutations, validation, redirects and pending state through a single Form component.
AI ready by default
Despite being new, the necessary files are included and the patterns work from the start with most coding agents.
Metadata & SEO
Set titles, descriptions and other metadata alongside your routes, rendered correctly on the server.
Error handling
Helpful error pages with a unique ID you can trace in logs alongside the CF-Ray.
Powered by Vite
Fast development, HMR and the Vite ecosystem, without having to rely on a custom build toolchain.
Start building apps, in the
way you prefer.
A small API, one canonical way to do stuff and all the files your agents need, from the start. That’s why Goribu is token-efficient, takes up minimal context space and even enables your AI assistant to add the resources you need.
pnpm create goribu@latest my-app
cd my-app && pnpm install
pnpm dev
A first task for your agent
Build a notes app with D1. Add a notes list, a create form, an edit page and deletion. Replace the starter pages.
Get your real-world notes app working right away, check out how fast your agent got up to speed and how low the token cost was.