Sluurp it up and ship it.

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/sluurp/master/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

Say once who may see and change what. Every request follows it; no check to forget.

Pages that load fast

Components or Markdown, drawn on the server: quick to show, easy to find, alive where it counts.

Call the server like a function

Write a function once and call it from the page. No API to design, no requests to write.

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.