Monorepo script commands, package boilerplate, and conventions for this codebase. Use when the user says "how do I run", "bun run", "build this", "run tests", "typecheck", "create a new package", or when running builds, tests, formatting, linting, type checking, or scaffolding new packages.
The monorepo uses consistent script naming conventions:
Use this pattern when you need to:
:check CI-only variants.bun typecheck workflow.packages/| Command | Purpose | When to use |
|---|---|---|
bun format | Fix formatting (biome) | Development |
bun format:check | Check formatting | CI |
bun lint | Fix lint issues (biome) | Development |
bun lint:check | Check lint issues | CI |
bun typecheck | Type checking (tsc, svelte-check, astro check) | Both |
:check suffix = check only (for CI, no modifications)typecheck alone = type checking (separate concern, cannot auto-fix)Every app uses explicit dev:local / dev:remote naming:
| Script | Meaning |
|---|---|
dev:local | Local everything—local API, local secrets |
dev:remote | Local app, remote/prod resources |
dev | Alias for dev:local (convenience) |
Not every app has dev:remote—only add it when there's a real use case.
epicenter)From the monorepo root, bun epicenter runs the local CLI against localhost:8787:
bun epicenter start playground/opensidian-e2e --verbose
bun epicenter list files -C playground/opensidian-e2e
The bare epicenter command (global install) defaults to api.epicenter.so.
Config files read process.env.EPICENTER_SERVER with a prod fallback—the root
script sets it automatically.
Run type checking to verify:
bun typecheck
This runs turbo run typecheck which executes the typecheck script in each package (e.g., tsc --noEmit, svelte-check).
When creating a new package in packages/, follow this exact structure.
package.json{
"name": "@epicenter/<package-name>",
"version": "0.0.1",
"main": "./src/index.ts",
"types": "./src/index.ts",
"exports": {
".": "./src/index.ts"
},
"license": "MIT",
"scripts": {
"typecheck": "tsc --noEmit"
},
"dependencies": {},
"devDependencies": {
"@types/bun": "catalog:",
"typescript": "catalog:"
}
}
Key conventions:
main and types both point to ./src/index.ts (no build step—consumers import source directly)."workspace:*" for internal deps (e.g., "@epicenter/workspace": "workspace:*")."catalog:" for shared versions managed in the root package.json catalogs.peerDependencies for packages consumers must also install (e.g., yjs).tsconfig.json{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"module": "preserve",
"noUnusedLocals": true,
"noUnusedParameters": true,
"noPropertyAccessFromIndexSignature": false
}
}
After creating the package, run bun install from the repo root to register it in the workspace.