- Bun 1.3+
- Node.js 20+
- Docker / Docker Compose
From the repository root:
bun installThe app reads configuration from the root .env file.
Important values to review:
GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_CALLBACK_URLGOOGLE_ALLOWED_DOMAINSREDIS_HOSTREDIS_PORTREDIS_PASSWORDREDIS_DBSQLITE_PATHCLICKHOUSE_URLCLICKHOUSE_USERCLICKHOUSE_PASSWORDCLICKHOUSE_DATABASEINGEST_DSN_HOSTINGEST_ALLOWED_ORIGINSEKEEPER_ORGMINIMAPS_STORAGE_PATH
Notes:
- the server upload token is generated automatically and persisted in SQLite
- the public plugin URL is derived from
APP_URL - project slugs are used as the plugin
projectvalue
Bring up ClickHouse and Redis:
docker compose -f docker-compose.sample.yml up -d clickhouse redisOptional log tail:
docker compose -f docker-compose.sample.yml logs -f clickhouseFrom the repository root:
bun run dev:backendBehavior:
- runs Bun in watch mode
- loads the root
.env - applies SQLite and ClickHouse migrations on boot
- generates the stored plugin upload token if one does not already exist
From the repository root:
npm run dev:frontendBehavior:
- runs the Vite dev server
- serves the UI on
http://localhost:5173 - proxies API, auth, and ingest traffic to the backend
From the repository root:
bun run dev:backend
npm run dev:frontend
bun run build
bun run typecheck
bun run test
bun run migrate- Start ClickHouse
- Start the backend
- Start the frontend
- Open
http://localhost:5173 - Use
/settingsto copy the current plugin token and project slug when wiring source map uploads
Usually this means ClickHouse is not reachable. Start it first:
docker compose -f docker-compose.sample.yml up -d clickhouse redisMake sure the frontend origin is allowed by:
INGEST_ALLOWED_ORIGINS
Check:
orgmatchesEKEEPER_ORGprojectmatches a real eKeeper project slugurlpoints at the backend base URLauthTokenmatches the token shown in/settings