Prerequisites
Install these before you attempt Local Setup.
Required for every developer
| Tool | Version | Why | Install |
|---|---|---|---|
| Node.js | >= 18 (22 LTS recommended) | Every app and package | nodejs.org or nvm install 22 |
| pnpm | 9.0.0 exactly | Workspace resolution; the lockfile is pnpm-specific | corepack enable && corepack prepare pnpm@9.0.0 --activate |
| Docker Desktop | current | PostgreSQL, Redis, and LiveKit run locally in containers | docker.com |
| Git | current | — | — |
Use corepack, not npm i -g pnpm
The repo pins "packageManager": "pnpm@9.0.0" in the root package.json. Corepack reads that field and uses the exact version. A globally installed pnpm 10 will produce lockfile churn that other developers have to clean up.
Required for mobile work
| Tool | Notes |
|---|---|
| Xcode (latest) | iOS Simulator. macOS only. Install the command line tools: xcode-select --install |
| Android Studio | Android emulator. Optional if you are only working on iOS. |
| PlayPalz development client | The app uses native modules (LiveKit / WebRTC, Bugsnag, notifications), so Expo Go will not work. You need a development build — see Builds & Releases. |
| EAS CLI | pnpm add -g eas-cli, only needed if you will produce builds. |
Required for infrastructure work
| Tool | Notes |
|---|---|
| doctl | DigitalOcean CLI, authenticated against the PlayPalz account |
| kubectl | Cluster access |
| terraform | >= 1.5, for infra/terraform |
| kubeseal | Encrypting secrets for infra/k8s/sealed-secrets |
| helm | Used for the Loki logging stack |
| jq | Used by the Terraform validation script |
On macOS:
bash
brew install doctl kubectl terraform kubeseal helm jqAccess you will need to request
Local development works without any of these — the app runs against local Postgres and Redis with stubbed third-party integrations. You only need them for full-fidelity work or production access.
| System | Needed for |
|---|---|
GitHub repo cryptixcoder/playpals | Everything |
| DigitalOcean team | Kubernetes, database, Spaces, container registry |
| Mux | Video transcoding, livestream ingest |
| RevenueCat | Subscription and IAP webhooks |
| Stripe (Connect platform account) | Creator payouts |
| LiveKit | Voice rooms (self-hosted on a dedicated droplet) |
| Bugsnag | Mobile crash reporting |
| Expo / EAS | Mobile builds and submissions |
Credentials do not belong in the repository
dev-notes/info.md currently contains a plaintext account password. Do not follow that pattern. Secrets live in 1Password / the DigitalOcean secret store and reach the cluster as sealed secrets.
Verify your setup
bash
node --version # v18+ (v22 recommended)
pnpm --version # 9.0.0
docker --version
docker compose version