Skip to content
The free plan is live

Everything your app needs,in one place.

Hosting, PostgreSQL, login, file storage, email, and Git repositories in one place. Ship a Next.js app or a small API without configuring a server.

Start free
npm create runlot my-app
Read the docs
The tools you already knowNext.jsHonoPrismaDrizzleTypeORMKnexSequelizeSvelteKitAstroNuxtReact Router
One place

Instead of wiring services together across six consoles, you get one project.

Six consoles become one project, and nine secrets you managed by hand become none.

App, PostgreSQL, login, files, mail, and code, with access, usage, logs, and backups in one place.

Hostingdeploy
PostgreSQLenv.db
Loginenv.auth
File storageenv.storage
Emailenv.email
Git repositorygit push
Get started

Two commands to deploy

After installing the CLI and logging in, these two commands are all it takes.

  1. 01

    Create

    Pick Next.js, Hono, or a static site. The runlot.json and the rest of the setup are already in the template.

  2. 02

    Deploy

    When the deploy finishes you get a URL that already works. my-app is the project and me is your personal organization.

  3. 03

    Use it

    File storage and email come with every project, and a database and login are created when your app uses them. Your app code reaches them through env, with nothing to turn on.

~/code — zsh

~/code $ npm create runlot my-app

Which template do you want?

1. next Next.js App Router — uses env.db and env.auth from server components

2. hono Hono worker — REST API example (/posts, /upload)

3. static A single static HTML page — assets only, no worker

4. studio Vite + React + Tailwind and a Hono API — what runlot Studio builds

Enter a name or a number: 2

Created /Users/you/code/my-app.

cd my-app

runlot dev

runlot deploy --org <slug>

~/code $ cd my-app && runlot deploy --org me

Bundling…

Bundled 3 files, 2.4 KiB

Created project me/my-app

Uploading 3 of 3 files (0.0 MB); 0 unchanged.

Deploying…

v1 3a7e2c91-0b4d-4f6a-9e1c-58d2b7f0a634 9f2c41b7e0aa 2026-10-20T04:12:31.418Z

migrated 0001_posts

Applied 1 migration.

https://my-app.me.runlot.app

~/code/my-app $ runlot pg execute -c "select * from posts"

id owner title

-- ------- ---------------

1 welcome Your first post

(1 row)

Features

It is all here

Create a project and the rest comes with it. There is nothing to sign up for separately and nothing to wire together.

Real PostgreSQL

The SQL and transactions you already know. Reach the same database from your app through env.db, and from your terminal through psql, pgAdmin, or the ORM you already use.

runlot=> select id, name, active, created_at from users limit 4;

idnameactive
1jiwoot
2minseot
3haneult
4seojunf

(4 rows)

runlot=>

Continuous backups

Every commit is shipped, encrypted, about once a minute. Pick a backup, a commit, or a moment, and restore to it.

Idle costs $0

With no requests coming in, your app stops running and starts again on the next one. Your data and settings stay as they were.

Login

Email, GitHub, and Google sign-in, with sessions handled. Check the user on the server with env.auth.user().

File storage

Upload images and attachments and share them through signed URLs that expire. Credentials never appear in your code.

Email · domains

Every project gets a mail address, and a domain you own connects with a CNAME and a TXT record. Certificates are issued and renewed for you.

Code

It is all on env.

No connection strings or API keys to configure. Local development uses the same env, so the code you ran locally runs the same way once deployed. Prisma, Drizzle, Kysely, TypeORM, Knex, and Sequelize are supported.

import { Hono } from "hono";import { Pool } from "@runlot/pg"; const app = new Hono<{ Bindings: Env }>(); app.get("/posts", async (c) => {  const user = await c.env.auth.user(c.req.raw);  const db = new Pool({ db: c.env.db });   const { rows } = await db.query(    "select id, title from posts where owner = $1 limit 20",    [user.id],  );  return c.json(rows);}); app.post("/upload", async (c) => {  const form = await c.req.formData();  const file = form.get("file") as File;  const url = await c.env.storage.put("covers/" + file.name, file);  return c.json({ url });}); export default app;
200 OK
Signed-in userjiwoo@example.com
PostgreSQL4 rows
File storagecovers/hero.png · signed URL
Next.jsHonoPrismaDrizzleTypeORMKnexSequelize
For teams

Deploy what you built at work, as it is

AI coding tools made building an internal tool easy. Deploying it still means asking someone. On runlot, who built it and what data it touches is attached from the start.

  1. 01

    Organizations and roles

    Invite people, and let admin, member, and viewer roles decide who deploys and who only looks.

  2. 02

    Open it to your org only

    Set project access to organization members only and the check runs before your app code does. No app needs a login screen of its own.

  3. 03

    A separate database per project

    Dozens of internal tools, each with its own PostgreSQL. The project list tells you which data sits where.

Talk to us about teams
Operate

See the whole app,
and fix it in the same place.

Incoming requests, the worker, and the database, storage, and mail bound to it, on one screen. When one binding is slower than the rest, its wire is drawn in ink.

Bindings on env
Runlot Studio

Describe it, Studio builds it,
runlot runs it.

Check the result in the preview and ask for changes in plain words. PostgreSQL, login, file storage, and email are ready when your app uses them, and the desktop app can use your Claude or ChatGPT subscription.

A Studio workspace: a conversation that added quantity buttons to a cafe order page, the files it changed, and the live preview of the cart.
Pricing

Try it free first

Nothing is charged within the free plan — not even with a card on file.

Free

Available now

$0/ mo

Enough for personal work and side projects.

  • 100,000 requests a day
  • 3 projects · 500 MB of PostgreSQL each
  • 7 days of backups · 10 GiB of file storage
  • 1 custom domain per project
Start free

Pro

Solo · small teams

$20/ mo

For running what you built on your own domain.

  • 10 million requests a month included
  • 30 projects · 8 GB of PostgreSQL each
  • 30 days of backups · 100 GiB of file storage
  • 50 custom domains per project
  • Billed only for what goes over · spending limit on by default
Start Pro

Enterprise

Custom quote

Talk to us

For companies where several people ship internal tools.

  • Annual contract · invoice billing
  • A dedicated support channel and onboarding
  • Self-hosted install — Helm chart · deb/rpm packages
Talk to us
This month $0.00Monthly spending limit on by default
FAQ

Questions

Read the docs
What happens when I go over a limit?

On the free plan it never turns into a bill. Requests stop for the rest of that day, and start being served again the next day. On Pro, only usage above what is included is billed, and a monthly spending limit is on by default so it cannot climb past it. We tell you before you get close.

Can I move an app I already built?

Yes. Run runlot deploy from your existing repository. It recognizes the framework and writes the configuration it needs. For the database, a pg_dump file loads straight in.

Can I take my data out later?

Yes. It is standard PostgreSQL, so pg_dump works as it always does. Files are plain objects, and env.storage.presign hands out a signed URL for any of them. Nothing is kept in a format that locks you in.

Which region does it run in?

The Seoul region. Your app and your database sit in the same place, so a database call never crosses a network. Users far from Seoul see longer response times.

Deploy your
first app.

Log in, and two commands later your first deploy is done.

Start free
npm create runlot my-app