Your waitlist.On your server.
Lobby gives every product you launch a signup form, double opt-in, a place in line, referral links that move people up and invite waves. One binary and one SQLite file, with no monthly bill.
$ docker run -p 8080:8080 -v lobby:/data ghcr.io/rohansx/lobby
Everything a launch needs. Nothing you pay for monthly.
The parts hosted waitlist tools charge extra for are built in: referrals, invite waves, webhooks, broadcasts, and one dashboard for all your products.
One dashboard for every product
Signups per day, confirm rate, top sources and top referrers. Run the waitlists for all your side projects from one install.

Referrals that move people up
Every friend who confirms moves the referrer up the line, or keep a strict first-come order.
Credit lands only after the friend confirms, capped per IP address and per hour, so a script can't farm it.
Spam handled, no CAPTCHA
A honeypot field, timing checks, rate limits, a disposable-domain list and MX lookups keep bots out without annoying people.
Invite in waves
Click Invite next 50. The front of the line gets a magic link and a code bound to their address. Your app redeems it with one API call.
Know the moment it happens
An email to you for every new signup, with where they came from and who referred them. Signed webhooks and a Slack preset for the rest.
Emails that land, and look right
Confirmation, status, invite and launch emails through Resend or any SMTP server, with one-click unsubscribe and bounce suppression.

Private by default
IP addresses are kept only as keyed hashes and cleared after 30 days. Public pages set no cookies. Export to CSV or NDJSON any time.

From first visit to first invite.
Sign up
From your widget, a plain HTML form or the hosted page. Gmail dots and +tags fold together, so nobody signs up twice.
Confirm
The confirmation link opens their status page: their place in line, how many are behind them, and a link to share.
Refer
Friends who join and confirm through that link move the referrer up. Your dashboard shows who's driving growth.
Invite
Send invites in waves from the front of the line, then a launch broadcast to everyone when you go live.
A status page worth sharing
Every confirmed signup gets a page showing where they stand and a referral link to copy. It's server-rendered, needs no JavaScript and sets no cookies.
- Place in line and how many people are behind
- One-click copy, plus share to X, LinkedIn or email
- No account or login needed to view it

Every number that matters, in light or dark
See where signups come from, who refers the most and how many confirmed. Invite, export, broadcast and manage webhooks from the same place.

Drop it into any site. One line.
Every project gives you three ways in, and the dashboard shows each snippet with your keys already filled in.
Your launch list is your most valuable list.
It's the people who asked to hear from you before you existed. Keep it on your own server, under your own domain.
| Lobby | Typical hosted waitlist | |
|---|---|---|
| Price | Free and MIT licensed. Runs on a $5 VPS next to your other apps | A monthly plan, often priced per list or per signup |
| Where your list lives | One SQLite file on your server, with continuous S3 backup via Litestream | Their database |
| Multiple products | Unlimited projects in one install | Often one list per plan |
| Referrals and invites | Included, with fraud checks | Often on higher tiers |
| Email sender | Your domain, through Resend or any SMTP server | Varies, often their domain |
| Leaving | CSV or NDJSON export, or copy the file | Export, if your plan includes it |
Running in under a minute.
Start the container, open it in a browser, create your admin account and your first project. Then paste a snippet onto your site.
Docker
Multi-arch (amd64 and arm64), with Litestream built in for backups.
docker run -d -p 8080:8080 \ -v lobby-data:/data \ -e LOBBY_BASE_URL=$URL \ -e RESEND_API_KEY=re_… \ ghcr.io/rohansx/lobby
Dokploy, Coolify, any VPS
Point your PaaS at the image or the repo, mount a volume at /data and set the public URL.
git clone \ https://github.com/rohansx/lobby cd lobby LOBBY_BASE_URL=$URL \ docker compose up -d
Drive it from the CLI
The binary is also a CLI, and every instance serves its API at /llms.txt for agents.
export LOBBY_URL=$URL export LOBBY_KEY=sk_… lobby stats lobby invite --next 50 lobby export --format csv
Is it really free?
Yes. Lobby is MIT licensed with no paid tier, no signup limits and no phone-home. You pay for the server it runs on and for your email provider, and Resend's free tier is enough for a small launch.
What do I need to run it?
Anything that runs a Docker container: a small VPS, Dokploy, Coolify, Fly.io or Railway. It idles at about 20 MB of memory. Mount a volume at /data so your list survives restarts.
Can I run waitlists for several products?
Yes. Each project has its own form, keys, allowed origins, emails, referral rules and settings, and they all share one dashboard.
How do I stop people gaming referrals?
A referral only counts after the friend confirms their email, credits are capped per IP address and per hour, and addresses are normalized so Gmail dots and +tags can't create duplicates. Disposable domains are rejected.
What about backups?
Set LITESTREAM_REPLICA_URL to any S3-compatible bucket and the database is replicated continuously. On an empty volume Lobby restores from the replica automatically.
How do I let people in when I launch?
Click Invite next N in the dashboard or run lobby invite --next 50. Each person gets a magic link and a code. Your product calls POST /v1/invites/redeem, or you send a launch broadcast to everyone at once.
Open the doors on your terms.
One command, your own server, and a list that stays yours.
