Sluurp it up and ship it.

Alpha, v0.1.0: things change between versions, and some will break. Try it and tell us what you find.

Almost all you need,
in one binary.

A database, sign-in, fast pages, live updates and AI agents, ready from the first minute. Point it at a folder and ship.

$ curl -fsSL https://raw.githubusercontent.com/SluurpHQ/releases/main/install.sh | sh
Your approutesislandspagesfunctions
SluurpRESTrulesauthsynchistoryagentshot reloadadmin
SQLite, built inone file per project

Everything an app needs,
nothing to assemble

What usually takes a stack of services, a week of setup and a pile of glue code is already there when you start.

One binary

Database, sign-in, files, email, jobs and an admin, ready together. Ship by copying one file.

Secure by design

Declare access rules once; every request is checked against them in SQL. No check to forget.

Pages that load fast

Components or Markdown, rendered on the server: fast first paint, good SEO, interactive where it counts.

Call the server like a function

Write a server function and call it from the browser. No endpoints to design, no fetch code.

History

Undo, audit trails and last week's numbers, built in: every change kept, with who and why.

Live by default

Changes show everywhere at once, even offline, with everyone's cursors. Nothing to build.

Agents

A short file that acts when data changes: send the email, write the summary, ask the AI.

Instant feedback

See each change the moment you save. No build tools; any npm package in one command.

Write it once

A page, its data and the server code it needs, side by side in one file. The server part stays on the server, safe from prying eyes; the page just calls it.

How server functions work →
routes/todos.tsx
export async function addTodo(title: string) {
  "use server";
  "allow: @request.auth.id != null";
  return server.collection("todos").create({ title });
}

export default async function Todos() {
  const todos = new Sluurp().collection("todos");
  const { items } = await todos.list();
  return <ul>{items.map((t) => <li>{t.title}</li>)}</ul>;
}
agents/tutor.ts
export const watch = { collection: "study_events" };

export async function act({ change, server, ai, agent }) {
  const said = change.record;
  // not to itself
  if (said.author === `agent:${agent}`) return;
  const ask = "Ask one short question.";
  const q = await ai(ask, said.text, schema);
  // with no model set up, a question still
  const text = q?.question ?? "What do you know?";
  server.collection("study_events").create({ text });
}

Built with itself

This site is a Sluurp app too. Its docs are Markdown that update the moment they are saved, and the Todos Collab example runs live on the examples page, everybody's cursor included.

Browse the examples →

Start building

One binary, one folder, and the rest of the afternoon.