Source: https://seerepo.com/r/tambo-ai/tambo/built
Markdown source: https://seerepo.com/r/tambo-ai/tambo/built.md
Description: tambo is a TypeScript repo built with NestJS, React, Next.js, tRPC, and Vite. It stores its data in Postgres and reaches it with Drizzle.

# What is tambo built with?

tambo is a TypeScript repo built with NestJS, React, Next.js, tRPC, and Vite. It stores its data in Postgres, reaches it with Drizzle, signs people in with jose, helmet, and next-auth, sends email with Resend, stores files in AWS S3, uses AI through ag-ui, @ai-sdk/provider, OpenAI, js-tiktoken, ai-sdk, and 6 more, measures its use with PostHog, watches its errors with Sentry, makes its content with @vercel/og, highlight.js, react-markdown, rehype-raw, js-yaml, and 4 more, validates its data with class-validator, class-transformer, Zod, json-schema, @hookform/resolvers, and 4 more, is tested with @nestjs/testing, supertest, Testing Library, and memfs, deploys with OpenTelemetry, and uses MCP and @aws-sdk/s3-request-presigner. It has 223,355 written lines, with 274 test files.

Read on November 12, 2026, at commit 6e2c1bf.

Repository: https://github.com/tambo-ai/tambo

## Backend (apps/api)

### The base

- **[NestJS](https://seerepo.com/uses/nestjs)**: 88 files · [in apps/api/package.json](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/api/package.json)

### Data access

- **[Drizzle](https://seerepo.com/uses/drizzle)**: 6 files

### Sign-in

- **[jose](https://seerepo.com/uses/jose)**: 4 files
- **[helmet](https://seerepo.com/uses/helmet)**: 1 file

### AI

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

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 11 files · [apps/api/src/common/filters/sentry-exception.filter.ts, line 9](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/api/src/common/filters/sentry-exception.filter.ts#L9)
- **[MCP](https://seerepo.com/uses/mcp)**: 6 files · [packages/client/src/mcp/mcp-client.ts, line 1](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/client/src/mcp/mcp-client.ts#L1)
- **[OpenAI](https://seerepo.com/uses/openai)**: 3 files · [packages/backend/src/services/llm/llm-client.ts, line 5](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/backend/src/services/llm/llm-client.ts#L5)
- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 1 file · [apps/api/src/threads/util/attachment-fetcher.ts, line 2](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/api/src/threads/util/attachment-fetcher.ts#L2)
- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [apps/web/components/analytics/posthog-identify.tsx, line 5](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/components/analytics/posthog-identify.tsx#L5)

## Support (apps/api)

### Validation

- **[class-validator](https://seerepo.com/uses/class-validator)**: 20 files
- **[class-transformer](https://seerepo.com/uses/class-transformer)**: 8 files
- **[Zod](https://seerepo.com/uses/zod)**: 3 files
- **[json-schema](https://seerepo.com/uses/json-schema)**: 2 files

### Testing

- **@nestjs/testing**: 16 files
- **supertest**: 4 files

### Deploy

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

### Tools

- **ts-essentials**: 1 file

### Other

- **@nestjs/throttler**: 3 files
- **mime-types**: 3 files
- **fast-json-patch**: 1 file
- **nanoid**: 1 file
- **react-fast-compare**: 1 file
- **uuid**: 1 file

## Frontend (apps/web)

### The base

- **[React](https://seerepo.com/uses/react)**: 156 files · [in apps/web/package.json](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/package.json)
- **[Next.js](https://seerepo.com/uses/nextjs)**: 62 files · [in apps/web/package.json](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/package.json)

### Styles

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

### Interface

- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 21 files
- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 4 files
- **[cmdk](https://seerepo.com/uses/cmdk)**: 1 file
- **[embla-carousel-react](https://seerepo.com/uses/embla-carousel-react)**: 1 file
- **react-medium-image-zoom**: 1 file
- **react-speech-recognition**: 1 file
- **[recharts](https://seerepo.com/uses/recharts)**: 1 file
- **[usehooks-ts](https://seerepo.com/uses/usehooks-ts)**: 1 file
- **[vaul](https://seerepo.com/uses/vaul)**: 1 file

### Icons

- **[Lucide](https://seerepo.com/uses/lucide)**: 82 files
- **[@radix-ui/react-icons](https://seerepo.com/uses/radix-ui-react-icons)**: 2 files
- **[react-icons](https://seerepo.com/uses/react-icons)**: 2 files

## Backend (apps/web)

### Data access

- **[Drizzle](https://seerepo.com/uses/drizzle)**: 8 files

### Sign-in

- **[next-auth](https://seerepo.com/uses/next-auth)**: 19 files
- **[jose](https://seerepo.com/uses/jose)**: 2 files

### AI

- **[js-tiktoken](https://seerepo.com/uses/js-tiktoken)**: 2 files

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 8 files · [apps/api/src/common/filters/sentry-exception.filter.ts, line 9](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/api/src/common/filters/sentry-exception.filter.ts#L9)
- **[Resend](https://seerepo.com/uses/resend)**: 5 files · [apps/web/lib/auth.ts, line 19](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/lib/auth.ts#L19)
- **[PostHog](https://seerepo.com/uses/posthog)**: 4 files · [apps/web/components/analytics/posthog-identify.tsx, line 5](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/components/analytics/posthog-identify.tsx#L5)
- **[MCP](https://seerepo.com/uses/mcp)**: 2 files · [packages/client/src/mcp/mcp-client.ts, line 1](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/client/src/mcp/mcp-client.ts#L1)

## Support (apps/web)

### The base

- **tRPC**: 8 files

### Content

- **@vercel/og**: 2 files
- **[highlight.js](https://seerepo.com/uses/highlightjs)**: 2 files
- **[react-markdown](https://seerepo.com/uses/react-markdown)**: 1 file
- **[rehype-raw](https://seerepo.com/uses/rehype-raw)**: 1 file

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 49 files
- **[@hookform/resolvers](https://seerepo.com/uses/hookform-resolvers)**: 3 files
- **[json-schema](https://seerepo.com/uses/json-schema)**: 1 file

### Testing

- **Testing Library**: 25 files

### Other

- **[trpc](https://seerepo.com/uses/trpc)**: 4 files
- **[Vercel](https://seerepo.com/uses/vercel)**: 4 files
- **clsx**: 3 files
- **superjson**: 3 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 3 files
- **use-debounce**: 2 files
- **@t3-oss/env-nextjs**: 1 file
- **date-fns**: 1 file
- **tldts**: 1 file

## Frontend (cli)

### Styles

- **[PostCSS](https://seerepo.com/uses/postcss)**: 4 files
- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**: 2 files
- **[tailwind-merge](https://seerepo.com/uses/tailwind-merge)**: 1 file

### Interface

- **[ora](https://seerepo.com/uses/ora)**: 12 files

## Backend (cli)

### Services

- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [apps/web/components/analytics/posthog-identify.tsx, line 5](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/components/analytics/posthog-identify.tsx#L5)

## Support (cli)

### Content

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

### Testing

- **memfs**: 13 files

### Tools

- **cli-table3**: 3 files
- **[Inquirer](https://seerepo.com/uses/inquirer)**: 3 files
- **ts-morph**: 3 files
- **meow**: 1 file

### Other

- **chalk**: 24 files
- **SemVer**: 4 files
- **.ENV**: 2 files
- **clipboardy**: 2 files
- **cross-spawn**: 2 files
- **open**: 2 files
- **clsx**: 1 file
- **date-fns**: 1 file
- **deepmerge**: 1 file
- **diff**: 1 file
- **env-paths**: 1 file
- **fast-equals**: 1 file
- **superjson**: 1 file
- **tRPC**: 1 file

## Support (create-tambo-app)

### Other

- **cross-spawn**: 1 file

## Backend (packages/backend)

### Data

- **[@aws-sdk/s3-request-presigner](https://seerepo.com/uses/aws-sdk-s3-request-presigner)**: 1 file

### AI

- **ag-ui**: 7 files
- **[ai-sdk](https://seerepo.com/uses/ai-sdk)**: 4 files
- **[ai](https://seerepo.com/uses/ai)**: 3 files
- **partial-json**: 3 files
- **@mastra/client-js**: 1 file
- **gpt-tokenizer**: 1 file

### Services

- **[OpenAI](https://seerepo.com/uses/openai)**: 11 files · [packages/backend/src/services/llm/llm-client.ts, line 5](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/backend/src/services/llm/llm-client.ts#L5)
- **[Anthropic](https://seerepo.com/uses/anthropic)**: 1 file · [packages/backend/src/services/skills/provider-skill-client.ts, line 5](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/backend/src/services/skills/provider-skill-client.ts#L5)
- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 1 file · [apps/api/src/threads/util/attachment-fetcher.ts, line 2](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/api/src/threads/util/attachment-fetcher.ts#L2)

## Support (packages/backend)

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 6 files
- **[zod-to-json-schema](https://seerepo.com/uses/zod-to-json-schema)**: 3 files
- **[json-schema](https://seerepo.com/uses/json-schema)**: 2 files
- **[Ajv](https://seerepo.com/uses/ajv)**: 1 file

### Other

- **fast-json-patch**: 2 files
- **mime-types**: 1 file
- **nanoid**: 1 file

## Backend (packages/client)

### AI

- **@ag-ui/core**: 6 files
- **partial-json**: 2 files

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 1 file · [packages/client/src/mcp/mcp-client.ts, line 1](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/client/src/mcp/mcp-client.ts#L1)

## Support (packages/client)

### Validation

- **[json-schema](https://seerepo.com/uses/json-schema)**: 9 files
- **[@standard-schema/spec](https://seerepo.com/uses/standard-schema-spec)**: 2 files
- **[Zod](https://seerepo.com/uses/zod)**: 2 files
- **@standard-community/standard-json**: 1 file
- **[zod-to-json-schema](https://seerepo.com/uses/zod-to-json-schema)**: 1 file

### Other

- **fast-json-patch**: 2 files

## Backend (packages/core)

### Sign-in

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

### AI

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

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 3 files · [packages/client/src/mcp/mcp-client.ts, line 1](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/client/src/mcp/mcp-client.ts#L1)
- **[OpenAI](https://seerepo.com/uses/openai)**: 1 file · [packages/backend/src/services/llm/llm-client.ts, line 5](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/backend/src/services/llm/llm-client.ts#L5)

## Support (packages/core)

### Content

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

### Validation

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

### Testing

- **[zod-to-json-schema](https://seerepo.com/uses/zod-to-json-schema)**: 1 file

### Other

- **ipaddr.js**: 1 file
- **undici**: 1 file

## Backend (packages/db)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 2 files · [packages/db/src/index.ts, line 2](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/db/src/index.ts#L2)

### Data access

- **[Drizzle](https://seerepo.com/uses/drizzle)**: 15 files

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 1 file · [packages/client/src/mcp/mcp-client.ts, line 1](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/client/src/mcp/mcp-client.ts#L1)

## Support (packages/db)

### Other

- **superjson**: 1 file

## Frontend (packages/react-ui-base)

### The base

- **[React](https://seerepo.com/uses/react)**: 77 files · [in apps/web/package.json](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/package.json)

### Interface

- **[Base UI](https://seerepo.com/uses/base-ui)**: 66 files

## Support (packages/react-ui-base)

### Testing

- **Testing Library**: 11 files

## Frontend (packages/ui-registry)

### The base

- **[React](https://seerepo.com/uses/react)**: 26 files · [in apps/web/package.json](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/package.json)

### Styles

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

### Interface

- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 8 files
- **[tiptap](https://seerepo.com/uses/tiptap)**: 2 files
- **[Leaflet](https://seerepo.com/uses/leaflet)**: 1 file
- **leaflet.markercluster**: 1 file
- **react-leaflet**: 1 file
- **[recharts](https://seerepo.com/uses/recharts)**: 1 file

### Icons

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

## Support (packages/ui-registry)

### Content

- **[streamdown](https://seerepo.com/uses/streamdown)**: 2 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **[highlight.js](https://seerepo.com/uses/highlightjs)**: 1 file
- **rehype-harden**: 1 file
- **[rehype-raw](https://seerepo.com/uses/rehype-raw)**: 1 file
- **[unified](https://seerepo.com/uses/unified)**: 1 file

### Validation

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

### Testing

- **Testing Library**: 10 files

### Tools

- **diffable-html**: 1 file

### Other

- **clsx**: 1 file

## Frontend (packages/vite-config)

### The base

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

## Support (packages/vite-config)

### Tools

- **rollup-plugin-preserve-directives**: 1 file
- **TypeScript**: 1 file
- **unplugin-dts**: 1 file
- **vite-tsconfig-paths**: 1 file

## Frontend (react-sdk)

### The base

- **[React](https://seerepo.com/uses/react)**: 30 files · [in apps/web/package.json](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/package.json)

### Interface

- **react-media-recorder**: 1 file

## Backend (react-sdk)

### AI

- **@ag-ui/core**: 2 files
- **partial-json**: 1 file

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 1 file · [packages/client/src/mcp/mcp-client.ts, line 1](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/client/src/mcp/mcp-client.ts#L1)

## Support (react-sdk)

### Validation

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

### Testing

- **Testing Library**: 35 files

### Tools

- **type-fest**: 1 file

### Other

- **[TanStack](https://seerepo.com/uses/tanstack)**: 9 files
- **fast-equals**: 2 files
- **fast-json-patch**: 1 file
- **use-debounce**: 1 file

## Other repos with a similar stack

- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): Sentry, MCP, OpenAI, PostHog, React, Anthropic, Vite, Drizzle, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, Radix UI, React Hook Form, cmdk, vaul, Lucide, @hookform/resolvers, PostCSS, ai-sdk, ai, partial-json, gpt-tokenizer, tiptap, streamdown, dompurify, unified · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/tambo-ai/tambo)
- [Significant-Gravitas/AutoGPT](https://seerepo.com/r/Significant-Gravitas/AutoGPT/built): Sentry, OpenAI, PostHog, React, Next.js, Anthropic, Postgres, jose, Zod, Tailwind CSS, class-variance-authority, next-themes, geist, tailwind-merge, Radix UI, React Hook Form, cmdk, embla-carousel-react, recharts, vaul, highlight.js, react-markdown, @hookform/resolvers, PostCSS, ai, streamdown · [Compare](https://seerepo.com/compare/Significant-Gravitas/AutoGPT/vs/tambo-ai/tambo)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): Sentry, MCP, OpenAI, PostHog, React, Next.js, Vite, Zod, Tailwind CSS, class-variance-authority, next-themes, Radix UI, React Hook Form, cmdk, react-medium-image-zoom, recharts, vaul, Lucide, react-markdown, @hookform/resolvers, js-yaml, ai-sdk, ai, streamdown, unified · [Compare](https://seerepo.com/compare/supabase/supabase/vs/tambo-ai/tambo)
- [cline/cline](https://seerepo.com/r/cline/cline/built): MCP, OpenAI, PostHog, React, Anthropic, Vite, Zod, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, Radix UI, cmdk, embla-carousel-react, recharts, Lucide, react-markdown, js-yaml, ai-sdk, ai, Base UI, streamdown, dompurify, unified · [Compare](https://seerepo.com/compare/cline/cline/vs/tambo-ai/tambo)
- [calcom/cal.diy](https://seerepo.com/r/calcom/cal.diy/built): NestJS, Sentry, PostHog, React, Next.js, tRPC, Postgres, jose, helmet, class-validator, class-transformer, Zod, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, Radix UI, React Hook Form, cmdk, Lucide, next-auth, @hookform/resolvers, Base UI, dompurify · [Compare](https://seerepo.com/compare/calcom/cal.diy/vs/tambo-ai/tambo)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): NestJS, Sentry, MCP, OpenAI, AWS S3, React, Anthropic, Postgres, Vite, jose, class-validator, class-transformer, Zod, json-schema, React Hook Form, react-markdown, @hookform/resolvers, PostCSS, ai-sdk, ai, Base UI, tiptap, dompurify · [Compare](https://seerepo.com/compare/tambo-ai/tambo/vs/twentyhq/twenty)

## Frequently asked questions

### What language is tambo written in?

tambo is written in TypeScript, with 223,355 written lines.

### What framework does tambo use?

tambo is built with NestJS, React, Next.js, tRPC, and Vite.

The proof: [in apps/api/package.json](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/api/package.json)

### What database does tambo use?

tambo stores its data in Postgres and reaches it with Drizzle.

The proof: [packages/db/src/index.ts, line 2](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/packages/db/src/index.ts#L2)

### What does tambo sign people in with?

tambo signs people in with jose, helmet, and next-auth.

### Does tambo use AI?

Yes. tambo uses AI through ag-ui, @ai-sdk/provider, OpenAI, js-tiktoken, ai-sdk, ai, partial-json, @mastra/client-js, gpt-tokenizer, Anthropic, and @ag-ui/core.

### What services does tambo use?

tambo sends email with Resend, stores files in AWS S3, measures its use with PostHog, watches its errors with Sentry, and uses MCP and @aws-sdk/s3-request-presigner.

The proof: [apps/web/lib/auth.ts, line 19](https://github.com/tambo-ai/tambo/blob/6e2c1bff3b68a00c094b6d876788cc8f33f7bb02/apps/web/lib/auth.ts#L19)

### Does tambo have tests?

Yes. tambo has 274 test files and is tested with @nestjs/testing, supertest, Testing Library, and memfs.

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

The ones that share most of its stack: CherryHQ/cherry-studio, Significant-Gravitas/AutoGPT, 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.
