Source: https://seerepo.com/r/ClickHouse/ClickStack/built
Markdown source: https://seerepo.com/r/ClickHouse/ClickStack/built.md
Description: ClickStack is a TypeScript repo built with Express, React, and Next.js. It stores its data in MongoDB. It has 560,607 written lines, with 698 test files.

# What is ClickStack built with?

ClickStack is a TypeScript repo built with Express, React, and Next.js. It stores its data in MongoDB, signs people in with express-session, Passport, and passport-local, uses AI through ai and @ai-sdk/otel, makes its content with handlebars, @braintree/sanitize-url, react-markdown, remark-gfm, and papaparse, validates its data with Zod and @hookform/resolvers, is tested with supertest, Ajv, Testing Library, @playwright/test, msw, and 1 more, deploys with opentelemetry, pino, and pino-http, and uses sqlstring, connect-mongo, MCP, store2, ClickHouse, and 2 more. It has 560,607 written lines, with 698 test files.

Read on November 14, 2026, at commit 0096a35.

Repository: https://github.com/ClickHouse/ClickStack

## Frontend (packages/api)

### Interface

- **[swagger-ui-express](https://seerepo.com/uses/swagger-ui-express)**: 1 file

## Backend (packages/api)

### The base

- **[Express](https://seerepo.com/uses/express)**: 38 files · [in packages/api/package.json](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/api/package.json)

### Data

- **[MongoDB](https://seerepo.com/uses/mongodb)**: 45 files · [packages/api/src/utils/zod.ts, line 44](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/api/src/utils/zod.ts#L44)
- **sqlstring**: 2 files
- **connect-mongo**: 1 file

### Sign-in

- **[express-session](https://seerepo.com/uses/express-session)**: 1 file
- **[Passport](https://seerepo.com/uses/passport)**: 1 file
- **[passport-local](https://seerepo.com/uses/passport-local)**: 1 file

### AI

- **[ai](https://seerepo.com/uses/ai)**: 3 files
- **@ai-sdk/otel**: 1 file

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 4 files · [packages/api/src/mcp/mcpServer.ts, line 1](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/api/src/mcp/mcpServer.ts#L1)

## Support (packages/api)

### Content

- **[handlebars](https://seerepo.com/uses/handlebars)**: 3 files
- **[@braintree/sanitize-url](https://seerepo.com/uses/braintree-sanitize-url)**: 1 file

### Validation

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

### Testing

- **supertest**: 17 files
- **[Ajv](https://seerepo.com/uses/ajv)**: 1 file

### Deploy

- **opentelemetry**: 1 file
- **[pino](https://seerepo.com/uses/pino)**: 1 file
- **[pino-http](https://seerepo.com/uses/pino-http)**: 1 file

### Tools

- **swagger-jsdoc**: 1 file

### Other

- **Lodash**: 25 files
- **[OpenTelemetry](https://seerepo.com/uses/opentelemetry)**: 16 files
- **serialize-error**: 13 files
- **ms**: 10 files
- **uuid**: 5 files
- **@slack/webhook**: 1 file
- **chrono-node**: 1 file
- **compression**: 1 file
- **cors**: 1 file
- **cron**: 1 file
- **date-fns**: 1 file
- **express-rate-limit**: 1 file
- **http-graceful-shutdown**: 1 file
- **http-proxy-middleware**: 1 file
- **ip-address**: 1 file
- **minimist**: 1 file
- **on-headers**: 1 file
- **protobufjs**: 1 file
- **undici**: 1 file

## Frontend (packages/app)

### The base

- **[React](https://seerepo.com/uses/react)**: 361 files · [in packages/app/package.json](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/app/package.json)
- **[Next.js](https://seerepo.com/uses/nextjs)**: 64 files · [in packages/app/package.json](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/app/package.json)

### Styles

- **[classnames](https://seerepo.com/uses/classnames)**: 37 files

### Interface

- **[Mantine](https://seerepo.com/uses/mantine)**: 362 files
- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 93 files
- **tanstack**: 22 files
- **[react-error-boundary](https://seerepo.com/uses/react-error-boundary)**: 14 files
- **[react-hotkeys-hook](https://seerepo.com/uses/react-hotkeys-hook)**: 10 files
- **[recharts](https://seerepo.com/uses/recharts)**: 10 files
- **[@uiw/react-codemirror](https://seerepo.com/uses/uiw-react-codemirror)**: 9 files
- **[CodeMirror](https://seerepo.com/uses/codemirror)**: 8 files
- **[uplot](https://seerepo.com/uses/uplot)**: 8 files
- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 6 files
- **[xyflow](https://seerepo.com/uses/xyflow)**: 4 files
- **[react-copy-to-clipboard](https://seerepo.com/uses/react-copy-to-clipboard)**: 3 files
- **[react-grid-layout](https://seerepo.com/uses/react-grid-layout)**: 2 files
- **[@dagrejs/dagre](https://seerepo.com/uses/dagrejs-dagre)**: 1 file
- **react-json-tree**: 1 file
- **[react-resizable](https://seerepo.com/uses/react-resizable)**: 1 file
- **uplot-react**: 1 file

### Icons

- **[@tabler/icons-react](https://seerepo.com/uses/tabler-icons-react)**: 199 files

## Backend (packages/app)

### Data

- **sqlstring**: 25 files
- **store2**: 2 files

## Support (packages/app)

### Content

- **[react-markdown](https://seerepo.com/uses/react-markdown)**: 5 files
- **[remark-gfm](https://seerepo.com/uses/remark-gfm)**: 2 files
- **[papaparse](https://seerepo.com/uses/papaparse)**: 1 file

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 19 files
- **[@hookform/resolvers](https://seerepo.com/uses/hookform-resolvers)**: 7 files

### Testing

- **Testing Library**: 222 files
- **@playwright/test**: 49 files
- **msw**: 1 file

### Tools

- **@tanstack/react-query-devtools**: 1 file
- **sql-formatter**: 1 file

### Other

- **[TanStack](https://seerepo.com/uses/tanstack)**: 48 files
- **nuqs**: 37 files
- **Lodash**: 36 files
- **date-fns**: 21 files
- **Immer**: 8 files
- **jotai**: 5 files
- **ky**: 5 files
- **object-hash**: 4 files
- **ms**: 3 files
- **flat**: 2 files
- **next-runtime-env**: 2 files
- **next-seo**: 2 files
- **strip-ansi**: 2 files
- **timestamp-nano**: 2 files
- **@ungap/structured-clone**: 1 file
- **chrono-node**: 1 file
- **crypto-js**: 1 file
- **dayjs**: 1 file
- **fuse.js**: 1 file
- **http-proxy-middleware**: 1 file
- **ky-universal**: 1 file
- **numbro**: 1 file
- **[OpenTelemetry](https://seerepo.com/uses/opentelemetry)**: 1 file

## Frontend (packages/cli)

### The base

- **[React](https://seerepo.com/uses/react)**: 24 files · [in packages/app/package.json](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/app/package.json)

### Interface

- **[ink](https://seerepo.com/uses/ink)**: 19 files
- **ink-spinner**: 11 files
- **ink-text-input**: 4 files

## Backend (packages/cli)

### Data

- **sqlstring**: 2 files
- **[ClickHouse](https://seerepo.com/uses/clickhouse)**: 1 file

## Support (packages/cli)

### Testing

- **Jest**: 9 files

### Tools

- **commander**: 1 file
- **glob**: 1 file

### Other

- **chalk**: 5 files
- **crypto-js**: 1 file
- **numbro**: 1 file

## Backend (packages/common-utils)

### Data

- **sqlstring**: 4 files
- **@clickhouse/client**: 2 files
- **[ClickHouse](https://seerepo.com/uses/clickhouse)**: 2 files · [packages/common-utils/src/clickhouse/browser.ts, line 7](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/common-utils/src/clickhouse/browser.ts#L7)

## Support (packages/common-utils)

### Content

- **[handlebars](https://seerepo.com/uses/handlebars)**: 1 file

### Validation

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

### Tools

- **sql-formatter**: 1 file

### Other

- **Lodash**: 4 files
- **node-sql-parser**: 3 files
- **date-fns**: 2 files
- **object-hash**: 2 files
- **date-fns-tz**: 1 file

## Backend (packages/otel-collector)

### Data

- **[ClickHouse](https://seerepo.com/uses/clickhouse)**: 1 file
- **github.com/pressly/goose/v3**: 1 file

## Other repos with a similar stack

- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): MCP, React, ClickHouse, express-session, Passport, ai, Zod, opentelemetry, React Hook Form, react-error-boundary, react-hotkeys-hook, xyflow, react-grid-layout, @dagrejs/dagre, @tabler/icons-react, react-markdown, remark-gfm, papaparse, @hookform/resolvers · [Compare](https://seerepo.com/compare/ClickHouse/ClickStack/vs/twentyhq/twenty)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): MCP, React, Next.js, ai, Zod, React Hook Form, tanstack, react-error-boundary, recharts, dnd-kit, xyflow, react-grid-layout, @dagrejs/dagre, react-resizable, react-markdown, remark-gfm, papaparse, @hookform/resolvers · [Compare](https://seerepo.com/compare/ClickHouse/ClickStack/vs/supabase/supabase)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): MCP, React, ai, Zod, opentelemetry, React Hook Form, react-error-boundary, react-hotkeys-hook, @uiw/react-codemirror, CodeMirror, dnd-kit, xyflow, @dagrejs/dagre, remark-gfm, @hookform/resolvers · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/ClickHouse/ClickStack)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Express, React, express-session, handlebars, Zod, React Hook Form, react-error-boundary, recharts, @uiw/react-codemirror, CodeMirror, dnd-kit, xyflow, papaparse, @hookform/resolvers · [Compare](https://seerepo.com/compare/ClickHouse/ClickStack/vs/TryGhost/Ghost)
- [infiniflow/ragflow](https://seerepo.com/r/infiniflow/ragflow/built): MCP, React, Zod, classnames, React Hook Form, tanstack, recharts, xyflow, react-copy-to-clipboard, react-markdown, remark-gfm, papaparse, @hookform/resolvers · [Compare](https://seerepo.com/compare/ClickHouse/ClickStack/vs/infiniflow/ragflow)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): Express, MCP, React, ai, Zod, opentelemetry, pino, pino-http, CodeMirror, dnd-kit, react-markdown, remark-gfm · [Compare](https://seerepo.com/compare/ClickHouse/ClickStack/vs/paperclipai/paperclip)

## Frequently asked questions

### What language is ClickStack written in?

ClickStack is written in TypeScript, with 560,607 written lines.

### What framework does ClickStack use?

ClickStack is built with Express, React, and Next.js.

The proof: [in packages/api/package.json](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/api/package.json)

### What database does ClickStack use?

ClickStack stores its data in MongoDB.

The proof: [packages/api/src/utils/zod.ts, line 44](https://github.com/ClickHouse/ClickStack/blob/0096a355c0f6fba3e691d2e8efe83228bc35751b/packages/api/src/utils/zod.ts#L44)

### What does ClickStack sign people in with?

ClickStack signs people in with express-session, Passport, and passport-local.

### Does ClickStack use AI?

Yes. ClickStack uses AI through ai and @ai-sdk/otel.

### What services does ClickStack use?

ClickStack uses sqlstring, connect-mongo, MCP, store2, ClickHouse, @clickhouse/client, and github.com/pressly/goose/v3.

### Does ClickStack have tests?

Yes. ClickStack has 698 test files and is tested with supertest, Ajv, Testing Library, @playwright/test, msw, and Jest.

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

The ones that share most of its stack: twentyhq/twenty, supabase/supabase, and CherryHQ/cherry-studio.

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