Install
From a license key to a running application.
npx create-launch-quickly my-appIt asks for your license key, downloads the template, installs dependencies, and
then runs lq check against what it just wrote. If that check fails, the
command exits non-zero — you keep the project, but you also get a bug report to
send us rather than discovering the problem yourself an hour later.
Your key is never written to disk. If you would rather keep it out of shell
history, set LQ_LICENSE_KEY instead of passing --key.
Requirements
- Node 22 or newer.
- pnpm. The project's dependencies are wired up with pnpm-specific fields, so
npm and yarn will not resolve them.
corepack enableis the least effort way to get it. - Postgres 15 or newer. Row-level security is load-bearing here, so this is not portable to MySQL or SQLite — see Tenancy.
After it finishes
Everything is documented in .env.local, which the installer creates for you
from .env.example. Two variables are required and the rest are optional:
DATABASE_URL= # the app role — must NOT own the tables
DATABASE_ADMIN_URL= # the owner — migrations and system jobs onlyThose being two different roles is the whole tenancy design rather than an
optimisation. A table's owner bypasses its own row-level security policies, so an
app connecting as the owner has no enforcement at all — it would pass every test
you write and leak the first time a query forgot its where clause.
If you put a connection pooler in front of Postgres, it must run in
transaction mode. Tenancy uses SET LOCAL, which is scoped to a
transaction; session-mode pooling leaks one request's tenant into the next.
Then:
pnpm db:migrate
pnpm devWhat to read first
CLAUDE.md, in the project root. It is about 130 lines and it is the file that
keeps generated and hand-written code the same shape. If you point an agent at
this codebase without it, you get an agent inventing its own architecture inside
one that already has one.