Source: https://seerepo.com/r/TabbyML/tabby/built
Markdown source: https://seerepo.com/r/TabbyML/tabby/built.md
Description: tabby is a Rust repo built with axum, tower, Streamlit, Tokio, axum-extra, and 2 more. It stores its data in sqlx, cached, and lru-cache.

# What is tabby built with?

tabby is a Rust repo built with axum, tower, Streamlit, Tokio, axum-extra, and 2 more. It stores its data in sqlx, cached, and lru-cache, signs people in with jsonwebtoken, argon2, openidconnect, jwt-decode, and @urql/exchange-auth, uses AI through text-splitter, ollama-rs, OpenAI, and @orama/orama, measures its use with PostHog, connects to GitHub, makes its content with jsonlines, htmd, lettre, toml, react-email, and 14 more, validates its data with validator, Zod, and @hookform/resolvers, is tested with insta, deep-equal, Chai, Vitest, and Mocha, deploys with tracing, OpenTelemetry, opentelemetry_sdk, opentelemetry-otlp, tracing-opentelemetry, and 2 more, and uses sqlx-sqlite and SQLite. It has 146,843 written lines, with 35 test files.

Read on November 7, 2026, at commit 21b2904.

Repository: https://github.com/TabbyML/tabby

## Frontend (/)

### Interface

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

## Backend (/)

### The base

- **[axum](https://seerepo.com/uses/axum)**: 27 files
- **[tower](https://seerepo.com/uses/tower)**: 1 file

### Data

- **sqlx-sqlite**
- **[sqlx](https://seerepo.com/uses/sqlx)**: 26 files
- **cached**: 5 files
- **[SQLite](https://seerepo.com/uses/sqlite)**: 1 file · [crates/sqlx-migrate-validate/Cargo.toml, line 11](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/crates/sqlx-migrate-validate/Cargo.toml#L11)

### Sign-in

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

### AI

- **text-splitter**: 4 files
- **ollama-rs**: 3 files

### Services

- **[OpenAI](https://seerepo.com/uses/openai)**: 10 files · [crates/http-api-bindings/src/chat/mod.rs, line 3](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/crates/http-api-bindings/src/chat/mod.rs#L3)
- **[GitHub](https://seerepo.com/uses/github)**: 3 files · [ee/tabby-webserver/src/service/background_job/third_party_integration/error.rs, line 1](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/ee/tabby-webserver/src/service/background_job/third_party_integration/error.rs#L1)

## Support (/)

### The base

- **[Streamlit](https://seerepo.com/uses/streamlit)**
- **[Tokio](https://seerepo.com/uses/tokio)**: 77 files
- **axum-extra**: 6 files

### Content

- **jsonlines**
- **htmd**: 1 file
- **lettre**: 1 file

### Validation

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

### Testing

- **insta**: 2 files

### Deploy

- **[tracing](https://seerepo.com/uses/tracing)**: 59 files
- **[OpenTelemetry](https://seerepo.com/uses/opentelemetry)**: 1 file
- **opentelemetry_sdk**: 1 file
- **[opentelemetry-otlp](https://seerepo.com/uses/opentelemetry-otlp)**: 1 file
- **[tracing-opentelemetry](https://seerepo.com/uses/tracing-opentelemetry)**: 1 file
- **[tracing-subscriber](https://seerepo.com/uses/tracing-subscriber)**: 1 file

### Tools

- **utoipa**: 14 files
- **clap**: 7 files
- **quote**: 1 file
- **rust-embed**: 1 file
- **syn**: 1 file
- **tree-sitter-c**: 1 file
- **tree-sitter-c-sharp**: 1 file
- **tree-sitter-cpp**: 1 file
- **tree-sitter-elixir**: 1 file
- **tree-sitter-go**: 1 file
- **tree-sitter-java**: 1 file
- **tree-sitter-lua**: 1 file
- **tree-sitter-python**: 1 file
- **tree-sitter-ruby**: 1 file
- **tree-sitter-rust**: 1 file
- **tree-sitter-scala**: 1 file
- **tree-sitter-solidity**: 1 file
- **tree-sitter-typescript**: 1 file

### Other

- **attrs**
- **httpx**
- **octocrab**
- **openssl**
- **python-dateutil**
- **requests**
- **anyhow**: 108 files
- **async-trait**: 82 files
- **chrono**: 61 files
- **serde**: 52 files
- **futures**: 50 files
- **async-stream**: 33 files
- **serde_json**: 30 files
- **reqwest**: 19 files
- **lazy_static**: 15 files
- **tantivy**: 14 files
- **uuid**: 8 files
- **git2**: 7 files
- **Hyper**: 7 files
- **strum**: 7 files
- **thiserror**: 6 files
- **derive_builder**: 5 files
- **regex**: 5 files
- **url**: 5 files
- **grep**: 3 files
- **ignore**: 3 files
- **reqwest-eventsource**: 3 files
- **tower-http**: 3 files
- **urlencoding**: 3 files
- **base64**: 2 files
- **cron**: 2 files
- **home**: 2 files
- **humantime**: 2 files
- **mime_guess**: 2 files
- **tokio-tungstenite**: 2 files
- **bincode**: 1 file
- **color-eyre**: 1 file
- **dashmap**: 1 file
- **dotenvy**: 1 file
- **fs_extra**: 1 file
- **futures-util**: 1 file
- **nucleo**: 1 file
- **nvml-wrapper**: 1 file
- **percent-encoding**: 1 file
- **pin-project**: 1 file
- **ratelimit**: 1 file
- **secrecy**: 1 file
- **sha2**: 1 file
- **sysinfo**: 1 file
- **tokio-util**: 1 file
- **trie-rs**: 1 file
- **which**: 1 file
- **zustand**: 1 file

## Support (clients/intellij)

### Tools

- **org.eclipse.lsp4j:org.eclipse.lsp4j**: 20 files

### Other

- **io.github.z4kn4fein:semver**: 1 file

## Backend (clients/tabby-agent)

### Data

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

### AI

- **@orama/orama**: 1 file

## Support (clients/tabby-agent)

### Content

- **toml**: 1 file

### Testing

- **deep-equal**: 9 files
- **Chai**: 3 files

### Deploy

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

### Tools

- **vscode-languageserver**: 30 files
- **vscode-languageserver-textdocument**: 12 files
- **vscode-languageserver-protocol**: 6 files
- **chokidar**: 2 files
- **glob**: 1 file

### Other

- **fs-extra**: 6 files
- **readable-stream**: 3 files
- **deepmerge-ts**: 2 files
- **openapi-fetch**: 2 files
- **uri-js**: 2 files
- **uuid**: 2 files
- **dedent**: 1 file
- **diff**: 1 file
- **eventsource-parser**: 1 file
- **fast-levenshtein**: 1 file
- **js-levenshtein**: 1 file
- **mac-ca**: 1 file
- **object-hash**: 1 file
- **SemVer**: 1 file
- **undici**: 1 file
- **web-tree-sitter**: 1 file
- **win-ca**: 1 file

## Frontend (clients/tabby-chat-panel)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file · [in ee/tabby-ui/package.json](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/ee/tabby-ui/package.json)

## Support (clients/tabby-chat-panel)

### Testing

- **Vitest**: 1 file

### Other

- **SemVer**: 1 file

## Support (clients/vscode)

### Testing

- **Chai**: 1 file
- **Mocha**: 1 file

### Tools

- **vscode-languageclient**: 23 files

### Other

- **SemVer**: 2 files
- **debounce**: 1 file
- **dedent**: 1 file
- **diff**: 1 file
- **fs-extra**: 1 file
- **uuid**: 1 file

## Frontend (ee/tabby-email)

### The base

- **[React](https://seerepo.com/uses/react)**: 5 files · [in ee/tabby-ui/package.json](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/ee/tabby-ui/package.json)

## Support (ee/tabby-email)

### Content

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

## Frontend (ee/tabby-ui)

### The base

- **[React](https://seerepo.com/uses/react)**: 228 files · [in ee/tabby-ui/package.json](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/ee/tabby-ui/package.json)
- **[Next.js](https://seerepo.com/uses/nextjs)**: 91 files · [in ee/tabby-ui/package.json](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/ee/tabby-ui/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)**: 5 files
- **[@codemirror/theme-one-dark](https://seerepo.com/uses/codemirror-theme-one-dark)**: 1 file
- **[tailwind-merge](https://seerepo.com/uses/tailwind-merge)**: 1 file

### Interface

- **[sonner](https://seerepo.com/uses/sonner)**: 33 files
- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 32 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 26 files
- **[CodeMirror](https://seerepo.com/uses/codemirror)**: 16 files
- **[tiptap](https://seerepo.com/uses/tiptap)**: 14 files
- **[Framer](https://seerepo.com/uses/framer)**: 9 files
- **[react-day-picker](https://seerepo.com/uses/react-day-picker)**: 6 files
- **@uidotdev/usehooks**: 4 files
- **[react-resizable-panels](https://seerepo.com/uses/react-resizable-panels)**: 4 files
- **[react-textarea-autosize](https://seerepo.com/uses/react-textarea-autosize)**: 4 files
- **react-intersection-observer**: 3 files
- **[recharts](https://seerepo.com/uses/recharts)**: 3 files
- **downshift**: 2 files
- **react-activity-calendar**: 2 files
- **react-json-view**: 2 files
- **[tippy.js](https://seerepo.com/uses/tippyjs)**: 2 files
- **@uiw/codemirror-extensions-langs**: 1 file
- **cm6-graphql**: 1 file
- **[cmdk](https://seerepo.com/uses/cmdk)**: 1 file
- **embla-carousel-autoplay**: 1 file
- **[embla-carousel-react](https://seerepo.com/uses/embla-carousel-react)**: 1 file
- **[react-error-boundary](https://seerepo.com/uses/react-error-boundary)**: 1 file
- **react-lazy-load**: 1 file
- **[react-syntax-highlighter](https://seerepo.com/uses/react-syntax-highlighter)**: 1 file
- **react-topbar-progress-indicator**: 1 file

### Icons

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

## Backend (ee/tabby-ui)

### Sign-in

- **[jwt-decode](https://seerepo.com/uses/jwt-decode)**: 3 files
- **@urql/exchange-auth**: 1 file

### Services

- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [ee/tabby-ui/lib/posthog.tsx, line 5](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/ee/tabby-ui/lib/posthog.tsx#L5)

## Support (ee/tabby-ui)

### Content

- **[dompurify](https://seerepo.com/uses/dompurify)**: 3 files
- **he**: 3 files
- **[marked](https://seerepo.com/uses/marked)**: 3 files
- **mdast**: 3 files
- **[react-markdown](https://seerepo.com/uses/react-markdown)**: 3 files
- **[remark-gfm](https://seerepo.com/uses/remark-gfm)**: 3 files
- **[remark-math](https://seerepo.com/uses/remark-math)**: 3 files
- **[rehype-raw](https://seerepo.com/uses/rehype-raw)**: 2 files
- **[rehype-sanitize](https://seerepo.com/uses/rehype-sanitize)**: 2 files
- **[remark-stringify](https://seerepo.com/uses/remark-stringify)**: 2 files
- **[unified](https://seerepo.com/uses/unified)**: 2 files
- **hast**: 1 file
- **[remark](https://seerepo.com/uses/remark)**: 1 file
- **[unist-util-visit](https://seerepo.com/uses/unist-util-visit)**: 1 file

### Validation

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

### Testing

- **Vitest**: 5 files

### Tools

- **@graphql-codegen/cli**: 1 file
- **@graphql-typed-document-node/core**: 1 file

### Other

- **Lodash**: 63 files
- **urql**: 53 files
- **moment**: 16 files
- **SWR**: 15 files
- **GraphQL**: 7 files
- **zustand**: 7 files
- **@sindresorhus/slugify**: 4 files
- **numeral**: 4 files
- **humanize-duration**: 3 files
- **date-fns**: 2 files
- **fuzzysort**: 2 files
- **nanoid**: 2 files
- **pretty-bytes**: 2 files
- **clsx**: 1 file
- **color**: 1 file
- **compare-versions**: 1 file
- **copy-to-clipboard**: 1 file
- **git-url-parse**: 1 file
- **graphql-ws**: 1 file
- **mitt**: 1 file
- **moment-timezone**: 1 file
- **seedrandom**: 1 file
- **wonka**: 1 file

## Other repos with a similar stack

- [BerriAI/litellm](https://seerepo.com/r/BerriAI/litellm/built): axum, tower, sqlx, SQLite, OpenAI, Tokio, React, Next.js, jsonwebtoken, tracing, tracing-subscriber, Tailwind CSS, class-variance-authority, next-themes, sonner, React Hook Form, react-resizable-panels, recharts, cmdk, react-syntax-highlighter, Lucide, jwt-decode, react-markdown, remark-gfm, Zod, @hookform/resolvers · [Compare](https://seerepo.com/compare/BerriAI/litellm/vs/TabbyML/tabby)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): OpenAI, React, Next.js, PostHog, Tailwind CSS, class-variance-authority, next-themes, sonner, React Hook Form, Radix UI, react-day-picker, @uidotdev/usehooks, react-resizable-panels, recharts, cmdk, react-error-boundary, react-syntax-highlighter, Lucide, react-markdown, remark-gfm, unified, remark, unist-util-visit, Zod, @hookform/resolvers · [Compare](https://seerepo.com/compare/supabase/supabase/vs/TabbyML/tabby)
- [infiniflow/ragflow](https://seerepo.com/r/infiniflow/ragflow/built): OpenAI, React, OpenTelemetry, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, sonner, React Hook Form, Radix UI, react-day-picker, react-resizable-panels, recharts, cmdk, embla-carousel-react, react-syntax-highlighter, Lucide, dompurify, react-markdown, remark-gfm, remark-math, rehype-raw, rehype-sanitize, Zod, @hookform/resolvers · [Compare](https://seerepo.com/compare/infiniflow/ragflow/vs/TabbyML/tabby)
- [cline/cline](https://seerepo.com/r/cline/cline/built): SQLite, OpenAI, React, PostHog, pino, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, sonner, Radix UI, react-textarea-autosize, recharts, cmdk, embla-carousel-react, Lucide, jwt-decode, dompurify, marked, react-markdown, remark-gfm, remark-stringify, unified, unist-util-visit, Zod · [Compare](https://seerepo.com/compare/cline/cline/vs/TabbyML/tabby)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): SQLite, OpenAI, lru-cache, React, Tailwind CSS, class-variance-authority, tailwind-merge, React Hook Form, Radix UI, CodeMirror, tiptap, react-day-picker, react-resizable-panels, cmdk, react-error-boundary, Lucide, dompurify, remark-gfm, remark-math, remark-stringify, unified, unist-util-visit, Zod, @hookform/resolvers · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/TabbyML/tabby)
- [multica-ai/multica](https://seerepo.com/r/multica-ai/multica/built): OpenAI, React, Next.js, PostHog, Tailwind CSS, class-variance-authority, next-themes, tailwind-merge, sonner, tiptap, react-day-picker, react-resizable-panels, recharts, cmdk, marked, react-markdown, remark-gfm, remark-math, rehype-raw, rehype-sanitize, unist-util-visit, Zod · [Compare](https://seerepo.com/compare/multica-ai/multica/vs/TabbyML/tabby)

## Frequently asked questions

### What language is tabby written in?

tabby is written in Rust, with 146,843 written lines.

### What framework does tabby use?

tabby is built with axum, tower, Streamlit, Tokio, axum-extra, React, and Next.js.

### What database does tabby use?

tabby stores its data in sqlx, cached, and lru-cache.

### What does tabby sign people in with?

tabby signs people in with jsonwebtoken, argon2, openidconnect, jwt-decode, and @urql/exchange-auth.

### Does tabby use AI?

Yes. tabby uses AI through text-splitter, ollama-rs, OpenAI, and @orama/orama.

### What services does tabby use?

tabby measures its use with PostHog, connects to GitHub, and uses sqlx-sqlite and SQLite.

The proof: [ee/tabby-ui/lib/posthog.tsx, line 5](https://github.com/TabbyML/tabby/blob/21b29048d7bcf6b94f9f482f2d0fd05efadfd19f/ee/tabby-ui/lib/posthog.tsx#L5)

### Does tabby have tests?

Yes. tabby has 35 test files and is tested with insta, deep-equal, Chai, Vitest, and Mocha.

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

The ones that share most of its stack: BerriAI/litellm, supabase/supabase, and infiniflow/ragflow.

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