# PeerTube

Federated self-hosted video platform with live streaming, an OpenAPI REST API, and peertube-cli.

Framasoft's ActivityPub video platform: upload, transcode, live stream, moderate, and federate from your own server. Everything the web client does goes through the documented REST API, and configuration is a production.yaml file.

Alternative to: YouTube, Vimeo

- Capabilities: adaptable, operable
- Vertical: video-streaming
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/Chocobozzz/PeerTube (AGPL-3.0), 15297 stars, last commit 2026-08-28
- Last activity: 2026-08-28
- Page: apps/chocobozzz--peertube.html
- JSON: apps/chocobozzz--peertube.json

## Use it when

- I need to host training or community video on my own domain with an API my agent can upload to
- I want live streaming plus VOD without YouTube's policies, and I can accept AGPL

## Gotchas

- AGPL-3.0; modifications to a public instance must be published
- Needs PostgreSQL, Redis, nginx, and ffmpeg; the FAQ warns transcoding is CPU-heavy
- YAML config is read at start; restart after edits

## Editions

- Free: Free, open source
  - source: https://github.com/Chocobozzz/PeerTube
  - container: https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/docker.md
  - installable: https://docs.joinpeertube.org/install/any-os

## Adaptable: make it yours

Effort: config-only (12 things to edit)

Copy config/production.yaml.example to config/production.yaml and set webserver, database, redis, smtp, transcoding, live, and storage. Docker deployments override with PEERTUBE_* variables. Runtime settings land in config/local-production.json through the admin UI or API. Plugins and themes extend behavior without forking.

- Env vars: PEERTUBE_* (Docker overrides), PT_INITIAL_ROOT_PASSWORD, NODE_ENV, NODE_CONFIG_DIR, FFMPEG_PATH, FFPROBE_PATH, YOUTUBE_DL_DOWNLOAD_BEARER_TOKEN, HTTP_PROXY, HTTPS_PROXY
- Config files: config/production.yaml, config/default.yaml, config/local-production.json
- Prompt files: none
- Accounts you'll need: none

## Operable: what an agent can drive

Operability: official. Interface: api at https://docs.joinpeertube.org/api-rest-reference.html (published by the builder, local).

### Reach (partial coverage)

- Upload and import videos: reachable. REST API videos/upload and imports; docs.joinpeertube.org/maintain/tools covers CLI import
- Manage channels and playlists: reachable. REST API video-channels and video-playlists sections
- Create and manage live streams: reachable. REST API videos/live; README: permanent live streams supported
- Moderate: abuses, blocklists, comments: reachable. REST API abuses and server blocklist sections
- Manage users and registrations: reachable. REST API users section
- Follow and unfollow other instances: reachable. REST API server following; docs admin/following-instances
- Change instance configuration at runtime: reachable. REST API config/custom writes local-production.json, reloaded on the fly
- Install plugins and themes: reachable. REST API plugins section (admin)
- Run remote transcoding runners: reachable. REST API runners section
- Serve video P2P to viewers: not reachable. Browser-side WebRTC behavior; no API action, it is a viewer feature

## Code stack

- Languages: TypeScript
- Frameworks: Angular, Express, ffmpeg
- Package manager: npm
- Database: PostgreSQL, Redis
- Hosting target: Linux server, Docker, YunoHost

## Evidence and confidence

- formFactor: README: web platform, Angular client, server on any OS (confidence 0.99)
- executionModel: no model at runtime; ffmpeg transcoding (confidence 0.99)
- operability: OpenAPI schema at support/doc/api/openapi.yaml and docs.joinpeertube.org/api-rest-reference.html, published by the PeerTube project (confidence 0.95)
- effort: docs.joinpeertube.org/maintain/configuration: production.yaml overrides default.yaml; PEERTUBE_* env for Docker (confidence 0.9)
- editions: README license section: AGPL-3.0; no paid edition (confidence 0.99)
- active: GitHub pushedAt 2026-08-28; release v8.2.4 2026-08-04
- reach:  (confidence 0.85)

## Open questions

- Confirm the exact PEERTUBE_* variable names from support/docker/production/.env

## Sources

- https://joinpeertube.org/ (sourcing:video-streaming:curated)
- https://github.com/Chocobozzz/PeerTube (sourcing:video-streaming:curated)
- https://docs.joinpeertube.org/maintain/configuration (analysis)
