pnpm dev- Start all dev servers (web:3000, admin:3001)pnpm build- Build all packages and appspnpm check- Run all checks (format, lint, types)pnpm check:lint- OxLint across all packagespnpm check:types- TypeScript type checkingpnpm fix- Auto-fix format and lint issuespnpm turbo run <command> --filter=<package>- Target specific package/app
- Imports: Use
workspace:*for internal packages,catalog:for external deps - TypeScript: Strict mode enabled, all files must be typed
- Formatting: oxfmt, run
pnpm fix:format - Linting: OxLint with shared
.oxlintrc.jsonconfig - Naming: camelCase for variables/functions, PascalCase for components/types
- Error Handling: Use try-catch with proper error types, log errors appropriately
- State Management: MobX stores in
packages/shared-state, reactive patterns - Testing: All features require unit tests, use existing test framework per package
- Components: Primitives come from the published
@makeplane/propelnpm package (@makeplane/propel/components/*,elements/*,icons); composite/Plane-specific components live in@plane/blocks(packages/blocks, subpath imports only, e.g.@plane/blocks/toast)
apps/api dependencies are managed with uv: declared in apps/api/pyproject.toml, pinned in apps/api/uv.lock (commit both). Groups: dev and test (installed by default; they use psycopg-binary), production (gunicorn + the source-built psycopg-c; production image and migration-check only). Lint config lives in apps/api/ruff.toml.
- uv must be exactly the
required-versioninapps/api/pyproject.toml(uv self update <version>); bump it together with the uv image in both Dockerfiles - Set up a local env:
cd apps/api && uv sync - Inside the dev/test containers, always pass
--inexact(uv sync --inexact): uv targets the image's system Python there, and an exact sync would uninstall pip - Add/upgrade a dependency:
uv add <pkg>==<version>(or--group test/--group dev), or editpyproject.tomland runuv lock - Run tools:
uv run python manage.py ...,uv run ruff check .
The Django/pytest suite for apps/api runs in an isolated stack defined by docker-compose-test.yml at the repo root.
Prereq (once): ./setup.sh — generates apps/api/.env from .env.example.
- Full suite:
docker compose -f docker-compose-test.yml up --build --abort-on-container-exit --exit-code-from api-tests - Subset:
docker compose -f docker-compose-test.yml run --rm --build api-tests pytest -m unit - Teardown:
docker compose -f docker-compose-test.yml down -v
See apps/api/tests/RUNNING_TESTS.md for the full walkthrough and troubleshooting; see apps/api/tests/TESTING_GUIDE.md for test conventions and fixtures.