Source: https://seerepo.com/r/oblien/openship/built
Markdown source: https://seerepo.com/r/oblien/openship/built.md
Description: openship is a TypeScript repo built with Hono, React, Next.js, Electron, React Router, and 2 more.

# What is openship built with?

openship is a TypeScript repo built with Hono, React, Next.js, Electron, React Router, and 2 more. It stores its data in @electric-sql/pglite, idb-keyval, and aws-sdk, reaches it with Drizzle, signs people in with Better Auth and jose, takes payments with Stripe, connects to GitHub, makes its content with yaml, nodemailer, qrcode.react, streamdown, @react-email/components, and 6 more, validates its data with @sinclair/typebox, Zod, and @hookform/resolvers, is tested with Vitest and happy-dom, deploys with dockerode, @hono/node-server, github.com/sirupsen/logrus, and github.com/moby/moby/client, and uses Redis, Socket, Postgres, and bullmq. It has 1,188,172 written lines, with 2,046 test files.

Read on November 8, 2026, at commit ef893be.

Repository: https://github.com/oblien/openship

## Backend (apps/api)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 176 files · [in apps/api/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/api/package.json)

### Data

- **[@electric-sql/pglite](https://seerepo.com/uses/electric-sql-pglite)**: 5 files
- **[Redis](https://seerepo.com/uses/redis)**: 1 file · [packages/platform/src/engine/lib/redis.ts, line 2](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/platform/src/engine/lib/redis.ts#L2)

### Data access

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

### Sign-in

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

### Services

- **Socket**: 1 file · [apps/api/src/modules/chat-apps/transport/receivers.ts, line 40](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/api/src/modules/chat-apps/transport/receivers.ts#L40)

## Support (apps/api)

### Content

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

### Validation

- **@sinclair/typebox**: 18 files
- **[Zod](https://seerepo.com/uses/zod)**: 9 files

### Testing

- **Vitest**: 856 files

### Deploy

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

### Other

- **ws**: 3 files
- **@hono/node-ws**: 1 file
- **discord.js**: 1 file

## Frontend (apps/cli)

### Interface

- **[@clack/prompts](https://seerepo.com/uses/clack-prompts)**: 11 files
- **[ora](https://seerepo.com/uses/ora)**: 9 files

## Support (apps/cli)

### Content

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

### Validation

- **@sinclair/typebox**: 1 file

### Testing

- **Vitest**: 62 files

### Tools

- **commander**: 54 files
- **@bomb.sh/tab**: 1 file

### Other

- **chalk**: 22 files
- **open**: 4 files

## Frontend (apps/dashboard)

### The base

- **[React](https://seerepo.com/uses/react)**: 668 files · [in apps/dashboard/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/dashboard/package.json)
- **[Next.js](https://seerepo.com/uses/nextjs)**: 258 files · [in apps/dashboard/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/dashboard/package.json)

### Styles

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

### Interface

- **[xterm](https://seerepo.com/uses/xterm)**: 16 files
- **[xyflow](https://seerepo.com/uses/xyflow)**: 13 files
- **[recharts](https://seerepo.com/uses/recharts)**: 6 files
- **[@streamdown/code](https://seerepo.com/uses/streamdown-code)**: 1 file
- **[Chart.js](https://seerepo.com/uses/chartjs)**: 1 file
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 1 file
- **react-chartjs-2**: 1 file
- **[use-stick-to-bottom](https://seerepo.com/uses/use-stick-to-bottom)**: 1 file

### Icons

- **country-flag-icons**: 4 files

## Backend (apps/dashboard)

### Sign-in

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

## Support (apps/dashboard)

### Content

- **[yaml](https://seerepo.com/uses/yaml)**: 2 files
- **[qrcode.react](https://seerepo.com/uses/qrcodereact)**: 1 file
- **[streamdown](https://seerepo.com/uses/streamdown)**: 1 file

### Validation

- **@sinclair/typebox**: 9 files

### Testing

- **Vitest**: 379 files

### Other

- **@noble/hashes**: 3 files
- **server-only**: 3 files
- **clsx**: 1 file

## Support (apps/desktop)

### The base

- **[Electron](https://seerepo.com/uses/electron)**: 9 files

### Testing

- **Vitest**: 18 files

### Tools

- **esbuild**: 7 files

## Frontend (apps/email/client)

### The base

- **[React](https://seerepo.com/uses/react)**: 132 files · [in apps/dashboard/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/dashboard/package.json)
- **[React Router](https://seerepo.com/uses/react-router)**: 32 files · [in apps/email/client/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/email/client/package.json)

### Styles

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

### Interface

- **[sonner](https://seerepo.com/uses/sonner)**: 32 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 28 files
- **[tiptap](https://seerepo.com/uses/tiptap)**: 12 files
- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 10 files
- **[motion](https://seerepo.com/uses/motion)**: 9 files
- **[react-hotkeys-hook](https://seerepo.com/uses/react-hotkeys-hook)**: 5 files
- **[ProseMirror](https://seerepo.com/uses/prosemirror)**: 2 files
- **[tiptap-markdown](https://seerepo.com/uses/tiptap-markdown)**: 2 files
- **[cmdk](https://seerepo.com/uses/cmdk)**: 1 file
- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 1 file
- **[input-otp](https://seerepo.com/uses/input-otp)**: 1 file
- **prosemirror-model**: 1 file
- **[react-day-picker](https://seerepo.com/uses/react-day-picker)**: 1 file
- **[react-resizable-panels](https://seerepo.com/uses/react-resizable-panels)**: 1 file
- **[recharts](https://seerepo.com/uses/recharts)**: 1 file
- **[vaul](https://seerepo.com/uses/vaul)**: 1 file
- **[virtua](https://seerepo.com/uses/virtua)**: 1 file

### Icons

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

## Backend (apps/email/client)

### Data

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

## Support (apps/email/client)

### The base

- **@trpc/server**: 1 file

### Content

- **@react-email/components**: 3 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 2 files
- **email-addresses**: 1 file
- **[sanitize-html](https://seerepo.com/uses/sanitize-html)**: 1 file

### Validation

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

### Testing

- **happy-dom**: 5 files

### Tools

- **@react-router/dev**: 1 file

### Other

- **[TanStack](https://seerepo.com/uses/tanstack)**: 40 files
- **nuqs**: 21 files
- **jotai**: 18 files
- **date-fns**: 7 files
- **[tRPC](https://seerepo.com/uses/trpc)**: 5 files
- **superjson**: 4 files
- **jszip**: 2 files
- **clsx**: 1 file
- **color**: 1 file
- **date-fns-tz**: 1 file
- **dedent**: 1 file
- **isbot**: 1 file
- **lz-string**: 1 file
- **pluralize**: 1 file
- **remeda**: 1 file

## Backend (apps/email/server)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 8 files · [in apps/api/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/api/package.json)

### Data access

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

## Support (apps/email/server)

### The base

- **[tRPC](https://seerepo.com/uses/trpc)**: 3 files

### Content

- **imapflow**: 3 files
- **[sanitize-html](https://seerepo.com/uses/sanitize-html)**: 2 files
- **[Cheerio](https://seerepo.com/uses/cheerio)**: 1 file
- **mailparser**: 1 file
- **[nodemailer](https://seerepo.com/uses/nodemailer)**: 1 file

### Validation

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

### Tools

- **css-tree**: 1 file

### Other

- **nanoid**: 2 files
- **@hono/trpc-server**: 1 file
- **superjson**: 1 file

## Support (packages/actions-runner)

### Deploy

- **[github.com/sirupsen/logrus](https://seerepo.com/uses/githubcom-sirupsen-logrus)**: 2 files
- **[github.com/moby/moby/client](https://seerepo.com/uses/githubcom-moby-moby-client)**: 1 file

### Other

- **github.com/shirou/gopsutil/v4**: 3 files
- **containerd**: 1 file
- **github.com/moby/go-archive**: 1 file
- **github.com/moby/sys/user**: 1 file
- **golang.org/x/sys**: 1 file

## Backend (packages/adapters)

### Data

- **[aws-sdk](https://seerepo.com/uses/aws-sdk)**: 2 files
- **[Redis](https://seerepo.com/uses/redis)**: 1 file · [packages/platform/src/engine/lib/redis.ts, line 2](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/platform/src/engine/lib/redis.ts#L2)

## Support (packages/adapters)

### Content

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

### Testing

- **Vitest**: 293 files

### Deploy

- **[dockerode](https://seerepo.com/uses/dockerode)**: 18 files

### Tools

- **ignore**: 1 file

### Other

- **ssh2**: 3 files
- **@smithy/node-http-handler**: 1 file
- **acme-client**: 1 file
- **grpc**: 1 file
- **ipaddr.js**: 1 file
- **tar-fs**: 1 file
- **undici**: 1 file

## Support (packages/contracts)

### Validation

- **@sinclair/typebox**: 90 files

### Testing

- **Vitest**: 6 files

## Support (packages/core)

### Validation

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

### Testing

- **Vitest**: 115 files

### Other

- **SemVer**: 5 files

## Backend (packages/db-email)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 1 file · [packages/db/src/connection.ts, line 7](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/db/src/connection.ts#L7)

### Data access

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

## Backend (packages/db)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 3 files · [packages/db/src/connection.ts, line 7](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/db/src/connection.ts#L7)
- **[@electric-sql/pglite](https://seerepo.com/uses/electric-sql-pglite)**: 2 files

### Data access

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

## Support (packages/db)

### Testing

- **Vitest**: 101 files

## Support (packages/openship)

### Tools

- **tsup**: 1 file

### Other

- **ws**: 1 file

## Backend (packages/platform)

### Data

- **[Redis](https://seerepo.com/uses/redis)**: 3 files · [packages/platform/src/engine/lib/redis.ts, line 2](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/platform/src/engine/lib/redis.ts#L2)
- **[bullmq](https://seerepo.com/uses/bullmq)**: 1 file

### Data access

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

### Sign-in

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

### Services

- **[GitHub](https://seerepo.com/uses/github)**: 1 file · [packages/platform/src/engine/modules/github/github.local-auth.ts, line 35](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/platform/src/engine/modules/github/github.local-auth.ts#L35)
- **[Stripe](https://seerepo.com/uses/stripe)**: 1 file · [packages/platform/src/engine/lib/stripe-client.ts, line 31](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/platform/src/engine/lib/stripe-client.ts#L31)

## Support (packages/platform)

### Content

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

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 16 files
- **@sinclair/typebox**: 15 files

### Testing

- **Vitest**: 77 files

### Tools

- **actions**: 1 file

### Other

- **cron-parser**: 5 files
- **tar**: 3 files
- **ssh2**: 2 files
- **maxmind**: 1 file

## Support (packages/sdk)

### Validation

- **@sinclair/typebox**: 1 file

### Testing

- **Vitest**: 27 files

### Other

- **ws**: 1 file

## Frontend (packages/ui)

### The base

- **[React](https://seerepo.com/uses/react)**: 7 files · [in apps/dashboard/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/dashboard/package.json)

### Styles

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

## Support (packages/ui)

### Other

- **clsx**: 1 file

## Other repos with a similar stack

- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): React, Electron, Drizzle, yaml, Zod, Tailwind CSS, class-variance-authority, PostCSS, tailwind-merge, xyflow, Radix UI, qrcode.react, streamdown, tiptap, React Hook Form, motion, react-hotkeys-hook, cmdk, dnd-kit, react-day-picker, react-resizable-panels, vaul, virtua, Lucide, dompurify, @hookform/resolvers, Cheerio · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/oblien/openship)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Hono, React, React Router, bullmq, Stripe, jose, nodemailer, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, xyflow, recharts, Radix UI, country-flag-icons, sonner, tiptap, React Hook Form, cmdk, dnd-kit, react-day-picker, Lucide, dompurify, sanitize-html, @hookform/resolvers, Cheerio · [Compare](https://seerepo.com/compare/oblien/openship/vs/TryGhost/Ghost)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): React, Next.js, React Router, Stripe, Zod, Tailwind CSS, class-variance-authority, xyflow, recharts, Radix UI, use-stick-to-bottom, streamdown, next-themes, sonner, React Hook Form, motion, cmdk, dnd-kit, input-otp, react-day-picker, react-resizable-panels, vaul, Lucide, @hookform/resolvers, Cheerio · [Compare](https://seerepo.com/compare/oblien/openship/vs/supabase/supabase)
- [QuantumNous/new-api](https://seerepo.com/r/QuantumNous/new-api/built): Redis, React, Electron, Postgres, Stripe, yaml, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, xyflow, recharts, use-stick-to-bottom, qrcode.react, sonner, React Hook Form, motion, cmdk, input-otp, react-day-picker, react-resizable-panels, vaul, Lucide, dompurify, @hookform/resolvers · [Compare](https://seerepo.com/compare/oblien/openship/vs/QuantumNous/new-api)
- [THU-MAIC/OpenMAIC](https://seerepo.com/r/THU-MAIC/OpenMAIC/built): Hono, @electric-sql/pglite, React, Next.js, Postgres, Zod, @hono/node-server, Tailwind CSS, class-variance-authority, PostCSS, tailwind-merge, xterm, xyflow, Radix UI, use-stick-to-bottom, streamdown, next-themes, sonner, motion, ProseMirror, cmdk, react-resizable-panels, Lucide, sanitize-html · [Compare](https://seerepo.com/compare/oblien/openship/vs/THU-MAIC/OpenMAIC)
- [Significant-Gravitas/AutoGPT](https://seerepo.com/r/Significant-Gravitas/AutoGPT/built): Redis, React, Next.js, Postgres, Stripe, Better Auth, jose, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, recharts, Radix UI, use-stick-to-bottom, streamdown, next-themes, sonner, React Hook Form, motion, cmdk, react-day-picker, vaul, @hookform/resolvers · [Compare](https://seerepo.com/compare/oblien/openship/vs/Significant-Gravitas/AutoGPT)

## Frequently asked questions

### What language is openship written in?

openship is written in TypeScript, with 1,188,172 written lines.

### What framework does openship use?

openship is built with Hono, React, Next.js, Electron, React Router, @trpc/server, and tRPC.

The proof: [in apps/api/package.json](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/apps/api/package.json)

### What database does openship use?

openship stores its data in @electric-sql/pglite, idb-keyval, and aws-sdk and reaches it with Drizzle.

### What does openship sign people in with?

openship signs people in with Better Auth and jose.

### What does openship take payments with?

openship takes payments with Stripe.

The proof: [packages/platform/src/engine/lib/stripe-client.ts, line 31](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/platform/src/engine/lib/stripe-client.ts#L31)

### What services does openship use?

openship connects to GitHub and uses Redis, Socket, Postgres, and bullmq.

The proof: [packages/platform/src/engine/modules/github/github.local-auth.ts, line 35](https://github.com/oblien/openship/blob/ef893be5da2afa84cfa50a4cfc7fd683eaf28074/packages/platform/src/engine/modules/github/github.local-auth.ts#L35)

### Does openship have tests?

Yes. openship has 2,046 test files and is tested with Vitest and happy-dom.

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

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