Skip to content

v0.5.0 · AGPL v3

Run your own video platform.One command.

Install it the way you install WordPress. No ads, nothing to upsell — and viewers can sign in with Bluesky.

curl -fsSL https://raw.githubusercontent.com/yegamble/vidra/main/install.sh | sh
~$63
a month runs a small private instance
Bluesky
sign-in and cross-posting over ATProto; federation over ActivityPub
1 image
from a one-person box to an api+worker fleet — one variable apart
AA
axe gates CI in both frontends; this site pins WCAG 2.2 AA

Who runs it

Instances that look nothing alike.

An independent creator

One 4 vCPU box, a CDN in front of it, and a channel people can follow over ActivityPub from wherever they already read.

More on the creator instance →

A community or club

A few dozen upload, a few hundred watch, and you answer for what appears. The moderation surface is in the box, not in a plugin.

More on the community instance →

A newsroom or podcast network

Live coverage that becomes an archive the moment it ends, and embargoed material that never turns into a public URL by accident.

More on the newsroom instance →

A course or conference archive

Four years of talks that have to stay findable, with an accessibility obligation you cannot hand-wave away.

More on the archive instance →

Sizing

Nobody publishes this. So here it is.

Move the sliders and the box changes. The two profiles come from the deploy guide; everything between them is arithmetic you can check.

A 1080p job runs 12 encode passes and wants about 8 GB of scratch.

Assumes roughly 2 GB per source hour for the full HLS ladder — an estimate, not a measured figure.

Your box

~$63 / month

Small, private profile — a channel or two and a handful of viewers.

vCPU
4
RAM
8 GB
Disk
160 GB

Droplet list price for 4 vCPU / 8 GB. 160 GB is included with the droplet.

Two things that cost real money if you skip them: do not use a 2 GB droplet, and use Docker Compose 2.24 or newer. Older Compose silently publishes PostgreSQL and Redis on 0.0.0.0 — your database on the public internet, with no error to tell you.

The requirements, in detail →

Install

Four ways in. Pick your box.

All four end in the same place: a running instance on v0.5.0 with an owner account you claimed yourself.

For a fresh server you control. Run it as a user who can use sudo. It never writes over an existing env file, never opens a port, and never touches sshd.

curl -fsSL https://raw.githubusercontent.com/yegamble/vidra/main/install.sh | sh
  1. Docker Engine and Compose v2 are installed if they are missing. Compose 2.20 is the floor; 2.24 is the production minimum.
  2. A checksum-verified release bundle is unpacked to /opt/vidra and the vidra CLI is installed.
  3. vidra setup runs a terminal interview — domain, storage, mail, federation. Pass --web for the browser wizard instead.
  4. Every signup path refuses on first boot. The boot log prints an owner-claim token; redeem it at /setup/claim and the instance is yours.

Installer reference

The product

The player, running.

Vidra v0.5.0 on a local machine, playing a 47-second clip the instance itself ingested and transcoded to four renditions.

The Vidra watch page mid-playback with selectable quality: Auto plus 1080p, 720p, 480p and 360p, transcoded by the instance.
Captured 2026-08-29 from Vidra v0.5.0 running locally via docker compose — all four repositories at the v0.5.0 release tags. The video shown was uploaded through the studio and transcoded by the instance itself.

See the rest of the instance →

Federation

Yours to enable. On for every channel once you do.

Three layers do three jobs. Step through them and watch what leaves your server.

your instancevideo.example.orgfediverseblueskygatewaysyour swarmActivityPub — live on this instance

Layer one of three

ActivityPub

Your channels and videos are addressable from the rest of the fediverse. A follow from Mastodon or another PeerTube instance travels over the protocol, not over an integration someone bolted on afterwards.

How federation works, in the docs →

Architecture

Eight containers. Tap one.

This is the shipped compose file, not an architecture sketch. Each container does one job; tap it to see which.

Your server

API

vidra-core

The Go backend. 228 OpenAPI paths, durable queues, the transcode pipeline, federation and the admin console behind it.

  • Go 1.26
  • Echo
  • /healthz

Uploads stream straight to the storage backend — they never touch the server's disk — and when one box stops being enough, the same image splits into api and worker roles, soak-tested with a deliberate counterfactual. Put a CDN in front of the HLS, or turn on the IPFS tier, and the bytes reach viewers from somebody else's network.

What happens at scale →The architecture, in the docs →

Compared

Why not YouTube? Why not PeerTube?

YouTube

The terms, the moderation policy and the ranking are Google's to change, and the platform sells advertising against your audience. On your own instance there is no ad system and nobody between you and your viewers.

The full comparison →

PeerTube

PeerTube is the established choice, with years of maturity, a plugin ecosystem and in-player P2P that Vidra does not have. Vidra is a clean-room alternative that trades that head start for operability — a one-command install, a doctor, scripted backup and rollback — viewers who can sign in with Bluesky, and direct messages, which PeerTube does not have.

Vidra vs PeerTube →

The project

Free software, and nothing behind it.

AGPL v3

Use it, study it, modify it, redistribute it. Run a modified version as a service and the network clause means your users get the source too.

No hosted tier

There is nothing to upsell you to and no pricing page that changes the day you depend on it. The only way to run Vidra is to run it.

Clean room

Not a PeerTube fork and not PeerTube-API-compatible. Migrating an existing instance across is supported and documented.

Three repositories

vidra-core (Go 1.26, Echo, PostgreSQL 18, Redis 8), vidra-user (Next.js 16) and vidra-search (Go), each with its own CI. Images build only from tags.

Is this ready?

Vidra is at v0.5.0 — pre-1.0, and honest about it: the feature set is still growing, and three things it does not do are listed below. What is already fixed is the discipline it is built with. These gates run on every change, in every repository.

Gates in every repo
Race-detected tests, OpenAPI drift checks and integration suites against real Postgres and Redis — and a schema-compat gate proves the previous release runs on the new schema, so rollback is tested, not hoped for.
Releases, not branches
Container images are built from release tags only — never from the main branch. What you pull is what was tagged.
Accessibility, gated
Accessibility failures fail the build: axe serious and critical findings gate CI in both frontends, and this site's own CI additionally 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.

Start with one command.

One command. 4 vCPU. About $63 a month.

Install