Source: https://seerepo.com/r/ether/etherpad/built
Markdown source: https://seerepo.com/r/ether/etherpad/built.md
Description: etherpad is a TypeScript repo built with Vite, React, react-router-dom, and Express. It stores its data in lru-cache.

# What is etherpad built with?

etherpad is a TypeScript repo built with Vite, React, react-router-dom, and Express. It stores its data in lru-cache, signs people in with express-session, jose, and oidc-provider, makes its content with htmlparser2, EJS, entities, html-to-docx, mammoth, and 3 more, is tested with @playwright/test, Vitest, supertest, sinon, jsdom, and 1 more, and deploys with prom-client. It has 97,129 written lines, with 294 test files.

Read on November 6, 2026, at commit 4aec490.

Repository: https://github.com/ether/etherpad

## Frontend (admin)

### The base

- **[Vite](https://seerepo.com/uses/vite)**: [in admin/package.json](https://github.com/ether/etherpad/blob/4aec49099bd7dd97f1133a232f693a4080176a80/admin/package.json)
- **[React](https://seerepo.com/uses/react)**: 20 files · [in admin/package.json](https://github.com/ether/etherpad/blob/4aec49099bd7dd97f1133a232f693a4080176a80/admin/package.json)
- **[react-router-dom](https://seerepo.com/uses/react-router-dom)**: 4 files

### Interface

- **[Radix UI](https://seerepo.com/uses/radix-ui)**: 7 files
- **[React Hook Form](https://seerepo.com/uses/react-hook-form)**: 2 files

### Icons

- **[Lucide](https://seerepo.com/uses/lucide)**: 9 files

## Support (admin)

### Tools

- **@tanstack/react-query-devtools**: 1 file

### Other

- **react-i18next**: 17 files
- **jsonc-parser**: 11 files
- **i18next**: 2 files
- **socket.io-client**: 2 files
- **i18next-browser-languagedetector**: 1 file
- **openapi-fetch**: 1 file
- **openapi-react-query**: 1 file
- **[TanStack](https://seerepo.com/uses/tanstack)**: 1 file
- **zustand**: 1 file

## Backend (src)

### The base

- **[Express](https://seerepo.com/uses/express)**: 6 files · [in src/package.json](https://github.com/ether/etherpad/blob/4aec49099bd7dd97f1133a232f693a4080176a80/src/package.json)

### Data

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

### Sign-in

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

## Support (src)

### Content

- **[htmlparser2](https://seerepo.com/uses/htmlparser2)**: 2 files
- **EJS**: 1 file
- **[entities](https://seerepo.com/uses/entities)**: 1 file
- **html-to-docx**: 1 file
- **[mammoth](https://seerepo.com/uses/mammoth)**: 1 file
- **[nodemailer](https://seerepo.com/uses/nodemailer)**: 1 file
- **pdfkit**: 1 file
- **rehype**: 1 file

### Testing

- **@playwright/test**: 82 files
- **Vitest**: 53 files
- **supertest**: 7 files
- **sinon**: 6 files
- **jsdom**: 5 files
- **Mocha**: 2 files

### Deploy

- **[prom-client](https://seerepo.com/uses/prom-client)**: 3 files

### Tools

- **esbuild**: 3 files
- **chokidar**: 1 file
- **resolve**: 1 file
- **wtfnode**: 1 file

### Other

- **underscore**: 9 files
- **set-cookie-parser**: 8 files
- **formidable**: 5 files
- **SemVer**: 5 files
- **cross-spawn**: 3 files
- **http-errors**: 3 files
- **superagent**: 3 files
- **async**: 2 files
- **cookie-parser**: 1 file
- **express-rate-limit**: 1 file
- **js-cookie**: 1 file
- **jsonc-parser**: 1 file
- **Lodash**: 1 file
- **mime-types**: 1 file
- **proxy-addr**: 1 file
- **rate-limiter-flexible**: 1 file
- **Socket.io**: 1 file
- **socket.io-client**: 1 file
- **undici**: 1 file

## Other repos with a similar stack

- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Vite, React, Express, lru-cache, Radix UI, React Hook Form, Lucide, express-session, jose, entities, nodemailer · [Compare](https://seerepo.com/compare/ether/etherpad/vs/TryGhost/Ghost)
- [ruvnet/ruflo](https://seerepo.com/r/ruvnet/ruflo/built): Vite, React, react-router-dom, Express, Radix UI, React Hook Form, Lucide, jose, htmlparser2, prom-client · [Compare](https://seerepo.com/compare/ether/etherpad/vs/ruvnet/ruflo)
- [novuhq/novu](https://seerepo.com/r/novuhq/novu/built): Vite, React, react-router-dom, Express, lru-cache, Radix UI, React Hook Form, Lucide, entities, nodemailer · [Compare](https://seerepo.com/compare/ether/etherpad/vs/novuhq/novu)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Vite, React, react-router-dom, Express, React Hook Form, express-session, jose, entities, nodemailer · [Compare](https://seerepo.com/compare/ether/etherpad/vs/twentyhq/twenty)
- [RocketChat/Rocket.Chat](https://seerepo.com/r/RocketChat/Rocket.Chat/built): Vite, React, react-router-dom, Express, React Hook Form, express-session, jose, nodemailer, prom-client · [Compare](https://seerepo.com/compare/ether/etherpad/vs/RocketChat/Rocket.Chat)
- [calcom/cal.diy](https://seerepo.com/r/calcom/cal.diy/built): React, lru-cache, Radix UI, React Hook Form, Lucide, jose, entities, nodemailer · [Compare](https://seerepo.com/compare/calcom/cal.diy/vs/ether/etherpad)

## Frequently asked questions

### What language is etherpad written in?

etherpad is written in TypeScript, with 97,129 written lines.

### What framework does etherpad use?

etherpad is built with Vite, React, react-router-dom, and Express.

The proof: [in admin/package.json](https://github.com/ether/etherpad/blob/4aec49099bd7dd97f1133a232f693a4080176a80/admin/package.json)

### What database does etherpad use?

etherpad stores its data in lru-cache.

### What does etherpad sign people in with?

etherpad signs people in with express-session, jose, and oidc-provider.

### Does etherpad have tests?

Yes. etherpad has 294 test files and is tested with @playwright/test, Vitest, supertest, sinon, jsdom, and Mocha.

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

The ones that share most of its stack: TryGhost/Ghost, ruvnet/ruflo, and novuhq/novu.

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