-
-
Notifications
You must be signed in to change notification settings - Fork 9
Installation
Run YT Zero with Docker (recommended), natively on Debian/Ubuntu, in a Proxmox LXC, or locally with Bun.
- Docker
- Docker Compose
- Debian 12+ or Ubuntu 22.04+, with systemd
- x86_64 or aarch64 (Bun ships builds for those two only)
- root access
- Proxmox VE 8.4 or newer
- Bun 1.3 or newer
Use the published GHCR image:
services:
ytzero:
image: ghcr.io/pelski/ytzero:latest
container_name: ytzero
ports:
- "3001:3001"
volumes:
- ./data:/data
environment:
- IDLE_TIMEOUT_SECONDS=120
- REFRESH_INTERVAL_MINUTES=5
- VIDEO_MAINTENANCE_MAX_AGE_DAYS=90
- DB_PATH=/data/db/ytzero.db
- IMG_CACHE_DIR=/data/imgcache
restart: unless-stoppedStart it:
docker compose up -dOr build locally from the repository:
docker compose -f docker-compose.dev.yml up --build -dOpen http://localhost:3001. Data is stored under ./data.
See Configuration for all environment variables.
Run this on the Proxmox host (not inside a container). It creates an unprivileged Debian LXC and installs YT Zero natively inside it — no Docker layer:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Pelski/ytzero/main/scripts/proxmox-lxc.sh)"The script prints the container's address when it finishes. Defaults: 2 cores,
2 GB RAM, 8 GB disk, DHCP on vmbr0, next free container id. Override with
environment variables:
CTID=150 CT_HOSTNAME=ytzero RAM_MB=4096 DISK_GB=16 STORAGE=local-lvm \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Pelski/ytzero/main/scripts/proxmox-lxc.sh)"| Variable | Default | Description |
|---|---|---|
CTID |
next free id | Container id. |
CT_HOSTNAME |
ytzero |
Container hostname. |
CORES |
2 |
CPU cores. |
RAM_MB |
2048 |
Memory in MB. |
DISK_GB |
8 |
Root disk size. Raise it if you plan to download videos. |
BRIDGE |
vmbr0 |
Network bridge. |
STORAGE |
local-lvm |
Storage for the container's disk. |
TEMPLATE_STORAGE |
local |
Storage holding the Debian template. |
YTZERO_VERSION |
latest | Release tag to install. |
Useful afterwards:
pct enter <CTID> # shell inside the container
pct exec <CTID> -- journalctl -u ytzero -f
pct exec <CTID> -- systemctl restart ytzeroConfiguration lives at /etc/ytzero/ytzero.env inside the container. Edit it
with pct enter <CTID>, then restart the service. To update, rerun the native
installer inside the container:
pct exec <CTID> -- bash -c "\$(curl -fsSL https://raw.githubusercontent.com/Pelski/ytzero/main/scripts/install.sh)"Works in an LXC, a VM, or on bare metal. Run as root:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Pelski/ytzero/main/scripts/install.sh)"It installs Bun, ffmpeg and yt-dlp, downloads the release tarball with the
prebuilt frontend, creates a system user ytzero, and starts a systemd service.
| Path | What |
|---|---|
/opt/ytzero |
Application. |
/opt/ytzero/data |
Database, caches, avatars, logs, downloads. Back this up. |
/etc/ytzero/ytzero.env |
Configuration — see Configuration. |
/etc/systemd/system/ytzero.service |
The service. |
systemctl status ytzero
systemctl restart ytzero # after editing the env file
journalctl -u ytzero -fInstall knobs: YTZERO_VERSION (default: latest release), YTZERO_PORT
(3001), YTZERO_DIR (/opt/ytzero), YTZERO_DATA ($YTZERO_DIR/data).
The directory and port knobs initialize a new installation; updates preserve
the existing /etc/ytzero/ytzero.env.
Release requirement: the native and Proxmox installers need a GitHub release containing
ytzero-vX.Y.Z.tar.gzand its checksum. Tags created before these release assets were introduced cannot be installed this way.
Re-run the same command. The release is replaced; /opt/ytzero/data and your
/etc/ytzero/ytzero.env are left untouched.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Pelski/ytzero/main/scripts/install.sh)"YT Zero is listed on Unraid Community Applications: YT-Zero on Community Apps. Install it from Apps by searching for “YT-Zero”, review the data path and port, then apply it.
The listing is backed by the template in this repository
(templates/ytzero.xml)
and repository metadata in ca_profile.xml, following Unraid's official
Community Apps repository layout. If you prefer not to use Community Apps,
either of these methods works too:
In Docker → Add Container, switch to advanced view if necessary and set:
| Field | Value |
|---|---|
| Name | ytzero |
| Repository | ghcr.io/pelski/ytzero:latest |
| Network Type | bridge |
| WebUI | http://[IP]:[PORT:3001]/ |
| Port | container 3001, host 3001
|
| Path | container /data, host /mnt/user/appdata/ytzero, read/write |
Add optional environment variables with Add another Path, Port, Variable, Label or Device → Variable. The most useful ones are listed under Configuration.
From an Unraid terminal, download the template into DockerMan's user-template directory, then reload the Docker page:
curl -fsSL https://raw.githubusercontent.com/Pelski/ytzero/main/templates/ytzero.xml \
-o /boot/config/plugins/dockerMan/templates-user/my-ytzero.xmlOpen Docker → Add Container, select ytzero from the template dropdown,
review the data path and port, then apply it. The template uses the blue play
icon from docs/assets/icon.png.
To update the container, use Unraid's Check for Updates action. App data is
kept in /mnt/user/appdata/ytzero; back up that directory before major updates.
Install dependencies:
bun run setupStart backend and frontend:
bun run devDevelopment URLs:
UI: http://localhost:5173
API: http://localhost:3001
bun run startThis builds ui/dist if needed and starts the backend serving the built frontend at http://localhost:3001.
| Command | Description |
|---|---|
bun run setup |
Install backend and frontend dependencies. |
bun run dev |
Start backend watcher and Vite dev server. |
bun run dev:app |
Start only the backend watcher. |
bun run dev:ui |
Start only the Vite dev server. |
bun run build |
Build the frontend. |
bun run start |
Serve the production frontend through the backend. |
After the first start you get a local YouTube subscriptions app at http://localhost:3001.
The initial app is intentionally empty: no Google login, no imported account data, and no recommendations. From Settings → Channels you add channels manually or import an OPML / Google Takeout subscriptions file (see Importing Subscriptions). Once channels are added, YT Zero starts filling a local SQLite database with their public RSS videos and background metadata.
YT Zero · Self-hosted YouTube subscriptions reader · Licensed under AGPL-3.0-only
Getting started
Using the app
Operations
Project