Source: https://seerepo.com/r/rowboatlabs/rowboat/built
Markdown source: https://seerepo.com/r/rowboatlabs/rowboat/built.md
Description: rowboat is a TypeScript repo built with Hono, Electron, react-native, React, Expo, and 2 more.

# What is rowboat built with?

rowboat is a TypeScript repo built with Hono, Electron, react-native, React, Expo, and 2 more. It stores its data in @react-native-async-storage/async-storage and expo-secure-store, signs people in with jose and openid-client, uses AI through ai, tokenlens, @agentclientprotocol/sdk, ai-sdk, OpenRouter, and 3 more, measures its use with PostHog, connects to Google, makes its content with html-to-docx, expo-document-picker, expo-image-picker, expo-image-manipulator, react-native-markdown-display, and 8 more, validates its data with Zod, is tested with Vitest and Testing Library, deploys with @hono/node-server and electron-squirrel-startup, and uses @aws-sdk/s3-request-presigner, @electric-sql/pglite, Postgres, and MCP. It has 353,082 written lines, with 386 test files.

Read on November 6, 2026, at commit 84c2c75.

Repository: https://github.com/rowboatlabs/rowboat

## Support (apps/harbor/packages/protocol)

### Validation

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

## Backend (apps/harbor/packages/server)

### Data

- **[@aws-sdk/s3-request-presigner](https://seerepo.com/uses/aws-sdk-s3-request-presigner)**: 1 file
- **[@electric-sql/pglite](https://seerepo.com/uses/electric-sql-pglite)**: 1 file
- **[Postgres](https://seerepo.com/uses/postgres)**: 1 file · [apps/harbor/packages/server/src/sql.ts, line 1](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/harbor/packages/server/src/sql.ts#L1)

### Sign-in

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

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 1 file · [apps/harbor/packages/server/src/mcp.ts, line 2](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/harbor/packages/server/src/mcp.ts#L2)

## Support (apps/harbor/packages/server)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 4 files

### Validation

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

### Testing

- **Vitest**: 79 files

### Deploy

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

### Other

- **ulid**: 3 files
- **diff**: 2 files
- **content-disposition**: 1 file
- **ws**: 1 file

## Support (apps/x/apps/main)

### The base

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

### Content

- **html-to-docx**: 1 file

### Validation

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

### Deploy

- **electron-squirrel-startup**: 1 file

### Tools

- **chokidar**: 1 file
- **esbuild**: 1 file

### Other

- **uiohook-napi**: 1 file

## Frontend (apps/x/apps/mobile)

### The base

- **[react-native](https://seerepo.com/uses/react-native)**: 62 files
- **[React](https://seerepo.com/uses/react)**: 54 files · [in apps/x/apps/renderer/package.json](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/renderer/package.json)
- **[Expo](https://seerepo.com/uses/expo)**: 34 files · [in apps/x/apps/mobile/package.json](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/mobile/package.json)

### Interface

- **[react-native-safe-area-context](https://seerepo.com/uses/react-native-safe-area-context)**: 12 files
- **[react-native-keyboard-controller](https://seerepo.com/uses/react-native-keyboard-controller)**: 7 files
- **expo-image**: 6 files
- **[react-native-reanimated](https://seerepo.com/uses/react-native-reanimated)**: 3 files
- **expo-splash-screen**: 2 files
- **expo-blur**: 1 file
- **expo-camera**: 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

### Icons

- **expo-symbols**: 3 files

## Backend (apps/x/apps/mobile)

### Data

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

### Services

- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [apps/x/apps/mobile/src/lib/analytics.ts, line 1](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/mobile/src/lib/analytics.ts#L1)

## Support (apps/x/apps/mobile)

### Content

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

### Validation

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

### Other

- **expo-haptics**: 25 files
- **expo-clipboard**: 5 files
- **expo-web-browser**: 3 files
- **expo-constants**: 2 files
- **expo-crypto**: 2 files
- **expo-file-system**: 2 files
- **expo-notifications**: 2 files
- **expo-device**: 1 file
- **expo-linking**: 1 file
- **expo-sharing**: 1 file
- **react-native-worklets**: 1 file

## Support (apps/x/apps/preload)

### The base

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

## Frontend (apps/x/apps/renderer)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/x/apps/renderer/package.json](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/renderer/package.json)
- **[React](https://seerepo.com/uses/react)**: 323 files · [in apps/x/apps/renderer/package.json](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/renderer/package.json)

### Styles

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

### Interface

- **[sonner](https://seerepo.com/uses/sonner)**: 37 files
- **[tiptap](https://seerepo.com/uses/tiptap)**: 22 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 20 files
- **[motion](https://seerepo.com/uses/motion)**: 7 files
- **[CodeMirror](https://seerepo.com/uses/codemirror)**: 3 files
- **[tiptap-markdown](https://seerepo.com/uses/tiptap-markdown)**: 3 files
- **[recharts](https://seerepo.com/uses/recharts)**: 2 files
- **[xterm](https://seerepo.com/uses/xterm)**: 2 files
- **[@lezer/highlight](https://seerepo.com/uses/lezer-highlight)**: 1 file
- **[cmdk](https://seerepo.com/uses/cmdk)**: 1 file
- **Excalidraw**: 1 file
- **[Mermaid](https://seerepo.com/uses/mermaid)**: 1 file
- **react-tweet**: 1 file

### Icons

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

## Backend (apps/x/apps/renderer)

### AI

- **[ai](https://seerepo.com/uses/ai)**: 5 files
- **tokenlens**: 1 file

### Services

- **[PostHog](https://seerepo.com/uses/posthog)**: 7 files · [apps/x/apps/mobile/src/lib/analytics.ts, line 1](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/mobile/src/lib/analytics.ts#L1)

## Support (apps/x/apps/renderer)

### Content

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

### Validation

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

### Testing

- **Vitest**: 170 files
- **Testing Library**: 101 files

### Other

- **jszip**: 3 files
- **clsx**: 1 file
- **nanoid**: 1 file

## Support (apps/x/apps/server)

### The base

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

### Validation

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

### Testing

- **Vitest**: 5 files

### Deploy

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

### Tools

- **esbuild**: 1 file

### Other

- **ws**: 1 file

## Support (apps/x/packages/client)

### Validation

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

## Backend (apps/x/packages/core)

### The base

- **[Express](https://seerepo.com/uses/express)**: 3 files · [in apps/x/packages/core/package.json](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/packages/core/package.json)

### Sign-in

- **openid-client**: 1 file

### AI

- **[ai](https://seerepo.com/uses/ai)**: 19 files
- **[@agentclientprotocol/sdk](https://seerepo.com/uses/agentclientprotocol-sdk)**: 4 files
- **[ai-sdk](https://seerepo.com/uses/ai-sdk)**: 4 files
- **[OpenRouter](https://seerepo.com/uses/openrouter)**: 3 files
- **ollama-ai-provider-v2**: 1 file

### Services

- **[Google](https://seerepo.com/uses/google)**: 5 files · [apps/x/packages/core/src/knowledge/gmail_sent_contacts.ts, line 4](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/packages/core/src/knowledge/gmail_sent_contacts.ts#L4)
- **[OpenAI](https://seerepo.com/uses/openai)**: 3 files · [apps/x/packages/core/src/models/codex.ts, line 5](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/packages/core/src/models/codex.ts#L5)
- **[MCP](https://seerepo.com/uses/mcp)**: 2 files · [apps/harbor/packages/server/src/mcp.ts, line 2](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/harbor/packages/server/src/mcp.ts#L2)
- **[Anthropic](https://seerepo.com/uses/anthropic)**: 1 file · [apps/x/packages/core/src/models/models.ts, line 5](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/packages/core/src/models/models.ts#L5)
- **[PostHog](https://seerepo.com/uses/posthog)**: 1 file · [apps/x/apps/mobile/src/lib/analytics.ts, line 1](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/mobile/src/lib/analytics.ts#L1)

## Support (apps/x/packages/core)

### Content

- **[yaml](https://seerepo.com/uses/yaml)**: 6 files
- **node-html-markdown**: 2 files
- **[qrcode](https://seerepo.com/uses/qrcode)**: 1 file

### Validation

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

### Testing

- **Vitest**: 96 files

### Tools

- **chokidar**: 3 files
- **glob**: 1 file

### Other

- **cron-parser**: 3 files
- **baileys**: 1 file
- **cors**: 1 file
- **isomorphic-git**: 1 file
- **node-pty**: 1 file
- **yauzl**: 1 file
- **yazl**: 1 file

## Support (apps/x/packages/shared)

### Content

- **[fast-xml-parser](https://seerepo.com/uses/fast-xml-parser)**: 1 file

### Validation

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

### Testing

- **Vitest**: 22 files

### Other

- **jszip**: 6 files

## Support (apps/x/packages/spaces-client)

### Validation

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

### Testing

- **Vitest**: 7 files

## Other repos with a similar stack

- [reactive-resume/reactive-resume](https://seerepo.com/r/reactive-resume/reactive-resume/built): Postgres, MCP, Hono, react-native, React, Expo, expo-secure-store, OpenAI, Anthropic, Zod, jose, @hono/node-server, react-native-safe-area-context, react-native-keyboard-controller, expo-image, react-native-reanimated, expo-splash-screen, expo-status-bar, react-native-gesture-handler, expo-document-picker, expo-image-picker, Tailwind CSS, class-variance-authority, tiptap, motion, CodeMirror, @lezer/highlight, cmdk, @phosphor-icons/react, ai, qrcode.react, ai-sdk, ollama-ai-provider-v2 · [Compare](https://seerepo.com/compare/reactive-resume/reactive-resume/vs/rowboatlabs/rowboat)
- [multica-ai/multica](https://seerepo.com/r/multica-ai/multica/built): Postgres, Electron, react-native, React, Expo, expo-secure-store, PostHog, OpenAI, Zod, react-native-safe-area-context, react-native-keyboard-controller, expo-image, react-native-reanimated, expo-status-bar, react-native-gesture-handler, expo-document-picker, expo-image-picker, Tailwind CSS, class-variance-authority, tailwind-merge, sonner, tiptap, motion, recharts, cmdk, Mermaid, rehype-sanitize, remark-breaks, yaml · [Compare](https://seerepo.com/compare/multica-ai/multica/vs/rowboatlabs/rowboat)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): MCP, Electron, React, Vite, OpenAI, Anthropic, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, tiptap, Radix UI, motion, CodeMirror, @lezer/highlight, cmdk, Lucide, ai, streamdown, qrcode.react, yaml, ai-sdk, OpenRouter, ollama-ai-provider-v2, qrcode, fast-xml-parser · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/rowboatlabs/rowboat)
- [cline/cline](https://seerepo.com/r/cline/cline/built): MCP, React, PostHog, Vite, OpenAI, Anthropic, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, sonner, Radix UI, motion, recharts, cmdk, Mermaid, Lucide, ai, tokenlens, streamdown, yaml, @agentclientprotocol/sdk, ai-sdk · [Compare](https://seerepo.com/compare/cline/cline/vs/rowboatlabs/rowboat)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): Postgres, MCP, React, Vite, Express, Google, OpenAI, Anthropic, Zod, Tailwind CSS, class-variance-authority, tailwind-merge, Radix UI, motion, CodeMirror, xterm, @lezer/highlight, cmdk, Mermaid, Lucide, ai, yaml · [Compare](https://seerepo.com/compare/paperclipai/paperclip/vs/rowboatlabs/rowboat)
- [Significant-Gravitas/AutoGPT](https://seerepo.com/r/Significant-Gravitas/AutoGPT/built): Postgres, React, PostHog, Google, OpenAI, Anthropic, Zod, jose, Tailwind CSS, class-variance-authority, tailwind-merge, sonner, Radix UI, motion, recharts, cmdk, ai, streamdown · [Compare](https://seerepo.com/compare/rowboatlabs/rowboat/vs/Significant-Gravitas/AutoGPT)

## Frequently asked questions

### What language is rowboat written in?

rowboat is written in TypeScript, with 353,082 written lines.

### What framework does rowboat use?

rowboat is built with Hono, Electron, react-native, React, Expo, Vite, and Express.

### What database does rowboat use?

rowboat stores its data in @react-native-async-storage/async-storage and expo-secure-store.

### What does rowboat sign people in with?

rowboat signs people in with jose and openid-client.

### Does rowboat use AI?

Yes. rowboat uses AI through ai, tokenlens, @agentclientprotocol/sdk, ai-sdk, OpenRouter, ollama-ai-provider-v2, OpenAI, and Anthropic.

### What services does rowboat use?

rowboat measures its use with PostHog, connects to Google, and uses @aws-sdk/s3-request-presigner, @electric-sql/pglite, Postgres, and MCP.

The proof: [apps/x/apps/mobile/src/lib/analytics.ts, line 1](https://github.com/rowboatlabs/rowboat/blob/84c2c750770f7589f2cc676a18e6dd9528c37770/apps/x/apps/mobile/src/lib/analytics.ts#L1)

### Does rowboat have tests?

Yes. rowboat has 386 test files and is tested with Vitest and Testing Library.

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

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