EasyStarter logoEasyStarter

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-app

or:

npx create-easystarter my-app

Replace 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.

QuestionWhat to choose
App display nameThe name users see, for example Acme
Auth methodsAt least one: email-password, email-otp, github, google, apple, sms
Web paymentsnone, stripe, creem, or waffo
Native paymentsnone or revenuecat
Email providercloudflare or resend
Enable creditsYes only if you sell credits
Install dependenciesYes
Initialize gitYes

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 -y

Pass 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):

If the servers are not running:

cd my-app
pnpm dev:web+server

Env 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 init

or:

npx create-easystarter init

The 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 --migrate

Remote 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