{"id":44237046,"url":"https://github.com/plix-labs/plixmetrics","last_synced_at":"2026-02-26T21:18:59.541Z","repository":{"id":337630367,"uuid":"1154266894","full_name":"plix-labs/PlixMetrics","owner":"plix-labs","description":"A self-hosted, real-time Plex network monitoring dashboard. Track multiple Tautulli instances, visualize streaming activity on a world map, and analyze viewing statistics.","archived":false,"fork":false,"pushed_at":"2026-02-12T21:23:43.000Z","size":3617,"stargazers_count":16,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-13T06:31:52.147Z","etag":null,"topics":["plex","plex-media-server","server","tautulli"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plix-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T07:34:47.000Z","updated_at":"2026-02-12T21:23:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"0667c917-f763-44bf-b11d-c07eefe5c8e1","html_url":"https://github.com/plix-labs/PlixMetrics","commit_stats":null,"previous_names":["plix-labs/plixmetrics"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/plix-labs/PlixMetrics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plix-labs%2FPlixMetrics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plix-labs%2FPlixMetrics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plix-labs%2FPlixMetrics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plix-labs%2FPlixMetrics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plix-labs","download_url":"https://codeload.github.com/plix-labs/PlixMetrics/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plix-labs%2FPlixMetrics/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29424542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T22:20:51.549Z","status":"ssl_error","status_checked_at":"2026-02-13T22:20:49.838Z","response_time":78,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["plex","plex-media-server","server","tautulli"],"created_at":"2026-02-10T10:03:16.256Z","updated_at":"2026-02-26T21:18:59.527Z","avatar_url":"https://github.com/plix-labs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PlixMetrics\n\nA self-hosted, real-time Plex network monitoring dashboard. Track multiple Tautulli instances, visualize streaming activity on a world map, and analyze viewing statistics.\n\n![PlixMetrics Dashboard](docs/dashboard.png)\n\n## 📸 Screenshots\n\n| 📊 Statistics | 📈 Analytics |\n| :---: | :---: |\n| ![Stats](docs/stats.png) | ![Analytics](docs/analytics.png) |\n\n| 👥 Users | 📱 Mobile View |\n| :---: | :---: |\n| ![Users](docs/users.png) | ![Mobile](docs/mobile.png) |\n\n| ✨ Session Detail | 🧘 Zen Mode |\n| :---: | :---: |\n| ![Session Detail](docs/sessioncard.png) | ![Zen Mode](docs/zenmode.gif) |\n\n## Features\n\n- 🗺️ **Live World Map** - See where your streams are happening in real-time\n- 📊 **Real-time Statistics** - Bandwidth, stream count, transcoding status\n- 📈 **Watch Statistics** - Most watched movies, shows, users, platforms\n- 🔒 **Secure \u0026 Self-Hosted** - Password protection, JWT authentication, and local data storage\n- 🐳 **Docker Ready** - Easy deployment with Docker Compose\n- 🖥️ **Windows Native** - Easy to use standalone installer (.exe) with auto-updates\n- 🚀 **Lightweight** - Single container, SQLite database\n- 📱 **Mobile Ready** - Responsive design with PWA support\n- 🌍 **Multi-language Support** - Available in English, Spanish, French, Portuguese, German, Russian, and Chinese\n- 🧘 **Zen Mode** - Immersive, full-screen map-only view with floating metrics\n\n---\n\n## Installation \u0026 Deployment\n\n### Minimal Requirements\n- **Node.js**: v20 or higher (for manual install)\n- **Docker**: Engine 20.10+ (for Docker install)\n- **Memory**: ~256MB RAM (very lightweight)\n\n---\n\n### 🐳 Method 1: Docker (Recommended)\n\nRun the container directly from the GitHub Container Registry. No need to clone the repo or build manually!\n\n**1. Create a `docker-compose.yml` file:**\n\n```yaml\nversion: '3.8'\nservices:\n  plixmetrics:\n    image: ghcr.io/plix-labs/plixmetrics:latest\n    container_name: plixmetrics\n    restart: unless-stopped\n    ports:\n      - \"8282:8282\"\n    volumes:\n      - plixmetrics-data:/data\n    environment:\n      - PORT=8282\n      # Optional: set user/group ID if needed\n      # - PUID=1000\n      # - PGID=1000\n\nvolumes:\n  plixmetrics-data:\n```\n\n**2. Start the container:**\n```bash\ndocker-compose up -d\n```\nAccess the dashboard at `http://YOUR_SERVER_IP:8282`.\n\n**Updating (Docker):**\n```bash\ndocker-compose pull \u0026\u0026 docker-compose up -d\n```\n\n\n---\n\n### 📦 Method 2: Windows Installer (Easiest for Windows)\n\nDownload the latest standalone executable (`.exe`) from the [Releases page](https://github.com/plix-labs/PlixMetrics/releases).\n\n**Installation:**\n1.  Download `PlixMetrics-Setup-vX.X.X.exe`.\n2.  Run the installer and follow the prompts.\n3.  PlixMetrics will launch automatically in a console window, and your browser will open to the dashboard.\n\n**Features:**\n*   **Portable:** Includes its own Node.js runtime (no need to install Node separately).\n*   **Auto-Updates:** Checks for new versions on startup and updates itself automatically.\n*   **Persistent Data:** All data is stored in `%APPDATA%\\PlixMetrics`.\n\nTo uninstall, use Windows \"dApps \u0026 features\" or run `unins000.exe` in the installation folder.\n\n---\n\n### 🛠️ Method 3: Manual Installation (Linux/Node.js)\n\nIf you prefer running directly on the metal or in an LXC container.\n\n**1. Clone the repository:**\n```bash\ngit clone https://github.com/plix-labs/PlixMetrics.git\ncd PlixMetrics\n```\n\n**2. Install Dependencies:**\n```bash\n# Install root dependencies\nnpm install\n\n# Install server dependencies\ncd server \u0026\u0026 npm install \u0026\u0026 cd ..\n```\n\n**3. Build the Application:**\nThis compiles both the React frontend and the Node.js backend.\n```bash\nnpm run build:all\n```\n\n**4. Start the Application:**\n```bash\nnpm start\n```\n\n**5. (Optional) Run in background with PM2:**\nTo keep the app running after you close the terminal, use [PM2](https://pm2.keymetrics.io/):\n\n```bash\n# Install PM2 globally\nsudo npm install -g pm2\n\n# Start PlixMetrics\npm2 start npm --name \"plixmetrics\" -- start\n\n# Save process list to resurrect on reboot\npm2 save\npm2 startup\n```\n\n---\n\n## Configuration \u0026 Usage\n\n### 1. Initial Setup\nOn your first visit to `http://YOUR_SERVER_IP:8282`, you will be prompted to create an Admin Password. This password secures your dashboard from unauthorized remote access.\n\n*Note: Access from `localhost` is automatically authorized.*\n\n### 2. Connect Tautulli\nPlixMetrics relies on Tautulli for data. You must have Tautulli installed and running.\n\n1. Click the **\"Servers\"** button in the dashboard or **\"Settings\"**.\n2. Click **\"Add Server\"**.\n3. Fill in the details:\n   - **Name**: A friendly name (e.g., \"My Plex Server\").\n   - **URL**: The full URL to Tautulli (e.g., `http://192.168.1.50:8181`).\n   - **API Key**: Find this in Tautulli under **Settings -\u003e Web Interface -\u003e API Key**.\n\n### 3. Mobile App (PWA) Setup 📱\nPlixMetrics is a Progressive Web App. You can install it on your phone for a native-like experience.\n\n1. On your PC dashboard, click the **Phone Icon** (📱) in the header.\n2. Scan the **QR Code** with your mobile phone.\n3. On your phone, tap **\"Add to Home Screen\"** in your browser menu.\n4. Launch it from your home screen for a full-screen experience.\n\n### 4. 🧘 Zen Mode (Minimal View)\nA distraction-free, immersive view designed for dedicated monitoring screens or a clean dashboard experience. It features a full-screen map with floating real-time metrics and no UI clutter.\n\n#### Desktop Access:\n- **Enter**: Press **`Z`** or **`F`** keys while on the dashboard.\n- **Exit**: Press **`ESC`** key or click the floating **X** close button (which appears automatically when moving the mouse).\n- **Interactive**: A minimalist \"Group\" checkbox is available in the bottom-left to toggle marker clustering.\n\n#### Mobile Access:\n- **Enter**: Rotate your device to **Landscape** orientation. A \"Minimal View\" (monitor icon) will appear in the top header; tap it to activate the mode.\n- **Exit**: Simply rotate your device back to **Portrait** orientation.\n\n---\n\n### 🌐 Remote Access (Outside Home Network)\n\nThere are two ways to access PlixMetrics from anywhere in the world:\n\n#### Option A: Direct IP + Port (Easiest)\nYou can access PlixMetrics via `http://YOUR_IP:8282`.\n\n1. **Find your Public IP:** Search \"what is my ip\" on Google.\n2. **Port Forwarding:** Log into your router's admin page and forward port **8282** (TCP) to the internal IP of your server.\n3. **Access:** Open `http://YOUR_PUBLIC_IP:8282` in your browser. You will be asked to log in.\n\n#### Option B: Reverse Proxy (Advanced \u0026 Secure)\nIf you have a domain (e.g., `stats.yourdomain.com`) and want to use HTTPS.\n\n**Nginx Example:**\n```nginx\nserver {\n    listen 80;\n    server_name stats.yourdomain.com;\n\n    location / {\n        proxy_pass http://localhost:8282;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_cache_bypass $http_upgrade;\n    }\n}\n```\n\n### 🔌 Port Configuration\n\nThe default port is **8282**.\n\n**How to change it (Docker):**\nEdit `docker-compose.yml`:\n```yaml\nports:\n  - \"3000:8282\"  # Format is HOST:CONTAINER. Change the left side to your desired port.\n```\n\n**How to change it (Manual):**\n```bash\n# Linux/Mac\nPORT=8282 npm start\n\n# Windows (Powershell)\n$env:PORT=8282; npm start\n```\n\n### Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `PORT` | `8282` | Server port |\n| `DATA_DIR` | `./data` | Directory for SQLite database |\n| `JWT_SECRET` | (random) | Secret key for authentication tokens |\n| `NODE_ENV` | `production` | Environment mode |\n\n## Architecture\n\n```\nPlixMetrics/\n├── src/                    # React frontend\n├── server/                 # Express.js backend\n│   └── src/\n│       ├── routes/         # API endpoints\n│       ├── services/       # Business logic (Auth, System, Tautulli)\n│       └── db/             # SQLite schema\n├── Dockerfile              # Multi-stage build\n└── docker-compose.yml      # Easy deployment\n```\n\n### Tech Stack\n\n- **Frontend**: React, TypeScript, Tailwind CSS, React Query\n- **Backend**: Node.js, Express.js, TypeScript\n- **Database**: SQLite (better-sqlite3)\n- **Containerization**: Docker\n\n## API Endpoints\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/api/auth/login` | POST | Login and get token |\n| `/api/auth/setup` | POST | Initial admin setup |\n| `/api/servers` | GET | List all servers |\n| `/api/servers` | POST | Add a server |\n| `/api/network` | GET | Get network status |\n| `/api/stats` | GET | Get watch statistics |\n| `/api/system/version` | GET | Check for updates |\n| `/api/health` | GET | Health check |\n\n\n## License\n\nGNU GPLv3 License - see [LICENSE](LICENSE) for details.\n\n---\n\nMade with ❤️ for the Plex community","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplix-labs%2Fplixmetrics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplix-labs%2Fplixmetrics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplix-labs%2Fplixmetrics/lists"}