Source: https://seerepo.com/r/usekaneo/kaneo/built
Markdown source: https://seerepo.com/r/usekaneo/kaneo/built.md
Description: kaneo is a TypeScript repo built with Hono, @hono/zod-openapi, Vite, react-native, React, and 2 more. It stores its data in Postgres.

# What is kaneo built with?

kaneo is a TypeScript repo built with Hono, @hono/zod-openapi, Vite, react-native, React, and 2 more. It stores its data in Postgres, signs people in with bcryptjs, stores files in AWS S3, watches its errors with Sentry, makes its content with expo-image-manipulator, expo-image-picker, react-native-markdown-display, shiki, dompurify, and 6 more, validates its data with Zod and @hookform/resolvers, is tested with Drizzle, @hono/node-server, Better Auth, playwright, valibot, and 2 more, and uses @aws-sdk/s3-request-presigner, Redis, MCP, @react-native-async-storage/async-storage, and expo-secure-store. It has 432,743 written lines, with 1,092 test files.

Read on November 14, 2026, at commit 70a9d79.

Repository: https://github.com/usekaneo/kaneo

## Backend (/)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 20 files · [in apps/api/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/package.json)

## Support (/)

### Testing

- **[Drizzle](https://seerepo.com/uses/drizzle)**: 154 files
- **[@hono/node-server](https://seerepo.com/uses/hono-node-server)**: 4 files
- **[Better Auth](https://seerepo.com/uses/better-auth)**: 2 files
- **playwright**: 1 file
- **[valibot](https://seerepo.com/uses/valibot)**: 1 file

### Tools

- **vite-plus**: 350 files

## Backend (apps/api)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 193 files · [in apps/api/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/package.json)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 3 files · [apps/api/src/database/index.ts, line 3](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/database/index.ts#L3)
- **[@aws-sdk/s3-request-presigner](https://seerepo.com/uses/aws-sdk-s3-request-presigner)**: 1 file
- **[Redis](https://seerepo.com/uses/redis)**: 1 file · [apps/api/src/redis/index.ts, line 1](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/redis/index.ts#L1)

### Data access

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

### Sign-in

- **[Better Auth](https://seerepo.com/uses/better-auth)**: 25 files
- **[bcryptjs](https://seerepo.com/uses/bcryptjs)**: 1 file

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 11 files · [apps/api/src/plugins/github/utils/github-app.ts, line 1](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/plugins/github/utils/github-app.ts#L1)
- **[MCP](https://seerepo.com/uses/mcp)**: 3 files · [apps/api/src/mcp/index.ts, line 1](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/mcp/index.ts#L1)
- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 1 file · [apps/api/src/storage/head-uploaded-object.ts, line 5](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/storage/head-uploaded-object.ts#L5)

## Support (apps/api)

### The base

- **@hono/zod-openapi**: 4 files

### Validation

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

### Deploy

- **[@hono/node-server](https://seerepo.com/uses/hono-node-server)**: 2 files

### Tools

- **vite-plus**: 66 files

### Other

- **@paralleldrive/cuid2**: 12 files
- **@hono/node-ws**: 1 file
- **croner**: 1 file
- **date-fns**: 1 file
- **undici**: 1 file

## Frontend (apps/mobile)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/web/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/web/package.json)
- **[react-native](https://seerepo.com/uses/react-native)**: 51 files
- **[React](https://seerepo.com/uses/react)**: 49 files · [in apps/web/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/web/package.json)
- **[Expo](https://seerepo.com/uses/expo)**: 24 files · [in apps/mobile/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/mobile/package.json)

### Interface

- **[react-native-safe-area-context](https://seerepo.com/uses/react-native-safe-area-context)**: 4 files
- **[react-native-svg](https://seerepo.com/uses/react-native-svg)**: 4 files
- **[expo-image](https://seerepo.com/uses/expo-image)**: 2 files
- **[expo-splash-screen](https://seerepo.com/uses/expo-splash-screen)**: 1 file
- **[expo-status-bar](https://seerepo.com/uses/expo-status-bar)**: 1 file
- **[react-native-gesture-handler](https://seerepo.com/uses/react-native-gesture-handler)**: 1 file
- **[tiptap](https://seerepo.com/uses/tiptap)**: 1 file

### Icons

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

## Backend (apps/mobile)

### Data

- **[@react-native-async-storage/async-storage](https://seerepo.com/uses/react-native-async-storage-async-storage)**: 2 files
- **[expo-secure-store](https://seerepo.com/uses/expo-secure-store)**: 1 file

## Support (apps/mobile)

### Content

- **[expo-image-manipulator](https://seerepo.com/uses/expo-image-manipulator)**: 1 file
- **[expo-image-picker](https://seerepo.com/uses/expo-image-picker)**: 1 file
- **react-native-markdown-display**: 1 file

### Tools

- **vite-plus**: 13 files

### Other

- **react-i18next**: 40 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 25 files
- **expo-background-task**: 5 files
- **expo-web-browser**: 3 files
- **expo-clipboard**: 2 files
- **i18next**: 1 file
- **intl-pluralrules**: 1 file
- **react-native-purchases**: 1 file

## Frontend (apps/web)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/web/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/web/package.json)
- **[React](https://seerepo.com/uses/react)**: 445 files · [in apps/web/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/web/package.json)
- **tanstack**: 150 files

### 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)**: 2 files

### Interface

- **[Base UI](https://seerepo.com/uses/base-ui)**: 55 files
- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 24 files
- **[tiptap](https://seerepo.com/uses/tiptap)**: 17 files
- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 16 files
- **[motion](https://seerepo.com/uses/motion)**: 13 files
- **[react-day-picker](https://seerepo.com/uses/react-day-picker)**: 3 files
- **[input-otp](https://seerepo.com/uses/input-otp)**: 2 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 2 files
- **[@tanstack/react-virtual](https://seerepo.com/uses/tanstack-react-virtual)**: 1 file
- **[Mermaid](https://seerepo.com/uses/mermaid)**: 1 file
- **[sonner](https://seerepo.com/uses/sonner)**: 1 file
- **[tippy.js](https://seerepo.com/uses/tippyjs)**: 1 file

### Icons

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

## Backend (apps/web)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 55 files · [in apps/api/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/package.json)

### Sign-in

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

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 5 files · [apps/api/src/plugins/github/utils/github-app.ts, line 1](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/plugins/github/utils/github-app.ts#L1)

## Support (apps/web)

### Content

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

### Validation

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

### Testing

- **Testing Library**: 179 files
- **[@tiptap/markdown](https://seerepo.com/uses/tiptap-markdown)**: 2 files

### Tools

- **vite-plus**: 377 files

### Other

- **react-i18next**: 558 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 266 files
- **date-fns**: 29 files
- **i18next**: 12 files
- **zustand**: 9 files
- **Immer**: 7 files
- **clsx**: 2 files
- **file-saver**: 1 file
- **i18next-resources-to-backend**: 1 file

## Support (packages/cli)

### Content

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

### Tools

- **vite-plus**: 179 files

### Other

- **Effect**: 236 files

## Frontend (packages/editor)

### Interface

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

## Support (packages/editor)

### Content

- **[@tiptap/markdown](https://seerepo.com/uses/tiptap-markdown)**: 1 file

### Tools

- **vite-plus**: 3 files

## Frontend (packages/email)

### The base

- **[React](https://seerepo.com/uses/react)**: 30 files · [in apps/web/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/web/package.json)

## Support (packages/email)

### Content

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

### Tools

- **vite-plus**: 14 files

## Support (packages/importers)

### Content

- **[turndown](https://seerepo.com/uses/turndown)**: 3 files
- **[turndown-plugin-gfm](https://seerepo.com/uses/turndown-plugin-gfm)**: 2 files

### Tools

- **vite-plus**: 36 files

## Backend (packages/libs)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 1 file · [in apps/api/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/package.json)

## Support (packages/libs)

### Tools

- **vite-plus**: 1 file

## Frontend (packages/mcp)

### Interface

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

## Backend (packages/mcp)

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 2 files · [apps/api/src/mcp/index.ts, line 1](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/mcp/index.ts#L1)

## Support (packages/mcp)

### Validation

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

### Tools

- **vite-plus**: 9 files

### Other

- **open**: 1 file

## Backend (packages/permissions)

### Sign-in

- **[Better Auth](https://seerepo.com/uses/better-auth)**: 1 file

## Support (packages/permissions)

### Tools

- **vite-plus**: 3 files

## Frontend (packages/planka-import)

### Interface

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

## Support (packages/planka-import)

### Tools

- **vite-plus**: 4 files

## Other repos with a similar stack

- [multica-ai/multica](https://seerepo.com/r/multica-ai/multica/built): Postgres, Redis, react-native, React, Expo, expo-secure-store, Zod, react-native-safe-area-context, react-native-svg, expo-image, expo-status-bar, react-native-gesture-handler, tiptap, expo-image-picker, Tailwind CSS, class-variance-authority, tailwind-merge, Base UI, dnd-kit, motion, react-day-picker, input-otp, Mermaid, sonner, shiki, @tiptap/markdown · [Compare](https://seerepo.com/compare/multica-ai/multica/vs/usekaneo/kaneo)
- [reactive-resume/reactive-resume](https://seerepo.com/r/reactive-resume/reactive-resume/built): Hono, Postgres, Redis, MCP, react-native, React, Expo, expo-secure-store, Drizzle, Better Auth, bcryptjs, Zod, @hono/node-server, react-native-safe-area-context, react-native-svg, expo-status-bar, react-native-gesture-handler, tiptap, expo-image-picker, Tailwind CSS, class-variance-authority, Base UI, dnd-kit, motion, react-email, nodemailer · [Compare](https://seerepo.com/compare/reactive-resume/reactive-resume/vs/usekaneo/kaneo)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): Sentry, MCP, Vite, React, Drizzle, Zod, tiptap, Lucide, Tailwind CSS, class-variance-authority, tailwind-merge, React Hook Form, dnd-kit, motion, react-day-picker, Radix UI, @tanstack/react-virtual, dompurify, @hookform/resolvers, @tiptap/markdown, turndown · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/usekaneo/kaneo)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Hono, Sentry, Vite, React, Better Auth, Zod, tiptap, Lucide, Tailwind CSS, class-variance-authority, tailwind-merge, React Hook Form, dnd-kit, react-day-picker, Radix UI, @tanstack/react-virtual, sonner, dompurify, @hookform/resolvers, nodemailer · [Compare](https://seerepo.com/compare/TryGhost/Ghost/vs/usekaneo/kaneo)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): Sentry, MCP, Vite, React, tanstack, Zod, Lucide, Tailwind CSS, class-variance-authority, React Hook Form, dnd-kit, motion, react-day-picker, input-otp, Radix UI, Mermaid, sonner, shiki, @hookform/resolvers · [Compare](https://seerepo.com/compare/supabase/supabase/vs/usekaneo/kaneo)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): Postgres, Sentry, MCP, AWS S3, Vite, React, Drizzle, Better Auth, Zod, Lucide, Tailwind CSS, class-variance-authority, tailwind-merge, Base UI, dnd-kit, motion, Radix UI, Mermaid, dompurify · [Compare](https://seerepo.com/compare/paperclipai/paperclip/vs/usekaneo/kaneo)

## Frequently asked questions

### What language is kaneo written in?

kaneo is written in TypeScript, with 432,743 written lines.

### What framework does kaneo use?

kaneo is built with Hono, @hono/zod-openapi, Vite, react-native, React, Expo, and tanstack.

The proof: [in apps/api/package.json](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/package.json)

### What database does kaneo use?

kaneo stores its data in Postgres.

The proof: [apps/api/src/database/index.ts, line 3](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/database/index.ts#L3)

### What does kaneo sign people in with?

kaneo signs people in with bcryptjs.

### What services does kaneo use?

kaneo stores files in AWS S3, watches its errors with Sentry, and uses @aws-sdk/s3-request-presigner, Redis, MCP, @react-native-async-storage/async-storage, and expo-secure-store.

The proof: [apps/api/src/storage/head-uploaded-object.ts, line 5](https://github.com/usekaneo/kaneo/blob/70a9d79b5e9ad25b6e45d15d52a8aeae7383d0bf/apps/api/src/storage/head-uploaded-object.ts#L5)

### Does kaneo have tests?

Yes. kaneo has 1,092 test files and is tested with Drizzle, @hono/node-server, Better Auth, playwright, valibot, Testing Library, and @tiptap/markdown.

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

The ones that share most of its stack: multica-ai/multica, reactive-resume/reactive-resume, 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.
