MCPSERV.CLUB
Watcharr

Watcharr

Self-Hosted

Self-hosted watch list for movies, shows and games

Stale(68)
1.1kstars
0views
Updated Jul 15, 2025

Overview

Discover what makes Watcharr powerful

Watcharr is a lightweight, self‑hosted media tracking platform that lets developers build and extend personal catalogues for movies, TV shows, anime, and even video games. At its core it exposes a REST‑ful API for CRUD operations on media items, status updates, ratings and watch lists while providing a modern SvelteKit front‑end that consumes the same API. The architecture is intentionally minimalistic: a single Go binary serves both the API and static assets, enabling zero‑dependency deployments that fit comfortably in Docker containers or bare metal.

Unified media model

Status & rating workflow

Search & discover

User management

Overview

Watcharr is a lightweight, self‑hosted media tracking platform that lets developers build and extend personal catalogues for movies, TV shows, anime, and even video games. At its core it exposes a REST‑ful API for CRUD operations on media items, status updates, ratings and watch lists while providing a modern SvelteKit front‑end that consumes the same API. The architecture is intentionally minimalistic: a single Go binary serves both the API and static assets, enabling zero‑dependency deployments that fit comfortably in Docker containers or bare metal.

Key Features

  • Unified media model – Movies, TV shows, anime and games share a single schema with polymorphic fields for metadata (e.g., episode count, platform, release dates).
  • Status & rating workflow – Developers can hook into status transitions (planned → watching → completed) via webhooks or the API, making it trivial to sync with external services like Plex or Trakt.
  • Search & discover – An internal Elasticsearch index (or optional SQLite full‑text search) powers fast title lookup and recommendation endpoints.
  • User management – JWT‑based authentication, role‑based access control and optional OAuth integration are baked in.

Technical Stack

LayerTechnology
BackendGo 1.22, Gin‑like router, GORM for ORM, PostgreSQL (default) or SQLite support
FrontendSvelteKit with Tailwind CSS, Vite bundler
SearchOptional Elasticsearch or SQLite FTS5
ContainerizationOfficial Docker image published to GitHub Packages, Helm chart available for Kubernetes
CI/CDGitHub Actions that build the Go binary, push Docker image and run tests

The Go service is compiled into a single statically linked binary, which reduces runtime dependencies and simplifies deployment. The API follows idiomatic REST conventions with pagination (limit, offset) and filtering via query parameters. All endpoints are documented in an OpenAPI 3.0 spec that can be generated from Go annotations.

Core Capabilities & APIs

  • Media CRUDPOST /api/media, GET /api/media/{id}, PATCH /api/media/{id}
  • Status transitionsPOST /api/media/{id}/status (payload: { status: "watching" })
  • Batch operationsPOST /api/media/batch accepts an array of media objects for bulk imports.
  • Webhooks – Configurable URL endpoints that receive JSON payloads on status changes, rating updates or new media additions.
  • GraphQL – Optional GraphQL endpoint (/graphql) for flexible querying when the client needs to fetch nested data (e.g., episodes of a series) in one round‑trip.
  • SDKs – A Go client library (watcharr-sdk-go) and a TypeScript SDK are available, generated from the OpenAPI spec.

Deployment & Infrastructure

Watcharr’s single‑binary design makes it ideal for micro‑service architectures. It can run in:

  • Dockerdocker pull ghcr.io/sbondco/watcharr:latest
  • Kubernetes – Helm chart exposes replicaCount, persistent volume claim, and external database connection strings.
  • Bare metal – Binary can be copied to /usr/local/bin/watcharr and started with a systemd unit.
  • Scaling – Stateless API servers can be horizontally scaled; the database layer (PostgreSQL) handles concurrent writes, while read replicas can serve discovery queries.

Integration & Extensibility

  • Plugin system – A simple Go plugin interface (watcharr-plugin) allows developers to write extensions that run in the same process. Examples include a Trakt sync plugin, custom metadata enrichers, or UI theme overrides.
  • Webhook & API hooks – External services can react to state changes without polling, making it suitable for home‑media automation (e.g., marking a series as watched in Plex).
  • Custom fields – The media schema can be extended via a metadata JSONB column, enabling domain‑specific attributes (e.g., game genre tags).
  • CLI – A command‑line tool (watcharr-cli) can perform bulk imports, export CSVs, or trigger status updates from scripts.

Developer Experience

  • Configuration – A single config.yaml file covers database URLs, API ports, JWT secrets and webhook endpoints. Environment variables override the file for CI pipelines.
  • Documentation – The official docs (https://watcharr.app/docs) include a comprehensive API reference, deployment guides and plugin tutorials.
  • Community – Active GitHub discussions, a Matrix channel (#watcharr:matrix.org) and open issues ensure quick support.
  • Testing – Unit tests cover 80% of the API layer, and integration tests run against a Dockerized PostgreSQL instance in CI.

Use Cases

ScenarioHow Watcharr Helps
Home media serverSync watch status with Plex or Jellyfin, expose a web UI for family members.
Game trackingExtend the media model to include game metadata, integrate with IGDB for release dates.
Personal analyticsExport watch history to CSV or connect via GraphQL for custom dashboards.
DevOps toolingUse webhooks to trigger CI jobs when a series is marked complete (e.g., auto‑download next season).
Educational projectsStudy Go web services, S

Open SourceReady to get started?

Join the community and start self-hosting Watcharr today