Source: https://seerepo.com/r/umami-software/umami/built
Markdown source: https://seerepo.com/r/umami-software/umami/built.md
Description: umami is a TypeScript repo built with React and Next.js. It stores its data in Postgres and signs people in with bcryptjs, jsonwebtoken, and otplib.

# What is umami built with?

umami is a TypeScript repo built with React and Next.js. It stores its data in Postgres, signs people in with bcryptjs, jsonwebtoken, and otplib, makes its content with papaparse and qrcode, validates its data with Zod and zod-openapi, is tested with Vitest, Testing Library, @playwright/test, and msw, and uses ClickHouse, Redis, Kafka, and MCP. It has 105,879 written lines, with 187 test files.

Read on November 6, 2026, at commit 559e3c6.

Repository: https://github.com/umami-software/umami

## Frontend (/)

### The base

- **[React](https://seerepo.com/uses/react)**: 242 files · [in package.json](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/package.json)
- **[Next.js](https://seerepo.com/uses/nextjs)**: 83 files · [in package.json](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/package.json)

### Interface

- **[motion](https://seerepo.com/uses/motion)**: 4 files
- **[Chart.js](https://seerepo.com/uses/chartjs)**: 2 files
- **[react-resizable-panels](https://seerepo.com/uses/react-resizable-panels)**: 2 files
- **[react-window](https://seerepo.com/uses/react-window)**: 2 files
- **@dicebear/core**: 1 file
- **chartjs-adapter-date-fns**: 1 file
- **[react-error-boundary](https://seerepo.com/uses/react-error-boundary)**: 1 file
- **react-simple-maps**: 1 file

### Icons

- **[Lucide](https://seerepo.com/uses/lucide)**: 12 files
- **DiceBear**: 1 file

## Backend (/)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 2 files · [src/lib/prisma.ts, line 1](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/src/lib/prisma.ts#L1)
- **[ClickHouse](https://seerepo.com/uses/clickhouse)**: 1 file
- **[Redis](https://seerepo.com/uses/redis)**: 1 file · [src/lib/redis.ts, line 2](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/src/lib/redis.ts#L2)

### Sign-in

- **[bcryptjs](https://seerepo.com/uses/bcryptjs)**: 2 files
- **[jsonwebtoken](https://seerepo.com/uses/jsonwebtoken)**: 1 file
- **otplib**: 1 file

### Services

- **[Kafka](https://seerepo.com/uses/kafka)**: 1 file · [src/lib/kafka.ts, line 3](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/src/lib/kafka.ts#L3)

## Support (/)

### Content

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

### Validation

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

### Testing

- **Vitest**: 120 files
- **Testing Library**: 14 files
- **@playwright/test**: 13 files
- **msw**: 2 files

### Tools

- **TypeScript**: 2 files

### Other

- **date-fns**: 28 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 28 files
- **date-fns-tz**: 8 files
- **colord**: 7 files
- **zustand**: 7 files
- **debug**: 6 files
- **uuid**: 5 files
- **Immer**: 4 files
- **thenby**: 4 files
- **next-intl**: 3 files
- **serialize-error**: 3 files
- **.ENV**: 2 files
- **ipaddr.js**: 2 files
- **isbot**: 2 files
- **chalk**: 1 file
- **detect-browser**: 1 file
- **is-localhost-ip**: 1 file
- **jszip**: 1 file
- **maxmind**: 1 file
- **punycode**: 1 file
- **SemVer**: 1 file
- **ua-parser-js**: 1 file

## Support (packages/api-client)

### Testing

- **Vitest**: 2 files

## Backend (packages/mcp)

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 4 files · [packages/mcp/src/http.ts, line 6](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/packages/mcp/src/http.ts#L6)

## Support (packages/mcp)

### Validation

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

### Testing

- **Vitest**: 2 files

## Other repos with a similar stack

- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): React, Postgres, ClickHouse, Redis, MCP, react-error-boundary, jsonwebtoken, otplib, papaparse, Zod · [Compare](https://seerepo.com/compare/twentyhq/twenty/vs/umami-software/umami)
- [LibreChat-AI/LibreChat](https://seerepo.com/r/LibreChat-AI/LibreChat/built): React, Redis, MCP, react-resizable-panels, Lucide, DiceBear, bcryptjs, jsonwebtoken, Zod, zod-openapi · [Compare](https://seerepo.com/compare/LibreChat-AI/LibreChat/vs/umami-software/umami)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): React, Next.js, MCP, motion, react-resizable-panels, react-error-boundary, Lucide, papaparse, Zod · [Compare](https://seerepo.com/compare/supabase/supabase/vs/umami-software/umami)
- [infiniflow/ragflow](https://seerepo.com/r/infiniflow/ragflow/built): React, Postgres, Redis, MCP, react-resizable-panels, Lucide, papaparse, qrcode, Zod · [Compare](https://seerepo.com/compare/infiniflow/ragflow/vs/umami-software/umami)
- [nocodb/nocodb](https://seerepo.com/r/nocodb/nocodb/built): React, Postgres, Redis, MCP, bcryptjs, jsonwebtoken, papaparse, qrcode, Zod · [Compare](https://seerepo.com/compare/nocodb/nocodb/vs/umami-software/umami)
- [BerriAI/litellm](https://seerepo.com/r/BerriAI/litellm/built): React, Next.js, Postgres, Redis, react-resizable-panels, Lucide, jsonwebtoken, papaparse, Zod · [Compare](https://seerepo.com/compare/BerriAI/litellm/vs/umami-software/umami)

## Frequently asked questions

### What language is umami written in?

umami is written in TypeScript, with 105,879 written lines.

### What framework does umami use?

umami is built with React and Next.js.

The proof: [in package.json](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/package.json)

### What database does umami use?

umami stores its data in Postgres.

The proof: [src/lib/prisma.ts, line 1](https://github.com/umami-software/umami/blob/559e3c607c23d2c72d9bd4f6481bda428255323c/src/lib/prisma.ts#L1)

### What does umami sign people in with?

umami signs people in with bcryptjs, jsonwebtoken, and otplib.

### What services does umami use?

umami uses ClickHouse, Redis, Kafka, and MCP.

### Does umami have tests?

Yes. umami has 187 test files and is tested with Vitest, Testing Library, @playwright/test, and msw.

### Which repos have a stack like umami's?

The ones that share most of its stack: twentyhq/twenty, LibreChat-AI/LibreChat, and supabase/supabase.

## 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.
