Source: https://seerepo.com/r/strapi/strapi/built
Markdown source: https://seerepo.com/r/strapi/strapi/built.md
Description: strapi is a TypeScript repo built with React, react-router-dom, Koa, Vite, @apollo/server, and 1 more. It reaches it with knex.

# What is strapi built with?

strapi is a TypeScript repo built with React, react-router-dom, Koa, Vite, @apollo/server, and 1 more. It reaches it with knex, signs people in with jsonwebtoken, bcryptjs, and passport-local, uses AI through @ai-sdk/react and ai, watches its errors with Sentry, makes its content with prismjs, dompurify, highlight.js, markdown-it, markdown-it-container, and 7 more, validates its data with Zod, Ajv, ajv-formats, yup, and prop-types, is tested with @playwright/test, supertest, Vitest, Jest, Testing Library, and 2 more, deploys with @aws-sdk/types and winston, and uses MCP and aws-sdk. It has 804,883 written lines, with 1,980 test files.

Read on November 5, 2026, at commit 958568e.

Repository: https://github.com/strapi/strapi

## Backend (/)

### Data access

- **knex**: 3 files

### Sign-in

- **jsonwebtoken**: 10 files
- **bcryptjs**: 3 files

## Support (/)

### Validation

- **[Zod](https://seerepo.com/uses/zod)**: 6 files
- **[Ajv](https://seerepo.com/uses/ajv)**: 1 file
- **ajv-formats**: 1 file

### Testing

- **@playwright/test**: 125 files
- **supertest**: 4 files
- **Vitest**: 4 files
- **Jest**: 1 file

### Tools

- **get-port**: 1 file
- **glob**: 1 file
- **rimraf**: 1 file
- **rollup**: 1 file

### Other

- **Lodash**: 41 files
- **execa**: 14 files
- **.ENV**: 3 files
- **SemVer**: 3 files
- **fs-extra**: 2 files
- **pluralize**: 2 files
- **chalk**: 1 file
- **stream-chain**: 1 file
- **stream-json**: 1 file
- **tar**: 1 file
- **ws**: 1 file

## Frontend (packages/cli/cloud)

### Interface

- **boxen**: 2 files
- **cli-progress**: 1 file
- **ora**: 1 file

## Backend (packages/cli/cloud)

### Sign-in

- **jsonwebtoken**: 1 file

## Support (packages/cli/cloud)

### Validation

- **yup**: 1 file

### Testing

- **Vitest**: 3 files

### Tools

- **commander**: 9 files
- **Inquirer**: 7 files

### Other

- **chalk**: 10 files
- **fs-extra**: 6 files
- **Axios**: 4 files
- **Lodash**: 3 files
- **eventsource**: 2 files
- **open**: 2 files
- **fast-safe-stringify**: 1 file
- **minimatch**: 1 file
- **tar**: 1 file

## Support (packages/cli/create-strapi-app)

### Testing

- **Vitest**: 4 files

### Tools

- **Inquirer**: 3 files
- **commander**: 1 file
- **sort-package-json**: 1 file

### Other

- **chalk**: 6 files
- **fs-extra**: 6 files
- **SemVer**: 4 files
- **execa**: 3 files
- **Lodash**: 3 files
- **async-retry**: 1 file
- **node-machine-id**: 1 file
- **tar**: 1 file

## Frontend (packages/core/admin)

### The base

- **[React](https://seerepo.com/uses/react)**: 162 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 67 files

### Styles

- **styled-components**: 63 files

### Interface

- **Formik**: 9 files
- **react-dnd**: 4 files
- **react-dnd-html5-backend**: 2 files
- **[motion](https://seerepo.com/uses/motion)**: 1 file
- **[sonner](https://seerepo.com/uses/sonner)**: 1 file

## Backend (packages/core/admin)

### Sign-in

- **passport-local**: 2 files
- **bcryptjs**: 1 file

## Support (packages/core/admin)

### The base

- **Koa**: 30 files

### Validation

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

### Testing

- **Vitest**: 90 files
- **Testing Library**: 28 files
- **msw**: 23 files

### Other

- **Lodash**: 88 files
- **@reduxjs/toolkit**: 10 files
- **date-fns**: 10 files
- **Immer**: 10 files
- **qs**: 8 files
- **@casl/ability**: 7 files
- **react-redux**: 7 files
- **invariant**: 4 files
- **Axios**: 2 files
- **fs-extra**: 2 files
- **formidable**: 1 file
- **fractional-indexing**: 1 file
- **json-logic-js**: 1 file
- **p-map**: 1 file
- **React Query**: 1 file
- **SemVer**: 1 file
- **util**: 1 file

## Frontend (packages/core/content-manager)

### The base

- **[React](https://seerepo.com/uses/react)**: 95 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 34 files

### Styles

- **styled-components**: 41 files

### Interface

- **react-dnd-html5-backend**: 4 files
- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 2 files
- **react-dnd**: 2 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 1 file
- **react-window**: 1 file

## Support (packages/core/content-manager)

### The base

- **Koa**: 2 files

### Content

- **prismjs**: 2 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **[highlight.js](https://seerepo.com/uses/highlightjs)**: 1 file
- **markdown-it**: 1 file
- **markdown-it-container**: 1 file
- **markdown-it-emoji**: 1 file

### Validation

- **yup**: 5 files

### Testing

- **Testing Library**: 15 files
- **msw**: 13 files

### Other

- **Lodash**: 43 files
- **qs**: 13 files
- **@reduxjs/toolkit**: 7 files
- **fractional-indexing**: 6 files
- **react-redux**: 5 files
- **date-fns**: 2 files
- **@casl/ability**: 1 file
- **Immer**: 1 file

## Frontend (packages/core/content-releases)

### The base

- **[React](https://seerepo.com/uses/react)**: 10 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 8 files

### Styles

- **styled-components**: 6 files

### Interface

- **Formik**: 3 files

## Support (packages/core/content-releases)

### The base

- **Koa**: 4 files

### Validation

- **yup**: 3 files

### Testing

- **msw**: 5 files
- **Testing Library**: 4 files

### Other

- **@reduxjs/toolkit**: 4 files
- **date-fns**: 4 files
- **date-fns-tz**: 3 files
- **Lodash**: 2 files
- **react-redux**: 2 files
- **qs**: 1 file

## Frontend (packages/core/content-type-builder)

### The base

- **[React](https://seerepo.com/uses/react)**: 71 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 10 files

### Styles

- **styled-components**: 37 files

### Interface

- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 6 files
- **react-dropzone**: 1 file

## Backend (packages/core/content-type-builder)

### AI

- **@ai-sdk/react**: 4 files
- **[ai](https://seerepo.com/uses/ai)**: 2 files

## Support (packages/core/content-type-builder)

### The base

- **Koa**: 6 files

### Content

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

### Validation

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

### Testing

- **Testing Library**: 14 files
- **Vitest**: 13 files
- **msw**: 1 file

### Other

- **Lodash**: 44 files
- **pluralize**: 6 files
- **react-redux**: 4 files
- **@reduxjs/toolkit**: 3 files
- **fs-extra**: 3 files
- **date-fns**: 1 file
- **jszip**: 1 file
- **micromatch**: 1 file
- **qs**: 1 file

## Frontend (packages/core/core)

### Interface

- **boxen**: 1 file

## Backend (packages/core/core)

### Sign-in

- **jsonwebtoken**: 2 files
- **bcryptjs**: 1 file

### Services

- **[MCP](https://seerepo.com/uses/mcp)**: 6 files · [packages/core/core/src/services/mcp/handlers/handlePost.ts, line 1](https://github.com/strapi/strapi/blob/958568e4ba76014f6e84587a4b9a2ba85d80207a/packages/core/core/src/services/mcp/handlers/handlePost.ts#L1)

## Support (packages/core/core)

### The base

- **Koa**: 9 files

### Validation

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

### Testing

- **Vitest**: 125 files
- **supertest**: 2 files

### Tools

- **glob**: 1 file
- **resolve.exports**: 1 file
- **TypeScript**: 1 file

### Other

- **Lodash**: 76 files
- **fs-extra**: 11 files
- **debug**: 3 files
- **@paralleldrive/cuid2**: 2 files
- **chalk**: 2 files
- **http-errors**: 2 files
- **qs**: 2 files
- **.ENV**: 1 file
- **@casl/ability**: 1 file
- **croner**: 1 file
- **global-agent**: 1 file
- **json-logic-js**: 1 file
- **mime-types**: 1 file
- **open**: 1 file
- **SemVer**: 1 file
- **undici**: 1 file

## Backend (packages/core/data-transfer)

### Data access

- **knex**: 4 files

## Support (packages/core/data-transfer)

### The base

- **Koa**: 1 file

### Testing

- **Vitest**: 1 file

### Other

- **Lodash**: 13 files
- **fs-extra**: 7 files
- **stream-chain**: 7 files
- **ws**: 5 files
- **stream-json**: 4 files
- **tar-stream**: 2 files
- **chalk**: 1 file
- **mime-types**: 1 file
- **SemVer**: 1 file
- **tar**: 1 file

## Backend (packages/core/database)

### Data access

- **knex**: 27 files

## Support (packages/core/database)

### Testing

- **Vitest**: 22 files

### Other

- **Lodash**: 25 files
- **fs-extra**: 5 files
- **debug**: 3 files
- **@paralleldrive/cuid2**: 1 file
- **date-fns**: 1 file

## Frontend (packages/core/email)

### The base

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

### Styles

- **styled-components**: 1 file

## Support (packages/core/email)

### The base

- **Koa**: 2 files

### Validation

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

### Testing

- **Vitest**: 2 files

### Other

- **Lodash**: 3 files
- **React Query**: 1 file

## Support (packages/core/openapi)

### Validation

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

### Tools

- **openapi-types**: 17 files

### Other

- **debug**: 1 file

## Support (packages/core/permissions)

### Testing

- **Vitest**: 2 files

### Other

- **Lodash**: 4 files
- **@casl/ability**: 3 files
- **qs**: 2 files

## Frontend (packages/core/review-workflows)

### The base

- **[React](https://seerepo.com/uses/react)**: 12 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 8 files

### Styles

- **styled-components**: 6 files

### Interface

- **react-dnd**: 2 files
- **react-dnd-html5-backend**: 1 file

## Support (packages/core/review-workflows)

### The base

- **Koa**: 4 files

### Validation

- **yup**: 1 file

### Testing

- **Vitest**: 11 files
- **msw**: 5 files
- **Testing Library**: 1 file

### Other

- **Lodash**: 10 files
- **@reduxjs/toolkit**: 2 files
- **date-fns**: 1 file
- **fractional-indexing**: 1 file
- **react-redux**: 1 file

## Frontend (packages/core/strapi)

### The base

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

### Styles

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

### Interface

- **ora**: 3 files
- **boxen**: 2 files
- **cli-progress**: 1 file

## Support (packages/core/strapi)

### The base

- **Koa**: 1 file

### Validation

- **yup**: 1 file

### Tools

- **commander**: 39 files
- **Inquirer**: 6 files
- **Webpack**: 3 files
- **browserslist-to-esbuild**: 2 files
- **resolve-from**: 2 files
- **@pmmmwh/react-refresh-webpack-plugin**: 1 file
- **@vitejs/plugin-react-swc**: 1 file
- **browserslist**: 1 file
- **chokidar**: 1 file
- **esbuild-loader**: 1 file
- **fork-ts-checker-webpack-plugin**: 1 file
- **html-webpack-plugin**: 1 file
- **mini-css-extract-plugin**: 1 file
- **Prettier**: 1 file
- **resolve.exports**: 1 file
- **TypeScript**: 1 file
- **webpack-bundle-analyzer**: 1 file
- **webpack-dev-middleware**: 1 file
- **webpack-hot-middleware**: 1 file

### Other

- **chalk**: 22 files
- **Lodash**: 13 files
- **fs-extra**: 10 files
- **execa**: 3 files
- **.ENV**: 2 files
- **SemVer**: 2 files

## Support (packages/core/types)

### The base

- **Koa**: 8 files

### Validation

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

### Tools

- **commander**: 1 file

### Other

- **@casl/ability**: 2 files
- **Lodash**: 2 files
- **croner**: 1 file
- **json-logic-js**: 1 file
- **undici**: 1 file

## Frontend (packages/core/upload)

### The base

- **[React](https://seerepo.com/uses/react)**: 107 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 10 files

### Styles

- **styled-components**: 65 files

### Interface

- **[dnd-kit](https://seerepo.com/uses/dnd-kit)**: 6 files
- **Formik**: 4 files
- **cropperjs**: 2 files
- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 2 files
- **react-select**: 2 files
- **react-dnd**: 1 file

## Support (packages/core/upload)

### The base

- **Koa**: 7 files

### Content

- **file-type**: 2 files
- **[sharp](https://seerepo.com/uses/sharp)**: 2 files

### Validation

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

### Testing

- **Testing Library**: 49 files
- **msw**: 21 files

### Other

- **Lodash**: 21 files
- **React Query**: 15 files
- **qs**: 6 files
- **react-redux**: 6 files
- **@reduxjs/toolkit**: 3 files
- **date-fns**: 3 files
- **fs-extra**: 3 files
- **Immer**: 3 files
- **mime-types**: 2 files
- **formidable**: 1 file

## Support (packages/core/utils)

### Validation

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

### Testing

- **Vitest**: 9 files

### Other

- **Lodash**: 31 files
- **date-fns**: 1 file
- **execa**: 1 file
- **http-errors**: 1 file
- **node-machine-id**: 1 file
- **p-map**: 1 file

## Support (packages/generators/generators)

### Content

- **handlebars**: 2 files

### Testing

- **Vitest**: 6 files

### Tools

- **jscodeshift**: 1 file

### Other

- **fs-extra**: 5 files
- **pluralize**: 2 files
- **Lodash**: 1 file

## Frontend (packages/plugins/cloud)

### The base

- **[React](https://seerepo.com/uses/react)**: 1 file
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 1 file

## Frontend (packages/plugins/color-picker)

### The base

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

### Styles

- **styled-components**: 2 files

### Interface

- **react-colorful**: 1 file

## Support (packages/plugins/color-picker)

### Testing

- **Testing Library**: 1 file
- **Vitest**: 1 file

## Support (packages/plugins/graphql)

### The base

- **@apollo/server**: 2 files
- **graphql-scalars**: 2 files
- **Koa**: 1 file

### Testing

- **Vitest**: 5 files

### Tools

- **@graphql-tools/schema**: 1 file

### Other

- **Lodash**: 23 files
- **GraphQL**: 5 files
- **@graphql-tools/utils**: 1 file
- **pluralize**: 1 file

## Frontend (packages/plugins/i18n)

### The base

- **[React](https://seerepo.com/uses/react)**: 12 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 5 files

### Styles

- **styled-components**: 3 files

## Support (packages/plugins/i18n)

### The base

- **Koa**: 1 file

### Validation

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

### Testing

- **msw**: 5 files
- **Testing Library**: 3 files

### Other

- **Lodash**: 15 files
- **@reduxjs/toolkit**: 5 files
- **qs**: 3 files
- **react-redux**: 1 file

## Backend (packages/plugins/sentry)

### Services

- **[Sentry](https://seerepo.com/uses/sentry)**: 1 file · [packages/plugins/sentry/server/src/services/sentry.ts, line 2](https://github.com/strapi/strapi/blob/958568e4ba76014f6e84587a4b9a2ba85d80207a/packages/plugins/sentry/server/src/services/sentry.ts#L2)

## Support (packages/plugins/sentry)

### Testing

- **Vitest**: 1 file

## Frontend (packages/plugins/users-permissions)

### The base

- **[React](https://seerepo.com/uses/react)**: 20 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 5 files

### Styles

- **styled-components**: 4 files

### Interface

- **Formik**: 3 files

## Backend (packages/plugins/users-permissions)

### Sign-in

- **jsonwebtoken**: 2 files
- **bcryptjs**: 1 file

## Support (packages/plugins/users-permissions)

### Validation

- **prop-types**: 10 files
- **yup**: 4 files
- **[Zod](https://seerepo.com/uses/zod)**: 2 files

### Testing

- **Testing Library**: 5 files
- **msw**: 1 file

### Other

- **Lodash**: 33 files
- **React Query**: 7 files
- **url-join**: 4 files
- **Immer**: 2 files

## Support (packages/providers/email-amazon-ses)

### Content

- **@aws-sdk/client-ses**: 2 files

### Testing

- **Vitest**: 3 files

## Support (packages/providers/email-mailgun)

### Testing

- **Vitest**: 1 file

### Other

- **form-data**: 1 file

## Support (packages/providers/email-nodemailer)

### Content

- **nodemailer**: 1 file

### Testing

- **Vitest**: 2 files

## Support (packages/providers/email-sendmail)

### Content

- **nodemailer**: 2 files

### Testing

- **Vitest**: 5 files

## Backend (packages/providers/upload-aws-s3)

### Data

- **aws-sdk**: 1 file

## Support (packages/providers/upload-aws-s3)

### Testing

- **Vitest**: 3 files

### Deploy

- **@aws-sdk/types**: 2 files

### Other

- **Lodash**: 1 file

## Support (packages/providers/upload-local)

### Testing

- **Vitest**: 1 file

### Other

- **fs-extra**: 1 file

## Support (packages/utils/logger)

### Deploy

- **winston**: 9 files

## Support (packages/utils/typescript)

### Tools

- **TypeScript**: 13 files
- **Prettier**: 1 file

### Other

- **Lodash**: 8 files
- **fs-extra**: 3 files
- **chalk**: 2 files

## Frontend (packages/utils/upgrade)

### Interface

- **prompts**: 2 files

## Support (packages/utils/upgrade)

### Testing

- **memfs**: 10 files

### Tools

- **jscodeshift**: 10 files
- **commander**: 4 files
- **fast-glob**: 1 file
- **simple-git**: 1 file

### Other

- **SemVer**: 12 files
- **chalk**: 5 files
- **fs-extra**: 3 files
- **Lodash**: 3 files
- **execa**: 1 file
- **undici**: 1 file

## Other repos with a similar stack

- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): React, react-router-dom, MCP, Vite, Sentry, Zod, Ajv, ajv-formats, motion, dnd-kit, Radix UI, dompurify, ai, react-markdown, Tailwind CSS, sharp · [Compare](https://seerepo.com/compare/paperclipai/paperclip/vs/strapi/strapi)
- [supabase/supabase](https://seerepo.com/r/supabase/supabase/built): React, MCP, Vite, Sentry, Zod, motion, sonner, dnd-kit, Radix UI, react-dropzone, @ai-sdk/react, ai, react-markdown, Tailwind CSS · [Compare](https://seerepo.com/compare/strapi/strapi/vs/supabase/supabase)
- [ruvnet/ruflo](https://seerepo.com/r/ruvnet/ruflo/built): React, react-router-dom, MCP, Vite, bcryptjs, Zod, Ajv, sonner, Radix UI, highlight.js, Tailwind CSS, file-type, sharp, handlebars · [Compare](https://seerepo.com/compare/ruvnet/ruflo/vs/strapi/strapi)
- [n8n-io/n8n](https://seerepo.com/r/n8n-io/n8n/built): MCP, Vite, Sentry, jsonwebtoken, bcryptjs, Zod, Ajv, highlight.js, markdown-it, ai, file-type, nodemailer, winston · [Compare](https://seerepo.com/compare/n8n-io/n8n/vs/strapi/strapi)
- [Significant-Gravitas/AutoGPT](https://seerepo.com/r/Significant-Gravitas/AutoGPT/built): React, Sentry, bcryptjs, Zod, motion, sonner, Radix UI, react-window, highlight.js, @ai-sdk/react, ai, react-markdown, Tailwind CSS · [Compare](https://seerepo.com/compare/Significant-Gravitas/AutoGPT/vs/strapi/strapi)
- [shadcn-ui/ui](https://seerepo.com/r/shadcn-ui/ui/built): React, MCP, Vite, Zod, ora, motion, sonner, dnd-kit, Radix UI, @ai-sdk/react, ai, Tailwind CSS, prompts · [Compare](https://seerepo.com/compare/shadcn-ui/ui/vs/strapi/strapi)

## Frequently asked questions

### What language is strapi written in?

strapi is written in TypeScript, with 804,883 written lines.

### What framework does strapi use?

strapi is built with React, react-router-dom, Koa, Vite, @apollo/server, and graphql-scalars.

### What does strapi sign people in with?

strapi signs people in with jsonwebtoken, bcryptjs, and passport-local.

### Does strapi use AI?

Yes. strapi uses AI through @ai-sdk/react and ai.

### What services does strapi use?

strapi watches its errors with Sentry and uses MCP and aws-sdk.

The proof: [packages/plugins/sentry/server/src/services/sentry.ts, line 2](https://github.com/strapi/strapi/blob/958568e4ba76014f6e84587a4b9a2ba85d80207a/packages/plugins/sentry/server/src/services/sentry.ts#L2)

### Does strapi have tests?

Yes. strapi has 1,980 test files and is tested with @playwright/test, supertest, Vitest, Jest, Testing Library, msw, and memfs.

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

The ones that share most of its stack: paperclipai/paperclip, supabase/supabase, and ruvnet/ruflo.

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