Source: https://seerepo.com/r/misskey-dev/misskey/built
Markdown source: https://seerepo.com/r/misskey-dev/misskey/built.md
Description: misskey is a TypeScript repo built with Vue, Vite, NestJS, and fastify. It reaches its data with TypeORM. It has 385,031 written lines, with 171 test files.

# What is misskey built with?

misskey is a TypeScript repo built with Vue, Vite, NestJS, and fastify. It reaches its data with TypeORM, signs people in with bcryptjs, @simplewebauthn/server, otpauth, pkce-challenge, and @simplewebauthn/browser, stores files in AWS S3, watches its errors with Sentry, makes its content with node-html-parser, sharp, sanitize-html, @kitajs/html, js-yaml, and 12 more, validates its data with Ajv and ReadMe, is tested with Chromatic, Vitest, @nestjs/testing, vitest-mock-extended, @sinonjs/fake-timers, and 7 more, and uses Redis, bullmq, meilisearch, @aws-sdk/lib-storage, Postgres, and 1 more. It has 385,031 written lines, with 171 test files.

Read on November 12, 2026, at commit c08cece.

Repository: https://github.com/misskey-dev/misskey

## Frontend (/)

### The base

- **[Vue](https://seerepo.com/uses/vue)**: 2 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)

## Support (/)

### Testing

- **Chromatic**: 2 files

### Tools

- **TypeScript**: 1 file

## Support (packages-private/diagnostics-shared)

### Testing

- **Vitest**: 5 files

## Frontend (packages/backend)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: 2 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)

## Backend (packages/backend)

### The base

- **[NestJS](https://seerepo.com/uses/nestjs)**: 693 files · [in packages/backend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/backend/package.json)

### Data

- **[Redis](https://seerepo.com/uses/redis)**: 61 files · [packages/backend/src/core/entities/UserEntityService.ts, line 7](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/backend/src/core/entities/UserEntityService.ts#L7)
- **[bullmq](https://seerepo.com/uses/bullmq)**: 40 files
- **meilisearch**: 3 files
- **@aws-sdk/lib-storage**: 1 file
- **[Postgres](https://seerepo.com/uses/postgres)**: 1 file · [packages/backend/src/postgres.ts, line 7](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/backend/src/postgres.ts#L7)

### Data access

- **[TypeORM](https://seerepo.com/uses/typeorm)**: 231 files

### Sign-in

- **[bcryptjs](https://seerepo.com/uses/bcryptjs)**: 16 files
- **[@simplewebauthn/server](https://seerepo.com/uses/simplewebauthn-server)**: 4 files
- **[otpauth](https://seerepo.com/uses/otpauth)**: 3 files
- **pkce-challenge**: 1 file

### Services

- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 1 file · [packages/backend/src/core/DriveService.ts, line 13](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/backend/src/core/DriveService.ts#L13)
- **[Sentry](https://seerepo.com/uses/sentry)**: 1 file · [packages/backend/src/core/telemetry/adapters/SentryTelemetryAdapter.ts, line 7](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/backend/src/core/telemetry/adapters/SentryTelemetryAdapter.ts#L7)

## Support (packages/backend)

### The base

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

### Content

- **[node-html-parser](https://seerepo.com/uses/node-html-parser)**: 5 files
- **[sharp](https://seerepo.com/uses/sharp)**: 4 files
- **[sanitize-html](https://seerepo.com/uses/sanitize-html)**: 3 files
- **@kitajs/html**: 2 files
- **[js-yaml](https://seerepo.com/uses/js-yaml)**: 2 files
- **blurhash**: 1 file
- **feed**: 1 file
- **[file-type](https://seerepo.com/uses/file-type)**: 1 file
- **is-svg**: 1 file
- **juice**: 1 file
- **[nodemailer](https://seerepo.com/uses/nodemailer)**: 1 file
- **probe-image-size**: 1 file
- **[rss-parser](https://seerepo.com/uses/rss-parser)**: 1 file

### Validation

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

### Testing

- **Vitest**: 119 files
- **@nestjs/testing**: 31 files
- **vitest-mock-extended**: 7 files
- **@sinonjs/fake-timers**: 4 files
- **aws-sdk-client-mock**: 2 files
- **simple-oauth2**: 1 file

### Tools

- **Rolldown**: 3 files
- **fkill**: 2 files
- **chokidar**: 1 file
- **TypeScript**: 1 file

### Other

- **ms**: 62 files
- **date-fns**: 10 files
- **chalk**: 4 files
- **color-convert**: 4 files
- **re2**: 4 files
- **[fastify](https://seerepo.com/uses/fastify)**: 3 files
- **systeminformation**: 3 files
- **vary**: 3 files
- **content-disposition**: 2 files
- **fluent-ffmpeg**: 2 files
- **ipaddr.js**: 2 files
- **jsonld**: 2 files
- **node-fetch**: 2 files
- **reflect-metadata**: 2 files
- **tinycolor2**: 2 files
- **ws**: 2 files
- **@smithy/node-http-handler**: 1 file
- **@zip.js/zip.js**: 1 file
- **accepts**: 1 file
- **cacheable-lookup**: 1 file
- **cbor2**: 1 file
- **chalk-template**: 1 file
- **execa**: 1 file
- **fastify-raw-body**: 1 file
- **got**: 1 file
- **hpagent**: 1 file
- **http-link-header**: 1 file
- **json5**: 1 file
- **mime-types**: 1 file
- **nanoid**: 1 file
- **random-seed**: 1 file
- **secure-json-parse**: 1 file
- **SemVer**: 1 file
- **stringz**: 1 file
- **tmp**: 1 file
- **ulid**: 1 file
- **web-push**: 1 file

## Frontend (packages/frontend-builder)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: 2 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)

## Support (packages/frontend-builder)

### Tools

- **Rolldown**: 3 files
- **magic-string**: 2 files
- **oxc-walker**: 2 files

## Frontend (packages/frontend-embed)

### The base

- **[Vue](https://seerepo.com/uses/vue)**: 38 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)
- **[Vite](https://seerepo.com/uses/vite)**: 2 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)

## Support (packages/frontend-embed)

### Tools

- **rollup**: 1 file

### Other

- **punycode.js**: 2 files
- **execa**: 1 file
- **json5**: 1 file
- **tinycolor2**: 1 file
- **uuid**: 1 file

## Frontend (packages/frontend-shared)

### The base

- **[Vue](https://seerepo.com/uses/vue)**: 4 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)

## Support (packages/frontend-shared)

### Content

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

### Other

- **json5**: 1 file
- **punycode.js**: 1 file
- **tinycolor2**: 1 file

## Frontend (packages/frontend)

### The base

- **[Vue](https://seerepo.com/uses/vue)**: 614 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)
- **[Vite](https://seerepo.com/uses/vite)**: 5 files · [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)

### Interface

- **[Chart.js](https://seerepo.com/uses/chartjs)**: 20 files
- **[canvas-confetti](https://seerepo.com/uses/canvas-confetti)**: 1 file
- **chartjs-adapter-date-fns**: 1 file
- **chartjs-plugin-zoom**: 1 file
- **[cropperjs](https://seerepo.com/uses/cropperjs)**: 1 file
- **textarea-caret**: 1 file

## Backend (packages/frontend)

### Data

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

### Sign-in

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

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 1 file · [packages/backend/src/core/telemetry/adapters/SentryTelemetryAdapter.ts, line 7](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/backend/src/core/telemetry/adapters/SentryTelemetryAdapter.ts#L7)

## Support (packages/frontend)

### Content

- **exifreader**: 3 files
- **[shiki](https://seerepo.com/uses/shiki)**: 2 files
- **[mediabunny](https://seerepo.com/uses/mediabunny)**: 1 file
- **qr-scanner**: 1 file
- **[sanitize-html](https://seerepo.com/uses/sanitize-html)**: 1 file

### Testing

- **Vitest**: 23 files
- **Testing Library**: 4 files
- **Chromatic**: 3 files
- **playwright**: 3 files
- **happy-dom**: 1 file
- **vitest-fetch-mock**: 1 file

### Tools

- **Rolldown**: 2 files
- **vue-component-type-helpers**: 2 files
- **@vue/compiler-core**: 1 file
- **oxc-walker**: 1 file
- **rollup**: 1 file
- **v-code-diff**: 1 file

### Other

- **json5**: 12 files
- **tinycolor2**: 12 files
- **throttle-debounce**: 10 files
- **eventemitter3**: 8 files
- **punycode.js**: 8 files
- **compare-versions**: 4 files
- **Matter.js**: 2 files
- **seedrandom**: 2 files
- **analytics**: 1 file
- **execa**: 1 file
- **intersection-observer**: 1 file
- **minimatch**: 1 file
- **wanakana**: 1 file

## Support (packages/i18n)

### Content

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

### Tools

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

### Other

- **execa**: 1 file

## Support (packages/icons-subsetter)

### Tools

- **wawoff2**: 1 file

## Support (packages/misskey-bubble-game)

### Tools

- **esbuild**: 1 file

### Other

- **eventemitter3**: 1 file
- **execa**: 1 file
- **Matter.js**: 1 file
- **seedrandom**: 1 file

## Backend (packages/misskey-js)

### Sign-in

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

## Support (packages/misskey-js)

### Testing

- **Vitest**: 4 files
- **vitest-websocket-mock**: 1 file

### Tools

- **tsd**: 2 files
- **esbuild**: 1 file

### Other

- **eventemitter3**: 1 file
- **execa**: 1 file
- **reconnecting-websocket**: 1 file

## Support (packages/misskey-js/generator)

### Validation

- **ReadMe**: 1 file

### Tools

- **TypeScript**: 2 files
- **openapi-types**: 1 file
- **openapi-typescript**: 1 file

## Support (packages/misskey-reversi)

### Tools

- **esbuild**: 1 file

### Other

- **crc-32**: 1 file
- **execa**: 1 file

## Backend (packages/sw)

### Data

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

## Support (packages/sw)

### Tools

- **esbuild**: 1 file

## Other repos with a similar stack

- [n8n-io/n8n](https://seerepo.com/r/n8n-io/n8n/built): Vue, Vite, Redis, Postgres, Sentry, bcryptjs, otpauth, sanitize-html, file-type, nodemailer, rss-parser, Ajv, Chart.js · [Compare](https://seerepo.com/compare/misskey-dev/misskey/vs/n8n-io/n8n)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Vite, NestJS, Redis, bullmq, Postgres, AWS S3, Sentry, idb-keyval, TypeORM, sharp, sanitize-html, file-type, nodemailer · [Compare](https://seerepo.com/compare/misskey-dev/misskey/vs/twentyhq/twenty)
- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Vite, bullmq, Sentry, sharp, sanitize-html, js-yaml, file-type, juice, nodemailer, probe-image-size, Ajv · [Compare](https://seerepo.com/compare/misskey-dev/misskey/vs/TryGhost/Ghost)
- [ToolJet/ToolJet](https://seerepo.com/r/ToolJet/ToolJet/built): NestJS, Redis, bullmq, Postgres, Sentry, idb-keyval, TypeORM, otpauth, sanitize-html, nodemailer, Ajv · [Compare](https://seerepo.com/compare/misskey-dev/misskey/vs/ToolJet/ToolJet)
- [novuhq/novu](https://seerepo.com/r/novuhq/novu/built): Vite, NestJS, Redis, bullmq, Sentry, node-html-parser, sharp, sanitize-html, juice, nodemailer, Ajv · [Compare](https://seerepo.com/compare/misskey-dev/misskey/vs/novuhq/novu)
- [immich-app/immich](https://seerepo.com/r/immich-app/immich/built): Vite, NestJS, Redis, bullmq, Postgres, @simplewebauthn/server, sharp, js-yaml, nodemailer, @simplewebauthn/browser · [Compare](https://seerepo.com/compare/immich-app/immich/vs/misskey-dev/misskey)

## Frequently asked questions

### What language is misskey written in?

misskey is written in TypeScript, with 385,031 written lines.

### What framework does misskey use?

misskey is built with Vue, Vite, NestJS, and fastify.

The proof: [in packages/frontend/package.json](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/frontend/package.json)

### What does misskey sign people in with?

misskey signs people in with bcryptjs, @simplewebauthn/server, otpauth, pkce-challenge, and @simplewebauthn/browser.

### What services does misskey use?

misskey stores files in AWS S3, watches its errors with Sentry, and uses Redis, bullmq, meilisearch, @aws-sdk/lib-storage, Postgres, and idb-keyval.

The proof: [packages/backend/src/core/DriveService.ts, line 13](https://github.com/misskey-dev/misskey/blob/c08cecea8fd9af0d1e0e575f059394d1d8b8233f/packages/backend/src/core/DriveService.ts#L13)

### Does misskey have tests?

Yes. misskey has 171 test files and is tested with Chromatic, Vitest, @nestjs/testing, vitest-mock-extended, @sinonjs/fake-timers, aws-sdk-client-mock, simple-oauth2, Testing Library, playwright, happy-dom, vitest-fetch-mock, and vitest-websocket-mock.

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

The ones that share most of its stack: n8n-io/n8n, twentyhq/twenty, and TryGhost/Ghost.

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