Source: https://seerepo.com/r/emdash-cms/emdash/built
Markdown source: https://seerepo.com/r/emdash-cms/emdash/built.md
Description: emdash is a TypeScript repo built with Vite, React, Hono, Astro, and @tanstack/react-router. It reaches it with kysely and signs people in with jose and arctic.

# What is emdash built with?

emdash is a TypeScript repo built with Vite, React, Hono, Astro, and @tanstack/react-router. It reaches it with kysely, signs people in with jose and arctic, makes its content with marked, sanitize-html, image-size, dompurify, highlight.js, and 6 more, validates its data with Zod, @apidevtools/swagger-parser, and zod-openapi, is tested with Vitest, Testing Library, @playwright/test, vitest-browser-react, playwright, and 1 more, deploys with @astrojs/cloudflare, and uses Postgres and MCP. It has 1,316,006 written lines, with 1,954 test files.

Read on November 9, 2026, at commit 2ae29db.

Repository: https://github.com/emdash-cms/emdash

## Support (apps/aggregator)

### Testing

- **Vitest**: 12 files

## Frontend (apps/labeler)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)
- **[React](https://seerepo.com/uses/react)**: 3 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 1 file

## Backend (apps/labeler)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 1 file · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Sign-in

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

## Support (apps/labeler)

### Content

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

### Testing

- **Vitest**: 44 files
- **Testing Library**: 2 files

### Other

- **lingui**: 3 files

## Backend (apps/plugins-site)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 1 file · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

## Support (apps/plugins-site)

### Content

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

### Testing

- **Vitest**: 12 files

## Support (apps/release-action)

### Content

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

### Testing

- **Vitest**: 4 files

### Other

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

## Frontend (apps/release-service)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)
- **[React](https://seerepo.com/uses/react)**: 6 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

## Backend (apps/release-service)

### Sign-in

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

## Support (apps/release-service)

### Testing

- **Vitest**: 55 files
- **Testing Library**: 2 files
- **@playwright/test**: 1 file

### Other

- **lingui**: 2 files
- **ulidx**: 2 files
- **SemVer**: 1 file

## Support (apps/release-verifier)

### Testing

- **Vitest**: 1 file

### Other

- **modern-tar**: 1 file

## Support (i18n)

### Other

- **@lunariajs/core**: 1 file

## Support (infra/discord-bot)

### Testing

- **Vitest**: 6 files

## Frontend (packages/admin)

### The base

- **[React](https://seerepo.com/uses/react)**: 201 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)
- **[@tanstack/react-router](https://seerepo.com/uses/tanstack-react-router)**: 38 files

### Styles

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

### Interface

- **[tiptap](https://seerepo.com/uses/tiptap)**: 30 files
- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 13 files
- **[react-day-picker](https://seerepo.com/uses/react-day-picker)**: 3 files
- **[react-hotkeys-hook](https://seerepo.com/uses/react-hotkeys-hook)**: 2 files
- **[@floating-ui/react](https://seerepo.com/uses/floating-ui-react)**: 1 file
- **[@lezer/highlight](https://seerepo.com/uses/lezer-highlight)**: 1 file
- **[CodeMirror](https://seerepo.com/uses/codemirror)**: 1 file
- **[lowlight](https://seerepo.com/uses/lowlight)**: 1 file
- **react-image-crop**: 1 file

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 119 files

## Support (packages/admin)

### Content

- **[dompurify](https://seerepo.com/uses/dompurify)**: 2 files
- **[highlight.js](https://seerepo.com/uses/highlightjs)**: 1 file
- **[marked](https://seerepo.com/uses/marked)**: 1 file

### Testing

- **Vitest**: 318 files
- **Testing Library**: 13 files
- **vitest-browser-react**: 11 files

### Other

- **lingui**: 223 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 82 files
- **modern-tar**: 2 files
- **clsx**: 1 file
- **date-fns**: 1 file

## Frontend (packages/auth-atproto)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

## Backend (packages/auth-atproto)

### Data access

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

## Support (packages/auth-atproto)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 4 files · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Testing

- **Vitest**: 3 files

### Other

- **@lingui/react**: 1 file

## Backend (packages/auth)

### Data access

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

### Sign-in

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

## Support (packages/auth)

### Validation

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

### Testing

- **Vitest**: 8 files

### Other

- **oslojs**: 5 files
- **ulidx**: 1 file

## Frontend (packages/blocks)

### The base

- **[React](https://seerepo.com/uses/react)**: 18 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Styles

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

### Interface

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

### Icons

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

## Support (packages/blocks)

### Testing

- **Vitest**: 6 files
- **Testing Library**: 4 files

### Other

- **clsx**: 1 file

## Frontend (packages/blocks/playground)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)
- **[React](https://seerepo.com/uses/react)**: 3 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Styles

- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 1 file

## Frontend (packages/cloudflare)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Styles

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

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 1 file

## Backend (packages/cloudflare)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 1 file · [packages/core/src/db/postgres.ts, line 9](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/packages/core/src/db/postgres.ts#L9)

### Data access

- **[kysely](https://seerepo.com/uses/kysely)**: 16 files

### Sign-in

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

## Support (packages/cloudflare)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 4 files · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Testing

- **Vitest**: 57 files

### Deploy

- **@astrojs/cloudflare**: 2 files

### Tools

- **[Cloudflare](https://seerepo.com/uses/cloudflare)**: 2 files
- **wrangler**: 1 file

### Other

- **ulidx**: 2 files

## Support (packages/contentful-to-portable-text)

### Testing

- **Vitest**: 2 files

### Tools

- **@portabletext/types**: 4 files
- **Contentful**: 1 file

## Frontend (packages/core)

### The base

- **[React](https://seerepo.com/uses/react)**: 14 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)
- **[Vite](https://seerepo.com/uses/vite)**: 2 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Interface

- **[tiptap](https://seerepo.com/uses/tiptap)**: 10 files
- **[@floating-ui/react](https://seerepo.com/uses/floating-ui-react)**: 4 files
- **[lowlight](https://seerepo.com/uses/lowlight)**: 1 file

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 6 files

## Backend (packages/core)

### Data

- **[Postgres](https://seerepo.com/uses/postgres)**: 1 file · [packages/core/src/db/postgres.ts, line 9](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/packages/core/src/db/postgres.ts#L9)

### Data access

- **[kysely](https://seerepo.com/uses/kysely)**: 301 files

### Sign-in

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

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 2 files · [packages/core/src/astro/routes/api/mcp.ts, line 14](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/packages/core/src/astro/routes/api/mcp.ts#L14)

## Support (packages/core)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 268 files · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Content

- **[image-size](https://seerepo.com/uses/image-size)**: 2 files
- **blurhash**: 1 file
- **[highlight.js](https://seerepo.com/uses/highlightjs)**: 1 file
- **jpeg-js**: 1 file
- **[marked](https://seerepo.com/uses/marked)**: 1 file
- **[sanitize-html](https://seerepo.com/uses/sanitize-html)**: 1 file
- **sax**: 1 file
- **upng-js**: 1 file

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 80 files
- **@apidevtools/swagger-parser**: 1 file
- **zod-openapi**: 1 file

### Testing

- **Vitest**: 1,012 files

### Tools

- **citty**: 17 files
- **@astrojs/compiler**: 1 file
- **@portabletext/types**: 1 file
- **Babel**: 1 file
- **tsdown**: 1 file
- **TypeScript**: 1 file

### Other

- **ulidx**: 57 files
- **consola**: 16 files
- **mime**: 8 files
- **oslojs**: 3 files
- **picocolors**: 3 files
- **modern-tar**: 2 files
- **@lingui/core**: 1 file
- **croner**: 1 file
- **[jsonc-parser](https://seerepo.com/uses/jsonc-parser)**: 1 file
- **proper-lockfile**: 1 file
- **smol-toml**: 1 file

## Frontend (packages/create-emdash)

### Interface

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

## Support (packages/create-emdash)

### Testing

- **Vitest**: 4 files

### Tools

- **giget**: 1 file

### Other

- **picocolors**: 1 file

## Support (packages/gutenberg-to-portable-text)

### Content

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

### Testing

- **Vitest**: 4 files

## Backend (packages/marketplace)

### The base

- **[Hono](https://seerepo.com/uses/hono)**: 7 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Sign-in

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

## Support (packages/marketplace)

### Validation

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

### Testing

- **Vitest**: 9 files

### Other

- **modern-tar**: 3 files

## Frontend (packages/plugin-cli)

### Interface

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

## Support (packages/plugin-cli)

### Content

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

### Validation

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

### Testing

- **Vitest**: 37 files

### Tools

- **citty**: 18 files
- **chokidar**: 1 file

### Other

- **consola**: 18 files
- **picocolors**: 15 files
- **[jsonc-parser](https://seerepo.com/uses/jsonc-parser)**: 4 files
- **modern-tar**: 2 files
- **@oslojs/crypto**: 1 file
- **SemVer**: 1 file

## Support (packages/plugin-types)

### Validation

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

### Testing

- **Vitest**: 5 files

## Frontend (packages/plugins/ai-moderation)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 1 file

## Support (packages/plugins/ai-moderation)

### Testing

- **Vitest**: 4 files

## Frontend (packages/plugins/ai-search)

### The base

- **[React](https://seerepo.com/uses/react)**: 11 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 7 files

## Support (packages/plugins/ai-search)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 4 files · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Testing

- **Vitest**: 14 files

## Support (packages/plugins/atproto)

### Testing

- **Vitest**: 7 files

### Other

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

## Frontend (packages/plugins/color)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

## Frontend (packages/plugins/embeds)

### Interface

- **@astro-community/astro-embed-youtube**: 1 file

## Support (packages/plugins/embeds)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 1 file · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Content

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

### Testing

- **Vitest**: 3 files
- **playwright**: 1 file

## Frontend (packages/plugins/field-kit)

### The base

- **[React](https://seerepo.com/uses/react)**: 5 files · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 3 files

## Support (packages/plugins/field-kit)

### Testing

- **Testing Library**: 4 files
- **Vitest**: 4 files

## Frontend (packages/plugins/forms)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file · [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### Icons

- **[@phosphor-icons/react](https://seerepo.com/uses/phosphor-icons-react)**: 1 file

## Support (packages/plugins/forms)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 2 files · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Testing

- **Vitest**: 25 files
- **Testing Library**: 2 files
- **jsdom**: 1 file

### Other

- **ulidx**: 2 files
- **lingui**: 1 file

## Support (packages/plugins/mcp-smoke)

### Validation

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

## Support (packages/plugins/webhook-notifier)

### Testing

- **Vitest**: 1 file

### Other

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

## Support (packages/registry-client)

### Testing

- **Vitest**: 10 files

### Other

- **SemVer**: 1 file

## Support (packages/registry-lexicons)

### Testing

- **Vitest**: 2 files

## Support (packages/registry-loader)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 1 file · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Testing

- **Vitest**: 1 file

## Support (packages/registry-moderation)

### Testing

- **Vitest**: 6 files

## Support (packages/registry-verification)

### Testing

- **Vitest**: 10 files

### Other

- **modern-tar**: 1 file

## Frontend (packages/upgrade-emdash)

### Interface

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

## Support (packages/upgrade-emdash)

### Content

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

### Testing

- **Vitest**: 6 files

### Other

- **SemVer**: 4 files
- **[jsonc-parser](https://seerepo.com/uses/jsonc-parser)**: 1 file
- **minimatch**: 1 file
- **picocolors**: 1 file

## Backend (packages/workerd)

### Data access

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

## Support (packages/workerd)

### Testing

- **Vitest**: 24 files

### Other

- **ulidx**: 1 file

## Support (packages/x402)

### The base

- **[Astro](https://seerepo.com/uses/astro)**: 1 file · [in apps/plugins-site/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/plugins-site/package.json)

### Testing

- **Vitest**: 2 files

### Other

- **x402**: 2 files

## Other repos with a similar stack

- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Vite, React, Hono, Tailwind CSS, jose, sanitize-html, image-size, tailwind-merge, tiptap, dnd-kit, react-day-picker, @lezer/highlight, CodeMirror, dompurify, Zod · [Compare](https://seerepo.com/compare/emdash-cms/emdash/vs/TryGhost/Ghost)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): Vite, React, MCP, Tailwind CSS, tailwind-merge, tiptap, dnd-kit, react-day-picker, react-hotkeys-hook, @lezer/highlight, CodeMirror, dompurify, Zod, echarts, yaml · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/emdash-cms/emdash)
- [anomalyco/opencode](https://seerepo.com/r/anomalyco/opencode/built): Vite, React, Hono, Astro, MCP, Tailwind CSS, jose, marked, dnd-kit, dompurify, Zod, @clack/prompts, yaml · [Compare](https://seerepo.com/compare/anomalyco/opencode/vs/emdash-cms/emdash)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): Vite, React, Postgres, MCP, Tailwind CSS, tailwind-merge, dnd-kit, @lezer/highlight, CodeMirror, dompurify, Zod, @clack/prompts, yaml · [Compare](https://seerepo.com/compare/emdash-cms/emdash/vs/paperclipai/paperclip)
- [ruvnet/ruflo](https://seerepo.com/r/ruvnet/ruflo/built): Vite, React, Hono, Postgres, MCP, Tailwind CSS, jose, marked, tailwind-merge, react-day-picker, highlight.js, Zod, yaml · [Compare](https://seerepo.com/compare/emdash-cms/emdash/vs/ruvnet/ruflo)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Vite, React, Postgres, MCP, jose, marked, sanitize-html, tiptap, react-hotkeys-hook, @floating-ui/react, dompurify, Zod, lightningcss · [Compare](https://seerepo.com/compare/emdash-cms/emdash/vs/twentyhq/twenty)

## Frequently asked questions

### What language is emdash written in?

emdash is written in TypeScript, with 1,316,006 written lines.

### What framework does emdash use?

emdash is built with Vite, React, Hono, Astro, and @tanstack/react-router.

The proof: [in apps/labeler/package.json](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/apps/labeler/package.json)

### What does emdash sign people in with?

emdash signs people in with jose and arctic.

### What services does emdash use?

emdash uses Postgres and MCP.

The proof: [packages/core/src/db/postgres.ts, line 9](https://github.com/emdash-cms/emdash/blob/2ae29db9a0ab4519b2ce97c1af22516f867ff058/packages/core/src/db/postgres.ts#L9)

### Does emdash have tests?

Yes. emdash has 1,954 test files and is tested with Vitest, Testing Library, @playwright/test, vitest-browser-react, playwright, and jsdom.

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

The ones that share most of its stack: TryGhost/Ghost, CherryHQ/cherry-studio, and anomalyco/opencode.

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