Organizes your inbox, pre-drafts replies, and tracks follow‑ups - so you reach inbox zero faster. Open source alternative to Fyxer, but more customisable and secure.
Website
·
Discord
·
Issues
To help you spend less time in your inbox, so you can focus on what matters.
- AI Personal Assistant: Organizes your inbox and pre-drafts replies in your tone and style.
- Cursor Rules for email: Explain in plain English how your AI should handle your inbox.
- Reply Zero: Track emails to reply to and those awaiting responses.
- Smart Categories: Automatically categorize every sender.
- Bulk Unsubscriber: One-click unsubscribe and archive emails you never read.
- Cold Email Blocker: Auto‑block cold emails.
- Email Analytics: Track your activity and trends over time.
Learn more in our docs.
![]() |
![]() |
|---|---|
| AI Assistant | Reply Zero |
![]() |
![]() |
| Gmail client | Bulk Unsubscriber |
To request a feature open a GitHub issue, or join our Discord.
We offer a hosted version of Inbox Zero at https://getinboxzero.com.
The easiest way to self-host Inbox Zero is using our pre-built Docker image.
See our Self-Hosting Guide for complete instructions.
Here's a video on how to set up the project. It covers the same steps mentioned in this document. But goes into greater detail on setting up the external services.
- Node.js >= 22.0.0
- pnpm >= 10.0.0
- Docker desktop (recommended for running Postgres and Redis)
-
Start PostgreSQL and Redis:
docker compose -f docker-compose.dev.yml up -d
-
Install dependencies and set up environment:
pnpm install
Option A: Interactive CLI - Guides you through each step and auto-generates secrets
npm run setup
Option B: Manual setup - Copy the example file and edit it yourself
cp apps/web/.env.example apps/web/.env # Generate secrets with: openssl rand -hex 32 -
Run database migrations:
cd apps/web pnpm prisma migrate dev -
Run the development server:
pnpm dev
The app will be available at http://localhost:3000.
The sections below provide detailed setup instructions for OAuth and other services. For a comprehensive reference of all environment variables, see the Environment Variables Guide.
Go to Google Cloud Console and create a new project if necessary.
Create new credentials:
-
If the banner shows up, configure consent screen (if not, you can do this later)
- Click the banner, then Click
Get Started. - Choose a name for your app, and enter your email.
- In Audience, choose
External - Enter your contact information
- Agree to the User Data policy and then click
Create. - Return to APIs and Services using the left sidebar.
- Click the banner, then Click
-
Create new credentials:
- Click the
+Create Credentialsbutton. Choose OAuth Client ID. - In
Application Type, ChooseWeb application - Choose a name for your web client
- In Authorized JavaScript origins, add a URI and enter
http://localhost:3000(replacelocalhost:3000with your domain in production) - In
Authorized redirect URIsenter (replacelocalhost:3000with your domain in production):
http://localhost:3000/api/auth/callback/googlehttp://localhost:3000/api/google/linking/callbackhttp://localhost:3000/api/google/calendar/callback(only required for calendar integration)
- Click
Create. - A popup will show up with the new credentials, including the Client ID and secret.
- Click the
-
Update .env file:
- Copy the Client ID to
GOOGLE_CLIENT_ID - Copy the Client secret to
GOOGLE_CLIENT_SECRET
- Copy the Client ID to
-
Update scopes
- Go to
Data Accessin the left sidebar (or click link above) - Click
Add or remove scopes - Copy paste the below into the
Manually add scopesbox:
https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.settings.basic https://www.googleapis.com/auth/contacts https://www.googleapis.com/auth/calendar (only required for calendar integration)- Click
Update - Click
Savein the Data Access page.
- Go to
-
Add yourself as a test user
- Go to Audience
- In the
Test userssection, click+Add users - Enter your email and press
Save
-
Enable required APIs in Google Cloud Console:
- Google People API (required)
- Google Calendar API (only required for calendar integration)
PubSub enables real-time email notifications. Follow the official guide:
Set GOOGLE_PUBSUB_TOPIC_NAME in your .env file.
When creating the subscription, select Push and set the URL to:
https://yourdomain.com/api/google/webhook?token=TOKEN
Set GOOGLE_PUBSUB_VERIFICATION_TOKEN in your .env file to the value of TOKEN.
For local development, use ngrok to expose your local server:
ngrok http 3000Then update the webhook endpoint in the Google PubSub subscriptions dashboard.
Scheduled tasks: Gmail/Outlook watch subscriptions and meeting briefs require periodic execution. If using Docker Compose, this is handled automatically by the cron container. Otherwise, set up cron jobs for /api/watch/all (every 6 hours) and /api/meeting-briefs (every 15 minutes). See Self-Hosting Guide.
Go to Microsoft Azure Portal and create a new Azure Active Directory app registration:
-
Navigate to Azure Active Directory
-
Go to "App registrations" in the left sidebar or search it in the searchbar
-
Click "New registration"
- Choose a name for your application
- Under "Supported account types" select one of:
- Multitenant (default): "Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)" - allows any Microsoft account
- Single tenant: "Accounts in this organizational directory only" - restricts to your organization only
- Set the Redirect URI:
- Platform: Web
- URL:
http://localhost:3000/api/auth/callback/microsoft(replacelocalhost:3000with your domain in production)
- Click "Register"
- In the "Manage" menu click "Authentication (Preview)"
- Add the following Redirect URIs (replace
localhost:3000with your domain in production):http://localhost:3000/api/outlook/linking/callbackhttp://localhost:3000/api/outlook/calendar/callback(only required for calendar integration)
-
Get your credentials from the
Overviewtab:- Copy the "Application (client) ID" → this is your
MICROSOFT_CLIENT_ID - If using single tenant, copy the "Directory (tenant) ID" → this is your
MICROSOFT_TENANT_ID - Go to "Certificates & secrets" in the left sidebar
- Click "New client secret"
- Add a description and choose an expiry
- Click "Add"
- Copy the
Value→ this is yourMICROSOFT_CLIENT_SECRET(Important: copyValue, notSecret ID)
- Copy the "Application (client) ID" → this is your
-
Configure API permissions:
-
In the "Manage" menu click "API permissions" in the left sidebar
-
Click "Add a permission"
-
Select "Microsoft Graph"
-
Select "Delegated permissions"
-
Add the following permissions:
- openid
- profile
- User.Read
- offline_access
- Mail.ReadWrite
- Mail.Send (only required if
NEXT_PUBLIC_EMAIL_SEND_ENABLED=true, which is the default) - MailboxSettings.ReadWrite
- Calendars.Read (only required for calendar integration)
- Calendars.ReadWrite (only required for calendar integration)
-
Click "Add permissions"
-
Click "Grant admin consent" if you're an admin
-
-
Update your
.envfile with the credentials:MICROSOFT_CLIENT_ID=your_client_id_here MICROSOFT_CLIENT_SECRET=your_client_secret_here MICROSOFT_TENANT_ID=your_tenant_id_here # Only needed for single tenant, omit for multitenant
In your .env file, uncomment one of the LLM provider blocks and add your API key:
Users can also change the model in the app on the /settings page.
To test a production build locally:
# Without Docker
pnpm run build
pnpm start
# With Docker (includes Postgres and Redis)
NEXT_PUBLIC_BASE_URL=http://localhost:3000 docker compose --profile all up --buildFor production deployments, see our guides:
You can view open tasks in our GitHub Issues. Join our Discord to discuss tasks and check what's being worked on.
ARCHITECTURE.md explains the architecture of the project (LLM generated).
Docker images are automatically built on every push to main and tagged with the commit SHA (e.g., elie222/inbox-zero:abc1234). The latest tag always points to the most recent main build.
For formal releases, we create GitHub Releases with version tags (e.g., v2.26.0) which also trigger Docker builds with that version tag.




