pnpm. Check each repo README before running service-specific setup.
Node version
stralos-shell requires Node 24. The repository pins 24.19.0 in .node-version. Use a version manager that reads .node-version (for example fnm or nodenv) to match this exactly. The package.json engines field enforces >=24 <25.
Local ports
API service commands
Most API services support:stralos-api-global also needs DynamoDB Local for OTP and sessions:
.env.example sets OTP_EXPOSE_GENERATED=true by default. This causes POST /auth/otp/request to include the generated six-digit code in its JSON response, which is necessary for completing the login flow locally because SES email delivery is disabled (SES_ENABLED=false). See Local OTP behaviour for the response shape.
To exercise access-token refresh locally, set ACCESS_TOKEN_TTL_SECONDS to a whole number from 60 to 3600. The default is 3600; the Terraform development configuration uses 900 (15 minutes). See User access token lifetime.
stralos-api-documents also needs LocalStack and a worker:
Assistant service setup
stralos-api-assistant requires Node.js 24.19.0 (pinned in .node-version) and pnpm@11.10.0. The Assistant API Lambda uses the nodejs24.x managed runtime.
stralos pnpm workspace. Start it from the suite root with stralos-local (./stralos-local/stralos-local up assistant) alongside the rest of the stack.
.env.example ships with AI_PROVIDER=google and GOOGLE_MODEL_ID=gemini-3.6-flash. The workspace’s scripts/setup-local-env.sh fills GOOGLE_API_KEY from dev SSM (requires your stralos-dev AWS login). Without dev access, paste in a personal Gemini API key. Set AI_PROVIDER=fixture to run without any live model provider. See AI copilot assistant service for the full configuration reference.
Frontend commands
Frontend packages generally expose:pnpm build for TypeScript checking rather than a separate type-check script.
Shell API configuration
The shell’s local API defaults work without copying.env.example. Override a variable only when a service runs somewhere other than its normal local port. Production builds use the serving origin as the terminal fallback when no explicit build-time, runtime, or support override is present.
Shell-specific variables and their local defaults:
See Frontend architecture for the full precedence contract.
Admin console
stralos-admin-web is a pnpm workspace member. Its @stralos-co-nz/ui dependency resolves from a sibling stralos-ui checkout rather than the registry, so you must run pnpm install from the workspace root — not from inside stralos-admin-web — and build the sibling packages in order before starting the dev server.
Prerequisites: stralos-admin-api running on port 3306 against the local stralos_admin database.
pnpm --dir stralos-ui build again after pulling stralos-ui — a stale dist folder looks clean to git status but renders components one release behind.
The workspace root .npmrc points @stralos-co-nz at GitHub Packages for other private API packages. A read:packages token is required for a full workspace install:
VITE_ADMIN_API_URL in a local .env file (copy .env.example). The default is http://localhost:3306.
Google sign-in also requires these four admin API settings in stralos-admin-api/.env:
http://localhost:5174/auth/callback as an authorised redirect URI on that Google OAuth client. When all four settings are absent, the API can start but the sign-in routes return 503. A partial configuration is invalid and stops the admin API during startup, so supply the complete set together.
After pnpm admin:bootstrap on the admin API, sign in at http://localhost:5174 with the bootstrapped operator’s Google Workspace account. No password or TOTP enrolment is required; the first sign-in binds the Google account to the operator row.
Rates service API configuration
The Rates API calls Global (to validate supplier ownership), Estimate, and Activities (when resolving day-rate schedule line mappings). For each peer, set the direct URL variable (STRALOS_GLOBAL_URL, ESTIMATE_API_URL,
ACTIVITIES_API_URL) or its *_SSM_PARAMETER companion naming the
service-discovery parameter. stralos-local sets the direct URLs for you. There is
no localhost fallback: when neither variable is set for a peer, the service
refuses with a configuration error rather than calling a hard-coded port. See
Deployment — Peer API URL resolution.
Activities feature API configuration
The Activities feature client uses three API services. Override their base URLs only when a service runs on a non-default port.
See Frontend architecture for the full precedence contract.

