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 ./docker/scripts/setup-env.sh # Creates .env with auto-generated secrets -
Configure OAuth and LLM:
Edit
apps/web/.envand add:- OAuth credentials (at least one required): Google OAuth or Microsoft OAuth
- LLM provider: Uncomment one provider block and add your API key
-
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 setup script auto-generates all required secrets. The sections below cover the services you need to configure manually. 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(or your custom domain) - In
Authorized redirect URIsenter (or your custom domain):
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.
Email watch renewal: Gmail watch subscriptions expire periodically and must be renewed. If using Docker Compose, this is handled automatically by the cron container every 6 hours. Otherwise, set up a cron job to call /api/watch/all (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 "Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)"
- Set the Redirect URI:
- Platform: Web
- URL:
http://localhost:3000/api/auth/callback/microsoft
- Click "Register"
- In the "Manage" menu click "Authentication (Preview)"
- Add the following Redirect URIs:
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 - 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
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).




