Source: https://seerepo.com/r/MetaMask/metamask-extension/built
Markdown source: https://seerepo.com/r/MetaMask/metamask-extension/built.md
Description: metamask-extension is a TypeScript repo built with React, react-router-dom, and Koa. It signs people in with @simplewebauthn/browser and jsonwebtoken.

# What is metamask-extension built with?

metamask-extension is a TypeScript repo built with React, react-router-dom, and Koa. It signs people in with @simplewebauthn/browser and jsonwebtoken, watches its errors with Sentry, connects to GitHub, makes its content with qrcode-generator, qrcode.react, dompurify, he, react-markdown, and 3 more, validates its data with prop-types, is tested with Testing Library, redux-mock-store, mockttp, Mocha, Jest, and 7 more, deploys with serve-handler, and uses localforage. It has 1,537,435 written lines, with 3,172 test files.

Read on November 10, 2026, at commit 854e9e7.

Repository: https://github.com/MetaMask/metamask-extension

## Frontend

### The base

- **[React](https://seerepo.com/uses/react)**: 2,056 files
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 307 files

### Styles

- **[Autoprefixer](https://seerepo.com/uses/autoprefixer)**: 1 file
- **[PostCSS](https://seerepo.com/uses/postcss)**: 1 file
- **postcss-rtlcss**: 1 file
- **sass-embedded**: 1 file
- **[Tailwind CSS](https://seerepo.com/uses/tailwind-css)**: 1 file

### Interface

- **@rive-app/react-canvas**: 11 files
- **[MUI](https://seerepo.com/uses/mui)**: 6 files
- **[Chart.js](https://seerepo.com/uses/chartjs)**: 4 files
- **[@tanstack/react-virtual](https://seerepo.com/uses/tanstack-react-virtual)**: 3 files
- **[react-hot-toast](https://seerepo.com/uses/react-hot-toast)**: 2 files
- **react-popper**: 2 files
- **[react-transition-group](https://seerepo.com/uses/react-transition-group)**: 2 files
- **@hello-pangea/dnd**: 1 file
- **lightweight-charts**: 1 file
- **lottie-web**: 1 file
- **[react-chartjs-2](https://seerepo.com/uses/react-chartjs-2)**: 1 file
- **react-focus-lock**: 1 file
- **react-idle-timer**: 1 file
- **react-toggle-button**: 1 file

## Backend

### The base

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

### Data

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

### Sign-in

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

### Services

- **[GitHub](https://seerepo.com/uses/github)**: 1 file · [development/download-builds-cli.ts, line 85](https://github.com/MetaMask/metamask-extension/blob/854e9e71def3295fe90b18a74fb8b5bbdfaef105/development/download-builds-cli.ts#L85)
- **[Sentry](https://seerepo.com/uses/sentry)**: 1 file · [shared/lib/trace.ts, line 2](https://github.com/MetaMask/metamask-extension/blob/854e9e71def3295fe90b18a74fb8b5bbdfaef105/shared/lib/trace.ts#L2)

## Support

### Content

- **qrcode-generator**: 5 files
- **[qrcode.react](https://seerepo.com/uses/qrcodereact)**: 2 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **he**: 1 file
- **[react-markdown](https://seerepo.com/uses/react-markdown)**: 1 file
- **[sharp](https://seerepo.com/uses/sharp)**: 1 file
- **[xml2js](https://seerepo.com/uses/xml2js)**: 1 file
- **[yaml](https://seerepo.com/uses/yaml)**: 1 file

### Validation

- **[prop-types](https://seerepo.com/uses/prop-types)**: 224 files

### Testing

- **Testing Library**: 1,272 files
- **redux-mock-store**: 385 files
- **mockttp**: 234 files
- **Mocha**: 177 files
- **Jest**: 61 files
- **Selenium**: 50 files
- **nock**: 39 files
- **@playwright/test**: 31 files
- **sinon**: 6 files
- **fake-indexeddb**: 3 files
- **jest-canvas-mock**: 1 file
- **jsdom**: 1 file

### Deploy

- **serve-handler**: 1 file

### Tools

- **Webpack**: 19 files
- **webpack-dev-server**: 5 files
- **schema-utils**: 4 files
- **yargs**: 4 files
- **json-schema-to-ts**: 3 files
- **ESLint**: 2 files
- **madge**: 2 files
- **Prettier**: 2 files
- **SWC**: 2 files
- **tsx**: 2 files
- **TypeScript**: 2 files
- **actions**: 1 file
- **Babel**: 1 file
- **browserslist**: 1 file
- **commander**: 1 file
- **copy-webpack-plugin**: 1 file
- **eslint-plugin-react**: 1 file
- **eslint-plugin-react-hooks**: 1 file
- **eslint-plugin-storybook**: 1 file
- **eslint-plugin-tailwindcss**: 1 file
- **fast-glob**: 1 file
- **globby**: 1 file
- **mini-css-extract-plugin**: 1 file
- **react-compiler-webpack**: 1 file
- **source-map**: 1 file
- **terser-webpack-plugin**: 1 file
- **typescript-eslint**: 1 file

### Other

- **react-redux**: 843 files
- **clsx**: 195 files
- **bignumber.js**: 114 files
- **Lodash**: 85 files
- **loglevel**: 74 files
- **reselect**: 60 files
- **[TanStack](https://seerepo.com/uses/tanstack)**: 30 files
- **webextension-polyfill**: 19 files
- **@reduxjs/toolkit**: 16 files
- **uuid**: 12 files
- **Redux**: 11 files
- **luxon**: 9 files
- **viem**: 9 files
- **SemVer**: 8 files
- **ws**: 7 files
- **Ethers**: 5 files
- **uri-js**: 4 files
- **@metamask/eth-sig-util**: 3 files
- **bowser**: 3 files
- **chalk**: 3 files
- **fuse.js**: 3 files
- **@lydell/node-pty**: 2 files
- **bs58**: 2 files
- **fast-json-stable-stringify**: 2 files
- **Immer**: 2 files
- **noble**: 2 files
- **node-fetch**: 2 files
- **redux-thunk**: 2 files
- **yargs-parser**: 2 files
- **.ENV**: 1 file
- **@scure/base**: 1 file
- **base64-js**: 1 file
- **buffer**: 1 file
- **detect-port**: 1 file
- **duplexify**: 1 file
- **fs-extra**: 1 file
- **humanize-duration**: 1 file
- **ip-regex**: 1 file
- **micromatch**: 1 file
- **process**: 1 file
- **punycode**: 1 file
- **readable-stream**: 1 file
- **rxjs**: 1 file
- **sprintf-js**: 1 file
- **string.prototype.matchall**: 1 file
- **tweetnacl**: 1 file
- **unzipper**: 1 file
- **web-vitals**: 1 file
- **yazl**: 1 file

## Other repos with a similar stack

- [strapi/strapi](https://seerepo.com/r/strapi/strapi/built): React, react-router-dom, Koa, Sentry, Tailwind CSS, jsonwebtoken, dompurify, react-markdown, sharp, prop-types · [Compare](https://seerepo.com/compare/MetaMask/metamask-extension/vs/strapi/strapi)
- [CherryHQ/cherry-studio](https://seerepo.com/r/CherryHQ/cherry-studio/built): React, Sentry, PostCSS, Tailwind CSS, @tanstack/react-virtual, qrcode.react, dompurify, sharp, yaml · [Compare](https://seerepo.com/compare/CherryHQ/cherry-studio/vs/MetaMask/metamask-extension)
- [RocketChat/Rocket.Chat](https://seerepo.com/r/RocketChat/Rocket.Chat/built): React, react-router-dom, localforage, GitHub, Chart.js, @hello-pangea/dnd, dompurify, he, sharp · [Compare](https://seerepo.com/compare/MetaMask/metamask-extension/vs/RocketChat/Rocket.Chat)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): React, react-router-dom, Sentry, Tailwind CSS, dompurify, react-markdown, sharp, yaml · [Compare](https://seerepo.com/compare/MetaMask/metamask-extension/vs/paperclipai/paperclip)
- [Mintplex-Labs/anything-llm](https://seerepo.com/r/Mintplex-Labs/anything-llm/built): React, react-router-dom, Tailwind CSS, jsonwebtoken, qrcode.react, dompurify, he, sharp · [Compare](https://seerepo.com/compare/MetaMask/metamask-extension/vs/Mintplex-Labs/anything-llm)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): React, react-router-dom, Sentry, PostCSS, jsonwebtoken, dompurify, react-markdown, sharp · [Compare](https://seerepo.com/compare/MetaMask/metamask-extension/vs/twentyhq/twenty)

## Frequently asked questions

### What language is metamask-extension written in?

metamask-extension is written in TypeScript, with 1,537,435 written lines.

### What framework does metamask-extension use?

metamask-extension is built with React, react-router-dom, and Koa.

### What does metamask-extension sign people in with?

metamask-extension signs people in with @simplewebauthn/browser and jsonwebtoken.

### What services does metamask-extension use?

metamask-extension watches its errors with Sentry, connects to GitHub, and uses localforage.

The proof: [shared/lib/trace.ts, line 2](https://github.com/MetaMask/metamask-extension/blob/854e9e71def3295fe90b18a74fb8b5bbdfaef105/shared/lib/trace.ts#L2)

### Does metamask-extension have tests?

Yes. metamask-extension has 3,172 test files and is tested with Testing Library, redux-mock-store, mockttp, Mocha, Jest, Selenium, nock, @playwright/test, sinon, fake-indexeddb, jest-canvas-mock, and jsdom.

### Which repos have a stack like metamask-extension's?

The ones that share most of its stack: strapi/strapi, CherryHQ/cherry-studio, and RocketChat/Rocket.Chat.

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