explaingit

judy-gotv/rust-epg

20ShellAudience · ops devopsComplexity · 3/5Setup · moderate

TLDR

Rust-EPG is a self-hosted TV program guide server written in Rust that collects listings from XMLTV, JSON, or CSV sources and serves them to IPTV players like Jellyfin and Emby, with a web UI, Redis caching, and a one-command install.

Mindmap

mindmap
  root((rust-epg))
    What it does
      Collects TV listings
      Serves XMLTV and DIYP
      Web UI with themes
    Data Sources
      XMLTV format
      JSON format
      CSV format
    Tech Stack
      Rust server
      Vue 3 frontend
      SQLite database
      Redis cache
    Use Cases
      Jellyfin EPG feed
      IPTV self-hosting
      Raspberry Pi guide server
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Self-host a TV program guide that feeds schedule data to IPTV players like Jellyfin or Emby in standard XMLTV format.

USE CASE 2

Serve Chinese IPTV channel listings in DIYP format from a Raspberry Pi or low-end VPS with very low memory usage.

USE CASE 3

Browse TV channels through a web UI with 47 built-in themes, or preview external XMLTV feeds live without importing them into the database.

USE CASE 4

Auto-pull and refresh TV listing updates on a schedule from multiple sources with automatic service restarts on crashes or memory spikes.

Tech stack

RustVue 3SQLiteRedisnginxShell

Getting it running

Difficulty · moderate Time to first run · 30min

A single shell command auto-detects your CPU architecture and installs Redis, nginx, and the service automatically, change the default admin/admin123 credentials immediately after first login.

No license information is mentioned in this repository.

In plain English

Rust-EPG is a self-hosted Electronic Program Guide system, which means it collects, stores, and serves TV schedule data the way a cable provider's on-screen guide does. It is written primarily in Rust for the server side and Vue 3 for the web interface. The README is in Chinese, so this explanation is based on a translation of that content. The system pulls TV listings from external sources in XMLTV, JSON, or CSV formats on a schedule, stores them in a SQLite database, and caches lookups in Redis for speed. It then makes those listings available in two standard IPTV subscription formats: XMLTV (used by media players like Jellyfin, Emby, and many Android apps) and DIYP (a format popular in the Chinese IPTV ecosystem). There is also a web interface with 47 built-in visual themes where you can browse channels and programs or paste an external XMLTV URL for a live preview without importing anything. Installation is a single shell command that handles everything: detecting your server's CPU architecture (standard x86 servers, ARM64 for devices like Raspberry Pi 4, or older ARMv7 boards), downloading the matching pre-compiled binary, setting up Redis, configuring nginx as a reverse proxy, and registering the service so it restarts automatically if the server reboots or the process crashes. Pre-compiled binaries are statically linked and have no external library dependencies. The README also includes a dedicated setup path for servers running the BT Panel (Baota) web hosting control panel, which uses a non-standard nginx layout. The service includes memory protection: it is configured to restart automatically if memory usage exceeds 300 MB, which the README notes is roughly ten times the typical usage of 12 to 30 MB even when parsing an 85 MB EPG feed. This is intended for small VPS servers with limited RAM. A Prometheus metrics endpoint is included for monitoring. Default login credentials are admin and admin123, and the README explicitly instructs users to change the password on first login.

Copy-paste prompts

Prompt 1
Install rust-epg on a Raspberry Pi 4 (ARM64). Walk me through what the single shell command sets up, Redis, nginx, systemd service, and what I should do immediately after installation to change the default admin credentials.
Prompt 2
I want to add my XMLTV source URL to rust-epg and feed it to Jellyfin. Explain how to configure the source, set the refresh schedule, and point Jellyfin at the resulting XMLTV endpoint.
Prompt 3
Set up rust-epg on a server running the BT Panel (Baota) control panel. What is different about the nginx configuration compared to a standard installation?
Prompt 4
My rust-epg is running on a 512MB VPS. Explain the 300MB memory restart limit, what triggers it, how do I check if it has fired, and how do I monitor memory via the Prometheus metrics endpoint?
Prompt 5
I want to preview an external XMLTV feed in the rust-epg web UI without importing it into my database. Walk me through pasting the URL and what the live preview shows.
Open on GitHub → Explain another repo

← judy-gotv on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.