Features
Everything in v0.5.0, in the order you meet it.
Grouped by lifecycle rather than by marketing category. Every line carries the detail that makes it checkable against a running instance.
Publish
Getting video in, and getting it encoded.
- Resumable and chunked uploads
- A dropped connection picks up where it stopped rather than starting the file again.
- Straight-to-storage uploads
- Chunks stream to the storage backend — local or S3 — and never touch the server's disk. A server dying mid-upload loses nothing.
- Lean encode path
- A full-ladder job reads the source once, down from 8, and decodes it in full 3 times, down from 13. Peak scratch computes to about 3.6 GB, from about 10.3.
- Upload from a URL
- Asynchronous fetch, SSRF-guarded, with a sandboxed yt-dlp path you can enable.
- Per-user quotas
- Storage limits per account, so one uploader cannot fill the disk.
- ClamAV scanning
- Optional scanning on upload. Budget an extra 2 GB of RAM if you turn it on.
- HLS ladder
- H.264 and AAC. A 1080p TargetAll job runs 12 encode passes, about 1.5 to 2.5 times the source duration on 4 vCPU.
- CMAF packaging and DASH
- Packaged alongside HLS from the same renditions.
- VP9 and WebM download
- An optional downloadable rendition next to the streaming ladder.
- Codec profile flags
- HEVC and AV1 are behind flags and default to off.
- Live streaming
- RTMP ingest with privacy-gated HLS output, and a replay that becomes a VOD when the stream ends.
- Channel auto-sync mirroring
- Mirror a channel into your instance and keep it in step.
Watch
The player and everything around it.
- Bespoke player
- Keyboard shortcuts, picture-in-picture and theatre mode, written for this platform rather than skinned onto a generic one.
- I-frame trick-play
- Scrubbing runs against an I-frame rendition, so the preview keeps up with the pointer.
- Thumbnails, storyboards, chapters
- Storyboards drive scrub previews; chapters break a long recording into parts.
- WebVTT captions
- Upload them, or have Whisper generate them and edit what it produced.
- Password-protected videos
- Scoped playback tokens, not an unlisted URL that leaks the moment somebody forwards it.
- Embeds, oEmbed, RSS, sitemap, PWA
- Your video plays on other people's pages, and your instance is readable by the things that index it.
Find
Search and ranking, with the parts still on probation labelled.
- Hybrid full-text and trigram search
- Two indexes queried together, so a half-remembered title still resolves.
- Typo-tolerant autosuggest
- Suggestions while typing, tolerant of the wrong letters.
- Decayed-counter trending
- View counters decay with age, so last quarter's hit does not sit at the top forever.
- Co-visitation recommendations
- Built from what viewers actually watched next.
- LightGBM ranker
- Shadow-evaluated: it scores results and its scores are compared, but it does not decide the order until you promote it.
How it compares
Where Vidra differs, and where it does not.
Two of these columns agree more often than they differ — self-hosting is the thing they share. Where Vidra parts company is federation, runtime, and what you can do about egress.
| Hosted platforms (YouTube) | Other self-hosted video platforms | Vidra | |
|---|---|---|---|
| Who sets the rules | Google. The terms, the moderation policy and the ranking are theirs to change. | You do. That is what self-hosting means. | You do. Registration approval, reports and instance settings sit in your own admin console. |
| Ads and your audience | The platform sells advertising against your audience and sets the revenue share. | No ad system unless the project ships one. | No ad system and no monetisation layer. Vidra is not a creator monetisation platform. |
| Federation | None. Accounts, subscriptions and discovery stay on one platform. | Varies by project. ActivityPub where it is offered. | ActivityPub and ATProto. Enabled per instance; once on, every channel federates by default and can opt out. |
| Runtime | Not something you run. | Varies by project. Check the one you are comparing. | A Go backend (Go 1.26, Echo) and a Next.js 16 frontend, over PostgreSQL 18 and Redis 8. |
| Egress | Theirs to pay for. | Yours to pay for. | Yours, and offloadable: a CDN in front of your HLS, or IPFS gateways carrying public media. |
| Licence | Proprietary, hosted service. | Varies. Check the licence before you commit to it. | AGPL v3. Use it, study it, modify it, redistribute it — and a modified service owes its users the source. |
| Leaving | Takeout exports your video files. The URLs, the embeds and the audience stay on the platform. | Your files and your database are already on your disk. | Your files and your database are already on your disk, behind one compose file. |
Who sets the rules
- Hosted platforms (YouTube)
- Google. The terms, the moderation policy and the ranking are theirs to change.
- Other self-hosted video platforms
- You do. That is what self-hosting means.
- Vidra
- You do. Registration approval, reports and instance settings sit in your own admin console.
Ads and your audience
- Hosted platforms (YouTube)
- The platform sells advertising against your audience and sets the revenue share.
- Other self-hosted video platforms
- No ad system unless the project ships one.
- Vidra
- No ad system and no monetisation layer. Vidra is not a creator monetisation platform.
Federation
- Hosted platforms (YouTube)
- None. Accounts, subscriptions and discovery stay on one platform.
- Other self-hosted video platforms
- Varies by project. ActivityPub where it is offered.
- Vidra
- ActivityPub and ATProto. Enabled per instance; once on, every channel federates by default and can opt out.
Runtime
- Hosted platforms (YouTube)
- Not something you run.
- Other self-hosted video platforms
- Varies by project. Check the one you are comparing.
- Vidra
- A Go backend (Go 1.26, Echo) and a Next.js 16 frontend, over PostgreSQL 18 and Redis 8.
Egress
- Hosted platforms (YouTube)
- Theirs to pay for.
- Other self-hosted video platforms
- Yours to pay for.
- Vidra
- Yours, and offloadable: a CDN in front of your HLS, or IPFS gateways carrying public media.
Licence
- Hosted platforms (YouTube)
- Proprietary, hosted service.
- Other self-hosted video platforms
- Varies. Check the licence before you commit to it.
- Vidra
- AGPL v3. Use it, study it, modify it, redistribute it — and a modified service owes its users the source.
Leaving
- Hosted platforms (YouTube)
- Takeout exports your video files. The URLs, the embeds and the audience stay on the platform.
- Other self-hosted video platforms
- Your files and your database are already on your disk.
- Vidra
- Your files and your database are already on your disk, behind one compose file.
Vidra is a clean-room implementation rather than a fork of anything, and it is not PeerTube-API-compatible. Comparing against PeerTube specifically? That has its own page. Moving an existing instance across is supported and documented — read the migration overview.
Connect
ActivityPub federation, ATProto for Bluesky, messaging, one storage network, and identity.
- ActivityPub
- Your channels and videos are addressable from the rest of the fediverse.
- ATProto
- Viewers sign in with Bluesky, or with any ATProto PDS.
- Cross-posting to Bluesky
- Optional, for public videos, and off until you enable it.
- IPFS media, dual-tier
- A public tier that offloads delivery to gateways, and a private tier keyed to your own swarm — replication, not distribution. Off by default. What IPFS actually does →
- Direct messages
- One-to-one conversations, with images and files — attachments are capped at 100 MiB and scanned for malware before they become linkable.
- End-to-end encrypted conversations
- An opt-in conversation type. Encryption runs on your device; the server stores only ciphertext and cannot read the content — though, as with Signal or Matrix, it still knows who is talking to whom and when. Text only: attachments stay in standard conversations, where they can be scanned.
- Disappearing messages
- Encrypted conversations can auto-delete on a timer, 30 seconds to 90 days. Expired messages vanish from every read immediately and are hard-deleted from the server by a sweeper.
- OAuth, OIDC and TOTP two-factor
- Sign in through an identity provider you already run, with a TOTP second factor either way.
Moderate
The work that starts on day two.
- Reports and moderation
- A reporting path for viewers and a queue for acting on it.
- Registration approval
- New accounts wait for a person to let them in.
- Admin console
- More than a hundred instance settings, changeable at runtime rather than through a redeploy.
Operate
What you touch after it is live.
- The vidra CLI
- setup, doctor, status, logs, deploy, rollback, backup and restore, all scripted.
- vidra doctor
- 26 checks against a running instance, with the failure named.
- Probes
- /healthz, /readyz, /schemaz and /version.
- Metrics and traces
- Prometheus metrics and OpenTelemetry traces, both first-party.
- Durable queues
- Postgres-backed, claimed with SKIP LOCKED and leases: queued work survives a restart, and two workers cannot claim the same job.
- Roles and replicas
- One boot variable splits the same image into api and worker processes. Replicas take leases, elect a leader for sweeps, and drain behind /readyz — soak-tested at two replicas with a deliberate counterfactual.
- Schema history
- 121 SQL migrations, versioned with the code.
- API surface
- 228 paths under one OpenAPI contract.
- Accessibility
- Accessibility failures fail the build: axe gates CI in both frontends, and this site's own CI gates WCAG 2.2 AA explicitly.
Three things Vidra does not do
- In-player peer-to-peer
- On the roadmap, not in v0.5.0. Do not size your bandwidth around it.
- DRM
- None shipped: a test lane proves the seam, and production DRM sits behind an unbuilt roadmap item. If your distributor requires encrypted playback today, Vidra is the wrong tool.
- A hosted tier
- A design decision, not a gap in the roadmap.