Run your own instance with Docker or from source. Standalone: no account with us, no database to set up, and nothing about your viewing passing through anything we operate.
Self-hosted veedeeoh is standalone. It needs no account with us, no database, no API key, and no network calls to anything we run. It is the whole catalogue, the whole player, and your own machine.
You get the same thing to watch. The catalogue is Pluto, Tubi and the Internet Archive, all free, and the hosted version has no title yours does not.
What it does not have are the things we built for running it as a service: accounts, syncing your list between devices, household profiles across people, watch parties, subscriptions, referrals. Those are the cloud product, and cloud is sold on access rather than on content: it works on every device you pick up, with nothing to install and nothing to keep running. If that is not a problem you have, self-hosting is not a lesser version. It is the whole thing.
Profiles, My List and watch progress all still work here. They live in a JSON store on the machine running the server, not in anybody's cloud.
That is the whole setup. Your instance is at http://localhost:8321.
There is nothing to configure first. If you want it on a different port, set PORT.
The build writes the app into src/tvlc/static/ and the server serves it on 8321. For development instead, run npm run dev in backend/ and again in frontend/; Vite serves on 5173 and proxies the API to the backend.
The build prints which of the two products it is making. With no Supabase credentials present it says building SELF-HOST, and that is the one you want. There is no fallback to our project and no way to end up pointed at it by accident.
| Variable | Default | What it does |
|---|---|---|
PORT |
8321 |
Port the server listens on. |
PROXY_URL |
this origin | Absolute base for the stream proxy, when it is not served from the same origin as the app. |
That is the entire list. Anything you may have seen about Supabase URLs and anon keys belongs to the cloud build and is not needed, or wanted, here.
Favourites, watch progress and the cached catalogue are JSON files in your platform's normal application data directory: ~/.local/share/tvlc on Linux, ~/Library/Application Support/tvlc on macOS. Under Docker Compose that directory is a named volume, so it survives a rebuild.
Backing up is copying that folder. There is nothing else, and nothing about your viewing leaves the machine except the requests that fetch the video itself.