Quickstart
Start a local instance with Docker Compose, create the first user and fill it with invented demo data.
This starts a development instance on your machine. For a server, continue with the deployment guide.
Start the stack
cp .env.example .env
# Edit .env: DATABASE_URL is the only required change for local development.
# The object storage (MinIO) runs inside Docker, no external account is needed.
docker compose up
Compose starts the API, the web app, the two workers (IMAP and mailer), a local MinIO and Nginx. PostgreSQL is not part of the stack: point DATABASE_URL at a database of your own.
Create the first user
SEED_ADMIN_EMAIL=you@example.com \
SEED_ADMIN_PASSWORD='choose-a-password' \
pnpm --filter=@casoon/helpdesk-api seed
Fill it with demo data (optional)
pnpm --filter @casoon/helpdesk-api seed:demo
The script fills a migrated, local database with invented data: users, two mailboxes, organizations, customers, about 45 tickets with replies, notes and history, an SLA with a business-hours calendar, triggers, macros and custom fields. All addresses use example.com, example.org or example.net; no mail is sent. It refuses to run unless DATABASE_URL points to localhost.
Develop
pnpm install
pnpm dev # all apps in watch mode via Turborepo
Database migrations:
pnpm db:generate # generate SQL from schema changes
pnpm db:migrate # apply migrations
pnpm db:studio # open Drizzle Studio