Source: https://seerepo.com/r/yc-software/qm/built
Markdown source: https://seerepo.com/r/yc-software/qm/built.md
Description: qm is a TypeScript repo built with @slack/bolt, Fastify, Electron, objc2-foundation, objc2-app-kit, and 2 more.

# What is qm built with?

qm is a TypeScript repo built with @slack/bolt, Fastify, Electron, objc2-foundation, objc2-app-kit, and 2 more. It stores its data in lru-cache, Postgres, and @aws-sdk/s3-request-presigner, signs people in with aws-sdk, jose, and @smithy/signature-v4, stores files in AWS S3, uses AI through earendil-works, e2b, Anthropic, Pi, and TanStack, watches its errors with Sentry, makes its content with marked, nodemailer, officeparser, html2text, pulldown-cmark, and 4 more, validates its data with typebox and Zod, is tested with jsdom, deploys with @aws-sdk/client-ecs, and uses MCP and Modal. It has 551,856 written lines, with 1,261 test files.

Read on November 8, 2026, at commit 3d52212.

Repository: https://github.com/yc-software/qm

## Frontend (/)

### Icons

- **emoji-datasource**: 2 files

## Backend (/)

### Data

- **[lru-cache](https://seerepo.com/uses/lru-cache)**: 14 files
- **[Postgres](https://seerepo.com/uses/postgres)**: 6 files · [src/cron/job-queue.ts, line 1](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/src/cron/job-queue.ts#L1)
- **[@aws-sdk/s3-request-presigner](https://seerepo.com/uses/aws-sdk-s3-request-presigner)**: 2 files

### Sign-in

- **[aws-sdk](https://seerepo.com/uses/aws-sdk)**: 3 files
- **[jose](https://seerepo.com/uses/jose)**: 3 files
- **@smithy/signature-v4**: 1 file

### AI

- **earendil-works**: 28 files
- **e2b**: 1 file

### Services

- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 5 files · [src/files/direct-file-upload.ts, line 12](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/src/files/direct-file-upload.ts#L12)
- **[MCP](https://seerepo.com/uses/mcp)**: 2 files · [src/mcp/mcp-client.ts, line 1](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/src/mcp/mcp-client.ts#L1)
- **Modal**: 2 files · [src/sandbox/modal-client.ts, line 86](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/src/sandbox/modal-client.ts#L86)
- **[Sentry](https://seerepo.com/uses/sentry)**: 2 files · [plugins/web-ui/src/browser-errors.ts, line 1](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/plugins/web-ui/src/browser-errors.ts#L1)
- **[Anthropic](https://seerepo.com/uses/anthropic)**: 1 file · [src/util/tokens.ts, line 1](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/src/util/tokens.ts#L1)

## Support (/)

### The base

- **@slack/bolt**: 6 files
- **[Fastify](https://seerepo.com/uses/fastify)**: 1 file

### Content

- **[marked](https://seerepo.com/uses/marked)**: 1 file
- **[nodemailer](https://seerepo.com/uses/nodemailer)**: 1 file
- **officeparser**: 1 file

### Validation

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

### Deploy

- **@aws-sdk/client-ecs**: 1 file

### Other

- **@slack/web-api**: 6 files
- **croner**: 2 files
- **@aws-crypto/sha256-js**: 1 file
- **@aws-sdk/client-secrets-manager**: 1 file
- **cronstrue**: 1 file
- **grpc**: 1 file
- **socks-proxy-agent**: 1 file
- **tar-stream**: 1 file
- **undici**: 1 file
- **web-tree-sitter**: 1 file
- **ws**: 1 file

## Support (cli)

### Content

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

## Support (deploy/connector-sdk)

### Tools

- **esbuild**: 1 file

## Frontend (desktop)

### Interface

- **[core-graphics](https://seerepo.com/uses/core-graphics)**: 4 files

## Support (desktop)

### The base

- **[Electron](https://seerepo.com/uses/electron)**: 10 files
- **[objc2-foundation](https://seerepo.com/uses/objc2-foundation)**: 5 files
- **[objc2-app-kit](https://seerepo.com/uses/objc2-app-kit)**: 4 files

### Content

- **[html2text](https://seerepo.com/uses/html2text)**: 1 file
- **[pulldown-cmark](https://seerepo.com/uses/pulldown-cmark)**: 1 file

### Testing

- **jsdom**: 2 files

### Tools

- **@electron/packager**: 1 file

### Other

- **core-foundation**: 5 files
- **objc2**: 5 files
- **objc2-core-graphics**: 4 files
- **foreign-types**: 3 files
- **libc**: 3 files
- **objc2-core-foundation**: 3 files
- **base64**: 2 files
- **serde_json**: 2 files
- **block2**: 1 file
- **objc2-screen-capture-kit**: 1 file
- **serde**: 1 file
- **sha2**: 1 file
- **signal-hook**: 1 file
- **update-electron-app**: 1 file

## Backend (plugins/auth)

### Sign-in

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

## Support (plugins/auth)

### Content

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

## Backend (plugins/portal)

### Data

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

### Sign-in

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

## Frontend (plugins/web-ui)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: 4 files

### Interface

- **[@lezer/highlight](https://seerepo.com/uses/lezer-highlight)**: 1 file
- **[CodeMirror](https://seerepo.com/uses/codemirror)**: 1 file
- **[Mermaid](https://seerepo.com/uses/mermaid)**: 1 file
- **morphdom**: 1 file

### Icons

- **[Lucide](https://seerepo.com/uses/lucide)**: 48 files
- **emoji-datasource**: 1 file

## Backend (plugins/web-ui)

### Data

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

### AI

- **Pi**: 10 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 2 files

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 1 file · [plugins/web-ui/src/browser-errors.ts, line 1](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/plugins/web-ui/src/browser-errors.ts#L1)

## Support (plugins/web-ui)

### The base

- **[Lit](https://seerepo.com/uses/lit)**: 93 files

### Content

- **[marked](https://seerepo.com/uses/marked)**: 4 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **[html-to-image](https://seerepo.com/uses/html-to-image)**: 1 file
- **[katex](https://seerepo.com/uses/katex)**: 1 file
- **[papaparse](https://seerepo.com/uses/papaparse)**: 1 file

### Testing

- **jsdom**: 60 files

### Tools

- **esbuild**: 2 files

### Other

- **date-fns**: 1 file
- **jszip**: 1 file

## Other repos with a similar stack

- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): lru-cache, MCP, Sentry, Anthropic, Electron, Vite, earendil-works, officeparser, Zod, @lezer/highlight, CodeMirror, Lucide, TanStack, dompurify, html-to-image, katex · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/yc-software/qm)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Postgres, AWS S3, MCP, Sentry, Anthropic, Electron, Vite, aws-sdk, jose, marked, nodemailer, Zod, dompurify, papaparse · [Compare](https://seerepo.com/compare/twentyhq/twenty/vs/yc-software/qm)
- [n8n-io/n8n](https://seerepo.com/r/n8n-io/n8n/built): lru-cache, Postgres, MCP, Sentry, Anthropic, Vite, jose, nodemailer, Zod, @lezer/highlight, CodeMirror, katex · [Compare](https://seerepo.com/compare/n8n-io/n8n/vs/yc-software/qm)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): Postgres, AWS S3, MCP, Sentry, Anthropic, Vite, Zod, @lezer/highlight, CodeMirror, Mermaid, Lucide, dompurify · [Compare](https://seerepo.com/compare/paperclipai/paperclip/vs/yc-software/qm)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): lru-cache, Sentry, Vite, jose, nodemailer, Zod, @lezer/highlight, CodeMirror, Lucide, dompurify, papaparse · [Compare](https://seerepo.com/compare/TryGhost/Ghost/vs/yc-software/qm)
- [RocketChat/Rocket.Chat](https://seerepo.com/r/RocketChat/Rocket.Chat/built): AWS S3, @slack/bolt, Vite, aws-sdk, jose, marked, nodemailer, Zod, @lezer/highlight, dompurify, katex · [Compare](https://seerepo.com/compare/RocketChat/Rocket.Chat/vs/yc-software/qm)

## Frequently asked questions

### What language is qm written in?

qm is written in TypeScript, with 551,856 written lines.

### What framework does qm use?

qm is built with @slack/bolt, Fastify, Electron, objc2-foundation, objc2-app-kit, Vite, and Lit.

### What database does qm use?

qm stores its data in lru-cache, Postgres, and @aws-sdk/s3-request-presigner.

### What does qm sign people in with?

qm signs people in with aws-sdk, jose, and @smithy/signature-v4.

### Does qm use AI?

Yes. qm uses AI through earendil-works, e2b, Anthropic, Pi, and TanStack.

### What services does qm use?

qm stores files in AWS S3, watches its errors with Sentry, and uses MCP and Modal.

The proof: [src/files/direct-file-upload.ts, line 12](https://github.com/yc-software/qm/blob/3d522127d8386f73980b07d462edceebf3783bdb/src/files/direct-file-upload.ts#L12)

### Does qm have tests?

Yes. qm has 1,261 test files and is tested with jsdom.

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

The ones that share most of its stack: CherryHQ/cherry-studio, twentyhq/twenty, and n8n-io/n8n.

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