Source: https://seerepo.com/r/Chocobozzz/PeerTube/built
Markdown source: https://seerepo.com/r/Chocobozzz/PeerTube/built.md
Description: PeerTube is a TypeScript repo built with Angular and Express. It stores its data in bullmq, lru-cache, aws-sdk, and sequelize-pool.

# What is PeerTube built with?

PeerTube is a TypeScript repo built with Angular and Express. It stores its data in bullmq, lru-cache, aws-sdk, and sequelize-pool, reaches it with Sequelize and sequelize-typescript, signs people in with otpauth, @node-oauth/oauth2-server, helmet, bcrypt, and jsonwebtoken, stores files in AWS S3, uses AI through jiwer, makes its content with angularx-qrcode, markdown-it-emoji, dompurify, markdown-it, node-html-parser, and 5 more, validates its data with validator and express-validator, is tested with Chai and supertest, deploys with winston, pino, pino-pretty, @angular/service-worker, opentelemetry, and 1 more, and uses Redis, @opentelemetry/instrumentation-ioredis, and Postgres. It has 370,776 written lines, with 450 test files.

Read on November 8, 2026, at commit 929ab32.

Repository: https://github.com/Chocobozzz/PeerTube

## Frontend (apps/peertube-cli)

### Interface

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

## Support (apps/peertube-cli)

### Deploy

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

### Tools

- **@commander-js/extra-typings**: 6 files
- **cli-table3**: 3 files

### Other

- **bytes**: 1 file

## Support (apps/peertube-runner)

### Deploy

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

### Tools

- **@commander-js/extra-typings**: 1 file
- **cli-table3**: 1 file

### Other

- **fs-extra**: 11 files
- **env-paths**: 1 file
- **fluent-ffmpeg**: 1 file
- **follow-redirects**: 1 file
- **Lodash**: 1 file
- **smol-toml**: 1 file
- **socket.io-client**: 1 file

## Frontend (client)

### The base

- **[Angular](https://seerepo.com/uses/angular)**: 475 files · [in client/package.json](https://github.com/Chocobozzz/PeerTube/blob/929ab32025851039628843c5f7839dd1b703d0e3/client/package.json)

### Interface

- **@ng-bootstrap/ng-bootstrap**: 95 files
- **@angular/cdk**: 18 files
- **[Chart.js](https://seerepo.com/uses/chartjs)**: 3 files
- **chartjs-plugin-zoom**: 1 file
- **video.js**: 1 file

## Support (client)

### Content

- **angularx-qrcode**: 3 files
- **[markdown-it-emoji](https://seerepo.com/uses/markdown-it-emoji)**: 2 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **[markdown-it](https://seerepo.com/uses/markdown-it)**: 1 file

### Deploy

- **@angular/service-worker**: 1 file

### Tools

- **type-fest**: 4 files

### Other

- **rxjs**: 207 files
- **debug**: 43 files
- **Lodash**: 16 files
- **color-bits**: 2 files
- **core-js**: 2 files
- **socket.io-client**: 2 files
- **@angular/localize**: 1 file
- **intl-messageformat**: 1 file
- **linkifyjs**: 1 file
- **punycode.js**: 1 file
- **tinykeys**: 1 file
- **ua-parser-js**: 1 file
- **zone.js**: 1 file

## Frontend (client/src/standalone/player)

### Interface

- **video.js**: 53 files

## Support (client/src/standalone/player)

### Other

- **debug**: 9 files
- **hls.js**: 4 files
- **sha.js**: 1 file
- **ua-parser-js**: 1 file

## Support (packages/core-utils)

### Tools

- **type-fest**: 1 file

## Support (packages/ffmpeg)

### Other

- **fluent-ffmpeg**: 10 files
- **async-mutex**: 4 files

## Support (packages/models)

### Other

- **fluent-ffmpeg**: 1 file

## Support (packages/node-utils)

### Other

- **short-uuid**: 1 file
- **uuid**: 1 file

## Backend (packages/server-commands)

### Sign-in

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

## Support (packages/server-commands)

### Validation

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

### Testing

- **Chai**: 3 files
- **supertest**: 1 file

### Other

- **Lodash**: 5 files
- **fs-extra**: 4 files
- **fluent-ffmpeg**: 1 file
- **got**: 1 file
- **socket.io-client**: 1 file

## Backend (packages/transcription-devtools)

### AI

- **jiwer**

## Support (packages/transcription-devtools)

### Deploy

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

### Other

- **execa**: 2 files
- **fs-extra**: 1 file

## Support (packages/transcription)

### Other

- **execa**: 1 file
- **fs-extra**: 1 file

## Support (packages/types-generator)

### Tools

- **depcheck**: 1 file

### Other

- **fs-extra**: 1 file

## Backend (server)

### The base

- **[Express](https://seerepo.com/uses/express)**: 243 files · [in package.json](https://github.com/Chocobozzz/PeerTube/blob/929ab32025851039628843c5f7839dd1b703d0e3/package.json)

### Data

- **[bullmq](https://seerepo.com/uses/bullmq)**: 37 files
- **[lru-cache](https://seerepo.com/uses/lru-cache)**: 11 files
- **[Redis](https://seerepo.com/uses/redis)**: 4 files · [server/core/initializers/config/config-loader.ts, line 215](https://github.com/Chocobozzz/PeerTube/blob/929ab32025851039628843c5f7839dd1b703d0e3/server/core/initializers/config/config-loader.ts#L215)
- **[aws-sdk](https://seerepo.com/uses/aws-sdk)**: 3 files
- **sequelize-pool**: 2 files
- **@opentelemetry/instrumentation-ioredis**: 1 file
- **[Postgres](https://seerepo.com/uses/postgres)**: 1 file · [server/core/initializers/database.ts, line 39](https://github.com/Chocobozzz/PeerTube/blob/929ab32025851039628843c5f7839dd1b703d0e3/server/core/initializers/database.ts#L39)

### Data access

- **Sequelize**: 284 files
- **sequelize-typescript**: 83 files

### Sign-in

- **@node-oauth/oauth2-server**: 3 files
- **[helmet](https://seerepo.com/uses/helmet)**: 2 files
- **[bcrypt](https://seerepo.com/uses/bcrypt)**: 1 file
- **[jsonwebtoken](https://seerepo.com/uses/jsonwebtoken)**: 1 file
- **[otpauth](https://seerepo.com/uses/otpauth)**: 1 file

### Services

- **[AWS S3](https://seerepo.com/uses/aws-s3)**: 5 files · [server/core/initializers/checker-after-init.ts, line 102](https://github.com/Chocobozzz/PeerTube/blob/929ab32025851039628843c5f7839dd1b703d0e3/server/core/initializers/checker-after-init.ts#L102)

## Support (server)

### Content

- **[node-html-parser](https://seerepo.com/uses/node-html-parser)**: 2 files
- **[sanitize-html](https://seerepo.com/uses/sanitize-html)**: 2 files
- **[handlebars](https://seerepo.com/uses/handlebars)**: 1 file
- **linkify-it**: 1 file
- **[markdown-it](https://seerepo.com/uses/markdown-it)**: 1 file
- **[markdown-it-emoji](https://seerepo.com/uses/markdown-it-emoji)**: 1 file
- **[nodemailer](https://seerepo.com/uses/nodemailer)**: 1 file
- **[sharp](https://seerepo.com/uses/sharp)**: 1 file

### Validation

- **express-validator**: 70 files
- **[validator](https://seerepo.com/uses/validator)**: 40 files

### Deploy

- **opentelemetry**: 3 files
- **[winston](https://seerepo.com/uses/winston)**: 2 files
- **[morgan](https://seerepo.com/uses/morgan)**: 1 file

### Tools

- **@commander-js/extra-typings**: 1 file
- **sitemap**: 1 file
- **sql-formatter**: 1 file
- **type-fest**: 1 file

### Other

- **fs-extra**: 69 files
- **[OpenTelemetry](https://seerepo.com/uses/opentelemetry)**: 14 files
- **fluent-ffmpeg**: 13 files
- **Lodash**: 13 files
- **cors**: 10 files
- **multer**: 8 files
- **memoizee**: 7 files
- **p-queue**: 5 files
- **async-mutex**: 4 files
- **execa**: 3 files
- **parse-torrent**: 3 files
- **@smithy/node-http-handler**: 2 files
- **cookie-parser**: 2 files
- **express-rate-limit**: 2 files
- **ipaddr.js**: 2 files
- **Socket.io**: 2 files
- **archiver**: 1 file
- **bytes**: 1 file
- **cacheable-lookup**: 1 file
- **config**: 1 file
- **content-disposition**: 1 file
- **create-torrent**: 1 file
- **got**: 1 file
- **i18next**: 1 file
- **i18next-icu**: 1 file
- **iso-639-3**: 1 file
- **maxmind**: 1 file
- **piscina**: 1 file
- **proxy-addr**: 1 file
- **ua-parser-js**: 1 file
- **ws**: 1 file
- **yauzl**: 1 file

## Other repos with a similar stack

- [novuhq/novu](https://seerepo.com/r/novuhq/novu/built): Express, bullmq, lru-cache, Redis, aws-sdk, prompts, pino, helmet, bcrypt, jsonwebtoken, node-html-parser, sanitize-html, handlebars, nodemailer, sharp, opentelemetry · [Compare](https://seerepo.com/compare/Chocobozzz/PeerTube/vs/novuhq/novu)
- [HeyPuter/puter](https://seerepo.com/r/HeyPuter/puter/built): Express, Redis, aws-sdk, Postgres, AWS S3, otpauth, validator, helmet, bcrypt, jsonwebtoken, handlebars, nodemailer, sharp, opentelemetry · [Compare](https://seerepo.com/compare/Chocobozzz/PeerTube/vs/HeyPuter/puter)
- [ToolJet/ToolJet](https://seerepo.com/r/ToolJet/ToolJet/built): Express, bullmq, Redis, aws-sdk, Postgres, winston, dompurify, otpauth, @node-oauth/oauth2-server, helmet, bcrypt, sanitize-html, handlebars, nodemailer · [Compare](https://seerepo.com/compare/Chocobozzz/PeerTube/vs/ToolJet/ToolJet)
- [n8n-io/n8n](https://seerepo.com/r/n8n-io/n8n/built): Express, lru-cache, Redis, Postgres, winston, Chart.js, markdown-it, otpauth, validator, jsonwebtoken, sanitize-html, nodemailer, opentelemetry · [Compare](https://seerepo.com/compare/Chocobozzz/PeerTube/vs/n8n-io/n8n)
- [immich-app/immich](https://seerepo.com/r/immich-app/immich/built): Express, bullmq, Redis, @opentelemetry/instrumentation-ioredis, Postgres, validator, helmet, bcrypt, jsonwebtoken, handlebars, nodemailer, sharp, opentelemetry · [Compare](https://seerepo.com/compare/Chocobozzz/PeerTube/vs/immich-app/immich)
- [twentyhq/twenty](https://seerepo.com/r/twentyhq/twenty/built): Express, bullmq, Redis, aws-sdk, Postgres, AWS S3, dompurify, bcrypt, jsonwebtoken, sanitize-html, nodemailer, sharp, opentelemetry · [Compare](https://seerepo.com/compare/Chocobozzz/PeerTube/vs/twentyhq/twenty)

## Frequently asked questions

### What language is PeerTube written in?

PeerTube is written in TypeScript, with 370,776 written lines.

### What framework does PeerTube use?

PeerTube is built with Angular and Express.

The proof: [in client/package.json](https://github.com/Chocobozzz/PeerTube/blob/929ab32025851039628843c5f7839dd1b703d0e3/client/package.json)

### What database does PeerTube use?

PeerTube stores its data in bullmq, lru-cache, aws-sdk, and sequelize-pool and reaches it with Sequelize and sequelize-typescript.

### What does PeerTube sign people in with?

PeerTube signs people in with otpauth, @node-oauth/oauth2-server, helmet, bcrypt, and jsonwebtoken.

### Does PeerTube use AI?

Yes. PeerTube uses AI through jiwer.

### What services does PeerTube use?

PeerTube stores files in AWS S3 and uses Redis, @opentelemetry/instrumentation-ioredis, and Postgres.

The proof: [server/core/initializers/checker-after-init.ts, line 102](https://github.com/Chocobozzz/PeerTube/blob/929ab32025851039628843c5f7839dd1b703d0e3/server/core/initializers/checker-after-init.ts#L102)

### Does PeerTube have tests?

Yes. PeerTube has 450 test files and is tested with Chai and supertest.

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

The ones that share most of its stack: novuhq/novu, HeyPuter/puter, and ToolJet/ToolJet.

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