pleasewatch is a self-hosted media library and watch app. It has a Rust/Axum backend, SQLite storage, a SvelteKit frontend, and a Docker deploy stack with Caddy, qBittorrent, Jackett, and Prowlarr.
The project is built for private libraries and media you have the right to access. The torrent/indexer pieces are integrations, not a license to fetch copyrighted content.
- movie and tv search through TMDB
- library pages for movies, shows, books, manga, and anime
- continue watching, watch progress, collections, recommendations, and recently added shelves
- browser video player with audio/subtitle picker, subtitle search/upload/sync, skip intro, next episode, clips, and watch together
- second subtitle track above the main one, hover a word to see its match in the other language (en/pl/de), click to hear it
- live sports board with scores from ESPN, sources configured in .env
- tv channels from the public iptv-org lists, dead and drm-protected ones filtered out
- torrent picker backed by qBittorrent, Jackett, Prowlarr, and ext.to through FlareSolverr
- first-run onboarding for TMDB and optional download services
- admin panel for users, pending approvals, downloads, clips, storage, logs, settings, health, and watch leaderboard
- sqlite-backed single binary backend, static frontend served by the backend in prod
- docker compose deployment with Caddy and the download services
- backend: Rust, Axum, rusqlite, Tokio, reqwest
- frontend: SvelteKit, Svelte 5, Vite, adapter-static
- storage: SQLite plus filesystem media folders
- deploy: Docker Compose, Caddy, qBittorrent, Jackett, Prowlarr
Backend:
cd backend
TMDB_API_KEY=your_key cargo runFrontend:
cd frontend
npm install
npm run devFor local download testing, run Jackett/Prowlarr and qBittorrent separately, then configure their URLs and API keys in the admin settings.
On a fresh Ubuntu/Debian VPS:
sudo apt-get update
sudo apt-get install -y curl git
curl -fsSL https://get.docker.com | sudo sh
sudo git clone https://github.com/krisoft20/pleasewatch /opt/pleasewatch
cd /opt/pleasewatch/deployIf you forked the repo, use your fork URL instead.
For a real domain point DNS at the VPS first. Caddy handles HTTPS. Then run:
sudo ./setup.sh --domain watch.example.comFor a plain IP or LAN test:
sudo ./setup.shOpen http://your-server-ip.
If you do not want to expose the test install yet, tunnel port 80:
ssh -L 8080:127.0.0.1:80 user@your-server-ipThen open http://127.0.0.1:8080.
When setup finishes:
- Open the URL printed by
setup.sh. - Register the first account. The first account becomes admin.
- Sign in.
- Add a TMDB api key on
/onboarding. - Open the app.
TMDB is the only required key for search and metadata. OMDB, Wyzie, qBittorrent, Jackett, and Prowlarr can be configured later in /admin?tab=settings.
Media is stored on the server filesystem. New installs default to /opt/pleasewatch/media, mounted as /media inside the containers.
For a real library, pick a VPS with actual storage or mount an extra disk first. Then set this in deploy/.env before running setup:
PW_MEDIA_DIR=/mnt/storage/pleasewatchqBittorrent and pleasewatch both mount that path as /media, so downloads and processed files stay on the same disk.
To update:
cd /opt/pleasewatch
sudo git pull
cd deploy
sudo ./setup.shThe setup script keeps the existing .env, database, and media folders.
Useful checks:
cd /opt/pleasewatch/deploy
sudo docker compose -f docker-compose.simple.yml ps
sudo docker compose logs -f pleasewatchdeploy.sh intentionally has no hardcoded host. Copy the local deploy template and fill it with your own host:
cp .deploy.env.example .deploy.envThen run:
./deploy.shOn Windows with Git Bash:
"C:\Program Files\Git\bin\bash.exe" deploy.shMovie and TV metadata and images are provided by TMDB. This product uses the TMDB API but is not endorsed or certified by TMDB.
Other notices are listed in THIRD_PARTY_NOTICES.md.
The source code is licensed under the GNU Affero General Public License v3.0 only (AGPL-3.0-only).
The PleaseWatch name and logo are not covered by that license. See TRADEMARKS.md.


