This guide is for developers who want to run Inbox Zero locally and contribute to the project.Documentation Index
Fetch the complete documentation index at: https://docs.getinboxzero.com/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- Node.js >= 24.0.0
- pnpm >= 10.0.0
- Docker Desktop (for Postgres and Redis)
Local Development Setup
Option A: Devcontainer
The fastest way to get started is using devcontainers, supported by VS Code (Dev Containers extension) and JetBrains IDEs:- Open the project and select “Reopen in Container” when prompted
- Wait for the container to build and
postCreateCommandto complete - Configure at least one OAuth provider in
apps/web/.env(see Setup Guides) - Run
pnpm dev
Option B: Manual Setup
-
Start PostgreSQL and Redis:
-
Install dependencies:
-
Optional: start the local Google emulator if you want to develop against emulated Google OAuth/Gmail instead of real credentials:
-
Optional: start the local Microsoft emulator if you want to develop against emulated Microsoft OAuth/Graph instead of real credentials:
-
Set up environment variables using one of these methods:
Interactive CLI (recommended) - guides you through each step and auto-generates secrets:
Manual - copy the example file and edit it yourself:To use the local Google emulator, set these values in
apps/web/.env:To use the local Microsoft emulator, set these values inapps/web/.env: -
Run database migrations:
-
Start the development server:
Configuration
You’ll need to configure at least one OAuth provider and an AI provider. The setup CLI handles this interactively, but for manual configuration see the Setup Guides:Parallel Branch Development
If you regularly work in multiple Git worktrees or branch-specific local copies, use the dev setup helper instead of reusing a single shared app/database setup.Why this helps
- Each branch gets its own local Postgres database, so schema changes on one branch do not break another branch.
- The helper picks a branch-specific app port, which makes it easier to run multiple local copies at once.
- It can start local Postgres and Redis automatically when they are not already running.
- It wires emulator-based Google and Microsoft auth for local development, which is useful when you do not want to depend on real OAuth callbacks during day-to-day work.
Shared env files
The helper expects shared local env files in~/.config/inbox-zero and symlinks them into apps/web:
~/.config/inbox-zero/.env.local~/.config/inbox-zero/.env.test~/.config/inbox-zero/.env.e2e
Common commands
Initialize the current branch for local development:Recommended usage
- Use
clone-mainmode when you want realistic local data and faster setup. - Use
emptymode when you are working on schema changes or want a clean migration path. - Use emulator auth for most local development.
- Reserve real OAuth flows for cases where you specifically need to test real provider behavior.