Source: https://seerepo.com/r/elie222/inbox-zero/built
Markdown source: https://seerepo.com/r/elie222/inbox-zero/built.md
Description: inbox-zero is a TypeScript repo built with React, Electron, and Next.js. It stores its data in Vercel and Postgres.

# What is inbox-zero built with?

inbox-zero is a TypeScript repo built with React, Electron, and Next.js. It stores its data in Vercel and Postgres, signs people in with Better Auth and jose, takes payments with Stripe, sends email with Resend, uses AI through ai, ai-sdk, chat, @posthog/ai, ollama-ai-provider-v2, and 3 more, measures its use with PostHog, watches its errors with Sentry, makes its content with Cheerio, nodemailer, he, @react-email/render, html-to-text, and 13 more, validates its data with Zod, next-safe-action, and @hookform/resolvers, is tested with Vitest, playwright, @playwright/test, Testing Library, emulate, and 2 more, deploys with next-axiom and serwist, and uses Redis, @chat-adapter/state-ioredis, bullmq, SQLite, MCP, and 6 more. It has 733,800 written lines, with 1,352 test files.

Read on November 10, 2026, at commit 845ed68.

Repository: https://github.com/elie222/inbox-zero

## Frontend (apps/desktop)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file · [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)

## Backend (apps/desktop)

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 1 file · [apps/desktop/src/sentry.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/desktop/src/sentry.ts#L1)

## Support (apps/desktop)

### The base

- **[Electron](https://seerepo.com/uses/electron)**: 9 files

### Testing

- **Vitest**: 26 files

### Tools

- **esbuild**: 4 files

### Other

- **electron-updater**: 1 file

## Support (apps/image-proxy-aws)

### Testing

- **Vitest**: 1 file

## Support (apps/unsubscribe-worker)

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 3 files

### Testing

- **playwright**: 2 files

### Other

- **ipaddr.js**: 1 file

## Frontend (apps/web)

### The base

- **[Next.js](https://seerepo.com/uses/nextjs)**: 504 files · [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)
- **[React](https://seerepo.com/uses/react)**: 484 files · [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**
- **[class-variance-authority](https://seerepo.com/uses/class-variance-authority)**: 23 files
- **[next-themes](https://seerepo.com/uses/next-themes)**: 4 files
- **[tailwind-merge](https://seerepo.com/uses/tailwind-merge)**: 1 file

### Interface

- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 55 files
- **[sonner](https://seerepo.com/uses/sonner)**: 31 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 27 files
- **[react-day-picker](https://seerepo.com/uses/react-day-picker)**: 12 files
- **[Framer](https://seerepo.com/uses/framer)**: 11 files
- **[motion](https://seerepo.com/uses/motion)**: 7 files
- **[tiptap](https://seerepo.com/uses/tiptap)**: 4 files
- **[usehooks-ts](https://seerepo.com/uses/usehooks-ts)**: 4 files
- **[Headless UI](https://seerepo.com/uses/headless-ui)**: 3 files
- **[react-hotkeys-hook](https://seerepo.com/uses/react-hotkeys-hook)**: 3 files
- **[react-textarea-autosize](https://seerepo.com/uses/react-textarea-autosize)**: 3 files
- **[recharts](https://seerepo.com/uses/recharts)**: 3 files
- **[cmdk](https://seerepo.com/uses/cmdk)**: 2 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 2 files
- **@mux/mux-player-react**: 1 file
- **crisp-sdk-web**: 1 file
- **[react-resizable-panels](https://seerepo.com/uses/react-resizable-panels)**: 1 file
- **[react-syntax-highlighter](https://seerepo.com/uses/react-syntax-highlighter)**: 1 file
- **[use-stick-to-bottom](https://seerepo.com/uses/use-stick-to-bottom)**: 1 file

### Icons

- **[Lucide](https://seerepo.com/uses/lucide)**: 277 files

## Backend (apps/web)

### Data

- **[Redis](https://seerepo.com/uses/redis)**: 6 files · [apps/web/utils/redis/index.ts, line 2](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/redis/index.ts#L2)
- **[Vercel](https://seerepo.com/uses/vercel)**: 5 files · [apps/web/utils/queue/dispatch.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/queue/dispatch.ts#L1)
- **[Postgres](https://seerepo.com/uses/postgres)**: 2 files · [apps/web/utils/prisma.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/prisma.ts#L1)
- **@chat-adapter/state-ioredis**: 1 file
- **[bullmq](https://seerepo.com/uses/bullmq)**: 1 file
- **[SQLite](https://seerepo.com/uses/sqlite)**: 1 file

### Sign-in

- **[Better Auth](https://seerepo.com/uses/better-auth)**: 16 files
- **[jose](https://seerepo.com/uses/jose)**: 4 files

### AI

- **[ai](https://seerepo.com/uses/ai)**: 54 files
- **[ai-sdk](https://seerepo.com/uses/ai-sdk)**: 10 files
- **chat**: 8 files
- **@posthog/ai**: 1 file
- **ollama-ai-provider-v2**: 1 file
- **[OpenRouter](https://seerepo.com/uses/openrouter)**: 1 file

### Services

- **[PostHog](https://seerepo.com/uses/posthog)**: 30 files · [apps/web/utils/posthog.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/posthog.ts#L1)
- **[Sentry](https://seerepo.com/uses/sentry)**: 14 files · [apps/desktop/src/sentry.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/desktop/src/sentry.ts#L1)
- **[MCP](https://seerepo.com/uses/mcp)**: 7 files · [apps/web/utils/actions/mcp.ts, line 4](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/actions/mcp.ts#L4)
- **[OpenAI](https://seerepo.com/uses/openai)**: 4 files · [apps/web/utils/decision-model/decision-model.ts, line 2](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/decision-model/decision-model.ts#L2)
- **QStash**: 4 files · [apps/web/utils/qstash.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/qstash.ts#L1)
- **[Anthropic](https://seerepo.com/uses/anthropic)**: 1 file · [apps/web/utils/llms/model.ts, line 5](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/llms/model.ts#L5)
- **Apple**: 1 file · [apps/web/ee/billing/apple/index.ts, line 13](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/ee/billing/apple/index.ts#L13)
- **Braintrust**: 1 file · [apps/web/utils/braintrust.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/braintrust.ts#L1)
- **Gmail**: 1 file · [apps/web/utils/gmail/client.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/gmail/client.ts#L1)
- **Perplexity**: 1 file · [apps/web/utils/ai/meeting-briefs/generate-briefing.ts, line 3](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/ai/meeting-briefs/generate-briefing.ts#L3)
- **[Stripe](https://seerepo.com/uses/stripe)**: 1 file · [apps/web/ee/billing/stripe/index.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/ee/billing/stripe/index.ts#L1)

## Support (apps/web)

### Content

- **[Cheerio](https://seerepo.com/uses/cheerio)**: 10 files
- **[nodemailer](https://seerepo.com/uses/nodemailer)**: 10 files
- **he**: 9 files
- **@react-email/render**: 4 files
- **[html-to-text](https://seerepo.com/uses/html-to-text)**: 4 files
- **[@tiptap/markdown](https://seerepo.com/uses/tiptap-markdown)**: 2 files
- **[fast-xml-parser](https://seerepo.com/uses/fast-xml-parser)**: 2 files
- **[streamdown](https://seerepo.com/uses/streamdown)**: 2 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **email-reply-parser**: 1 file
- **gmail-api-parse-message**: 1 file
- **ical.js**: 1 file
- **[mammoth](https://seerepo.com/uses/mammoth)**: 1 file
- **postal-mime**: 1 file
- **unpdf**: 1 file

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 276 files
- **next-safe-action**: 96 files
- **[@hookform/resolvers](https://seerepo.com/uses/hookform-resolvers)**: 34 files

### Testing

- **Vitest**: 1,079 files
- **@playwright/test**: 109 files
- **Testing Library**: 78 files
- **emulate**: 9 files
- **vitest-mock-extended**: 5 files
- **jsdom**: 1 file

### Deploy

- **next-axiom**: 3 files
- **serwist**: 2 files

### Tools

- **@microsoft/microsoft-graph-types**: 19 files
- **@slack/types**: 6 files
- **TypeScript**: 2 files
- **@asteasolutions/zod-to-openapi**: 1 file
- **esbuild**: 1 file
- **schema-dts**: 1 file
- **tsx**: 1 file

### Other

- **SWR**: 120 files
- **date-fns**: 57 files
- **Lodash**: 41 files
- **nuqs**: 27 files
- **server-only**: 25 files
- **jotai**: 14 files
- **@microsoft/microsoft-graph-client**: 11 files
- **chat-adapter**: 6 files
- **googleapis**: 6 files
- **@slack/web-api**: 4 files
- **clsx**: 4 files
- **p-retry**: 3 files
- **dub**: 2 files
- **p-queue**: 2 files
- **undici**: 2 files
- **@t3-oss/env-nextjs**: 1 file
- **chrono-node**: 1 file
- **cronstrue**: 1 file
- **jsonrepair**: 1 file
- **resumable-stream**: 1 file
- **serialize-error**: 1 file
- **stream-json**: 1 file
- **string-similarity**: 1 file
- **tldts**: 1 file

## Backend (apps/worker)

### Data

- **[bullmq](https://seerepo.com/uses/bullmq)**: 1 file
- **[Redis](https://seerepo.com/uses/redis)**: 1 file · [apps/web/utils/redis/index.ts, line 2](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/redis/index.ts#L2)

## Support (packages/api)

### Testing

- **Vitest**: 3 files

### Tools

- **commander**: 1 file

## Frontend (packages/cli)

### Interface

- **[@clack/prompts](https://seerepo.com/uses/clack-prompts)**: 8 files

## Support (packages/cli)

### Testing

- **Vitest**: 14 files

### Tools

- **commander**: 1 file

## Frontend (packages/email-editor)

### The base

- **[React](https://seerepo.com/uses/react)**: 5 files · [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)

### Interface

- **squire-rte**: 2 files

## Support (packages/email-editor)

### Content

- **[parse5](https://seerepo.com/uses/parse5)**: 2 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file

### Testing

- **Vitest**: 6 files
- **Testing Library**: 1 file

## Support (packages/image-proxy)

### Testing

- **Vitest**: 3 files

## Backend (packages/loops)

### Services

- **Loops**: 1 file · [packages/loops/src/loops.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/packages/loops/src/loops.ts#L1)

## Support (packages/loops)

### Testing

- **Vitest**: 1 file

## Support (packages/mail-core)

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 9 files

### Testing

- **Vitest**: 10 files

## Frontend (packages/mail-react)

### The base

- **[React](https://seerepo.com/uses/react)**: 6 files · [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)

## Support (packages/mail-sqlite)

### Testing

- **Vitest**: 25 files

## Frontend (packages/mail-ui)

### The base

- **[React](https://seerepo.com/uses/react)**: 9 files · [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)

## Support (packages/mail-ui)

### Content

- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **linkify-it**: 1 file

### Testing

- **Vitest**: 5 files

### Other

- **tlds**: 1 file

## Support (packages/network)

### Testing

- **Vitest**: 2 files

### Other

- **ipaddr.js**: 1 file

## Support (packages/scheduling)

### Testing

- **Vitest**: 1 file

### Other

- **date-fns**: 1 file

## Support (packages/tinybird-ai-analytics)

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 2 files

## Support (packages/tinybird)

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 2 files

### Testing

- **Vitest**: 1 file

### Other

- **p-retry**: 1 file

## Frontend (packages/transactional-email)

### The base

- **[React](https://seerepo.com/uses/react)**: 8 files · [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)

## Backend (packages/transactional-email)

### Services

- **[Resend](https://seerepo.com/uses/resend)**: 2 files · [packages/transactional-email/src/providers/resend.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/packages/transactional-email/src/providers/resend.ts#L1)

## Support (packages/transactional-email)

### Content

- **[react-email](https://seerepo.com/uses/react-email)**: 20 files

### Testing

- **Vitest**: 3 files

### Other

- **nanoid**: 1 file

## Other repos with a similar stack

- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): React, Sentry, Electron, SQLite, PostHog, MCP, OpenAI, Anthropic, Perplexity, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, React Hook Form, Radix UI, react-day-picker, motion, tiptap, react-hotkeys-hook, cmdk, TanStack, react-resizable-panels, Lucide, ai, ai-sdk, ollama-ai-provider-v2, OpenRouter, Cheerio, html-to-text, @tiptap/markdown, fast-xml-parser, streamdown, dompurify, @hookform/resolvers · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/elie222/inbox-zero)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): React, Sentry, Next.js, Vercel, PostHog, MCP, OpenAI, Braintrust, Stripe, Zod, Tailwind CSS, class-variance-authority, next-themes, React Hook Form, sonner, Radix UI, react-day-picker, motion, recharts, cmdk, react-resizable-panels, react-syntax-highlighter, use-stick-to-bottom, Lucide, ai, ai-sdk, Cheerio, streamdown, @hookform/resolvers · [Compare](https://seerepo.com/compare/elie222/inbox-zero/vs/supabase/supabase)
- [Significant-Gravitas/AutoGPT](https://seerepo.com/r/Significant-Gravitas/AutoGPT/built): React, Sentry, Next.js, Redis, Postgres, PostHog, OpenAI, Anthropic, Stripe, Zod, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, React Hook Form, sonner, Radix UI, react-day-picker, Framer, motion, recharts, cmdk, use-stick-to-bottom, Better Auth, jose, ai, streamdown, @hookform/resolvers · [Compare](https://seerepo.com/compare/elie222/inbox-zero/vs/Significant-Gravitas/AutoGPT)
- [cline/cline](https://seerepo.com/r/cline/cline/built): React, SQLite, PostHog, MCP, OpenAI, Anthropic, Zod, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, sonner, Radix UI, motion, react-textarea-autosize, recharts, cmdk, use-stick-to-bottom, Lucide, ai, ai-sdk, chat, Cheerio, streamdown, dompurify, mammoth, @clack/prompts · [Compare](https://seerepo.com/compare/cline/cline/vs/elie222/inbox-zero)
- [calcom/cal.diy](https://seerepo.com/r/calcom/cal.diy/built): React, Sentry, Next.js, Redis, Vercel, Postgres, PostHog, Stripe, Zod, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, React Hook Form, sonner, Radix UI, react-day-picker, Framer, cmdk, TanStack, Lucide, jose, nodemailer, dompurify, ical.js, @hookform/resolvers · [Compare](https://seerepo.com/compare/calcom/cal.diy/vs/elie222/inbox-zero)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): React, Sentry, Electron, Redis, Postgres, bullmq, MCP, OpenAI, Anthropic, Stripe, Zod, React Hook Form, Framer, tiptap, react-hotkeys-hook, react-textarea-autosize, jose, ai, ai-sdk, nodemailer, html-to-text, dompurify, @hookform/resolvers, react-email · [Compare](https://seerepo.com/compare/elie222/inbox-zero/vs/twentyhq/twenty)

## Frequently asked questions

### What language is inbox-zero written in?

inbox-zero is written in TypeScript, with 733,800 written lines.

### What framework does inbox-zero use?

inbox-zero is built with React, Electron, and Next.js.

The proof: [in apps/web/package.json](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/package.json)

### What database does inbox-zero use?

inbox-zero stores its data in Vercel and Postgres.

The proof: [apps/web/utils/queue/dispatch.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/utils/queue/dispatch.ts#L1)

### What does inbox-zero sign people in with?

inbox-zero signs people in with Better Auth and jose.

### What does inbox-zero take payments with?

inbox-zero takes payments with Stripe.

The proof: [apps/web/ee/billing/stripe/index.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/apps/web/ee/billing/stripe/index.ts#L1)

### Does inbox-zero use AI?

Yes. inbox-zero uses AI through ai, ai-sdk, chat, @posthog/ai, ollama-ai-provider-v2, OpenRouter, OpenAI, and Anthropic.

### What services does inbox-zero use?

inbox-zero sends email with Resend, measures its use with PostHog, watches its errors with Sentry, and uses Redis, @chat-adapter/state-ioredis, bullmq, SQLite, MCP, QStash, Apple, Braintrust, Gmail, Perplexity, and Loops.

The proof: [packages/transactional-email/src/providers/resend.ts, line 1](https://github.com/elie222/inbox-zero/blob/845ed686eb065901c942bcb3e9076dffb218c6a2/packages/transactional-email/src/providers/resend.ts#L1)

### Does inbox-zero have tests?

Yes. inbox-zero has 1,352 test files and is tested with Vitest, playwright, @playwright/test, Testing Library, emulate, vitest-mock-extended, and jsdom.

### Which repos have a stack like inbox-zero's?

The ones that share most of its stack: CherryHQ/cherry-studio, supabase/supabase, and Significant-Gravitas/AutoGPT.

## What is your repo built with?

Any public repo, with no account: https://seerepo.com/r/owner/repo/built, with the owner and name it has on GitHub.
