OPEN SOURCE & PRIVATE

Self-Host veedeeoh On Your Home Server

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.

What you get, and what you do not

Read this first, it saves the questions

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.

Option A: Docker Compose

Any Linux box, NAS, Unraid, or a Raspberry Pi
git clone https://github.com/ItsCodejac/veedeeoh.git cd veedeeoh docker compose up --build

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.

Option B: From source

For development, or hosting without Docker
npm install npm run build cd backend && npm start

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.

Environment variables

All optional
VariableDefaultWhat 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.

Where your data lives

On your machine, in files you can read

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.