Skip to content

Local development

Use a git checkout of bermooda/bermooda when you are contributing to the platform itself. To scaffold a merchant shop from the published app, use bermooda install instead.

Terminal window
npm install
npm run setup # .env + config + prisma generate/migrate + default theme
npm run seed # optional demo catalog + admin

npm run setup creates .env from .env.example when missing, generates Prisma clients, applies migrations, and installs the default theme.

Terminal window
# Default local script (wraps env with 1Password CLI if you use it):
npm run dev
# Plain env file (no 1Password):
npx react-router dev --port 3000 --host
# or, with the CLI installed:
bermooda dev

App: http://localhost:3000. Admin is at /admin.

Task Command
Full local setup npm run setup
Seed demo data npm run seed
Install default theme npm run extensions:install
Install extension deps npm run extensions:install-deps
Tests npm run test
Lint npm run lint
Format npm run fmt
Production build npm run build
New migration npm run prisma:migrate -- --name <name>
app/
core/ # Domain workflows (catalog, cart, orders, payments, …)
libs/ # Infrastructure (auth, Prisma, queue, alerting, SDKs)
routes/ # Storefront, admin, API, webhooks, auth
themes/ # Storefront themes (active theme renders the shop)
plugins/ # Hook-based extensions (blocks, admin pages, providers)
components/ # Shared admin / auth / UI primitives
  • Routes stay thin: loaders and actions call app/core/*.
  • Themes receive data via props and loaders; they do not import server core modules.
  • Plugins register hooks, providers, and optional admin/storefront UI.

Delete prisma/dev.db and re-run npm run setup.

Issues and pull requests that improve the commerce core, themes, plugins, docs, or developer experience are welcome. Prefer small, focused changes that match patterns in nearby files.

Terminal window
npm run test
npm run lint