Create a Project with CLI
Initialize your EasyStarter app with one command
After you purchase EasyStarter and accept the GitHub collaborator invite, use this command to create your project. You do not clone the template by hand.
The template repository is private. Accept the collaborator invite first. If the command cannot download the template, the invite is still pending.
Create the project
In an empty directory:
pnpm create easystarter my-appor:
npx create-easystarter my-appReplace my-app with your project name. It must be lowercase kebab-case (acme-app, not Acme App).
The command downloads EasyStarter, names the project after your choice, writes local env files, installs dependencies, and can start the dev servers.
Answer the setup questions
The wizard asks about your product. Pick what you need now — you can change these later in packages/app-config.
| Question | What to choose |
|---|---|
| App display name | The name users see, for example Acme |
| Auth methods | At least one: email-password, email-otp, github, google, apple, sms |
| Web payments | none, stripe, creem, or waffo |
| Native payments | none or revenuecat |
| Email provider | cloudflare or resend |
| Enable credits | Yes only if you sell credits |
| Install dependencies | Yes |
| Initialize git | Yes |
Default choices are email/password login, no payments, Cloudflare email, and no credits. After that it migrates the local database and starts Web + Server.
Skip the questions and use those defaults:
pnpm create easystarter my-app -yPass flags if you already know the stack, for example:
pnpm create easystarter my-app \
--app-name "Acme" \
--auth email-password github \
--payments stripe \
--native-payments revenuecat \
--email resend \
--no-dev--no-dev creates the project without starting the servers. --auth accepts one or more methods.
Open the local app
When create finishes (and you did not pass --no-dev):
| App | URL |
|---|---|
| Web | http://localhost:3000 |
| Server | http://localhost:3001 |
| Extension | http://localhost:3002 |
If the servers are not running:
cd my-app
pnpm dev:web+serverEnv files are already created. Do not copy the .example files over them — that overwrites BETTER_AUTH_SECRET.
If you enabled GitHub, Google, Apple, SMS, Resend, Stripe, Creem, Waffo, or RevenueCat, the command prints the extra keys those features still need. Add them before you use those integrations.
Connect Cloudflare
Create only sets up the local project. It does not create Cloudflare D1 or R2, and it does not deploy.
When you are ready to attach your Cloudflare account (needed for remote database, object storage, and deploy):
cd my-app
pnpm exec create-easystarter initor:
npx create-easystarter initThe command opens a Cloudflare login if needed, then creates or reuses {project}-db and {project}-bucket, and writes the IDs into your project. Local development can run before this step.
To also apply remote D1 migrations:
pnpm exec create-easystarter init --migrateRemote migrate needs a Cloudflare API token with D1 edit permission. Create one at API Tokens. You can skip the token during init and add CLOUDFLARE_API_TOKEN later, then run pnpm db:migrate.
You can also pass production URLs:
pnpm exec create-easystarter init \
--website-url https://example.com \
--server-url https://api.example.com