Open Source · Free

Turn your old tablet into a homelab monitor

RetroDash streams your Grafana dashboards, K9s, terminals and more to old Android & iOS devices — with authentic CRT aesthetics.

retrodash v1.0
CH 01
▶ LIVE
Grafana CPU
CH 02
▶ LIVE
K9s Pods
CH 03
NO SIGNAL
Terminal
CH 04
▶ LIVE
Prometheus
CH 05
CONNECTING
Uptime Kuma
CH 06
ERR
Home Asst.

Your old tablets collect dust. Your homelab needs eyes.

How it works

Two components, one ecosystem. The server renders, the app displays. Your old device does zero processing.

Your Homelab

Bridge Server

A lightweight Go server that runs on your homelab machine. It uses ChromeDP to render any web dashboard in a headless browser and streams it as MJPEG — the heavy lifting happens here, not on the tablet.

  • Go binary, ~15MB, runs anywhere
  • Headless Chrome via ChromeDP
  • MJPEG streaming (low bandwidth)
  • Multi-origin support (Grafana, K9s, web, terminal)
  • Remote config via REST API
📱

Your Old Tablet

RetroDash App

A featherweight viewer that receives the MJPEG stream and displays it with authentic CRT effects. No rendering, no WebView, no heavy processing — it just shows the picture.

  • React Native 0.83, optimized for older hardware
  • 1GB+ RAM recommended
  • 3 CRT phosphor themes (amber, green, blue)
  • Kiosk mode for wall-mounted displays
  • Smart battery protection

Get the Server

The bridge server runs on your homelab and does all the rendering. One command to start streaming.

🐳

Docker (recommended)

Pull & Run

Multi-arch image (AMD64 + ARM64). Works on PCs, Macs, and Raspberry Pi.

# Pull and run
docker run --rm \
  --shm-size=256m \
  -p 8080:8080 \
  ghcr.io/cbenitezpy/retrodash-server:latest

# Open http://<your-ip>:8080 on your tablet
# Configure dashboards from the RetroDash app
  • AMD64 (Intel/AMD PCs, Mac Intel)
  • ARM64 (Apple Silicon, Raspberry Pi 3/4/5)
  • Auto-detects your architecture
  • No config needed — set up from the app
📦

Docker Compose

Production Setup

For always-on deployments with auto-restart.

services:
  bridge:
    image: ghcr.io/cbenitezpy/retrodash-server:latest
    ports:
      - "8080:8080"
    shm_size: '256mb'
    restart: unless-stopped
  • Auto-restart on failure
  • Docker healthcheck included in image
  • Crash recovery (auto-restarts Chrome)
☸️

Kustomize (recommended)

Deploy to K8s

Clone the repo and apply. Includes liveness/readiness probes, Prometheus metrics, shared memory for Chrome, and PVC for origins persistence.

git clone https://github.com/cbenitezpy/retrodash-server.git
cd retrodash-server
kubectl apply -k deploy/k8s/

# Verify pod is ready
kubectl get pods -n retrodash -w
  • Works out of the box in standby mode
  • Easy to patch with overlays
  • Works with ArgoCD and Flux
🎛️

Helm

OCI Helm Chart

Install from the OCI Helm registry. Same manifests as Kustomize, with Helm templating for customization.

helm install retrodash-bridge \
  oci://ghcr.io/cbenitezpy/charts/retrodash-bridge \
  -n retrodash --create-namespace
  • Liveness + readiness probes built-in
  • Prometheus metrics at /metrics
  • PVC for origins.json persistence
Endpoint Method Description
/stream GET MJPEG stream — connect the app here
/touch POST Relay touch events to the headless browser
/api/origins GET / POST List or create origin sources (Grafana, terminals, etc.)
/api/origins/{id} GET / PUT / DELETE Get, update, or delete a specific origin
/health GET Basic health check — returns server status
/healthz GET Kubernetes liveness probe — returns 200 "ok"
/readyz GET Kubernetes readiness probe — 200 when browser ready, 503 when not
/metrics GET Prometheus metrics (custom app metrics + Go runtime)
📱

Connect your tablet

Accessing from Your Phone or Tablet

RetroDash streams to devices on your local network. kubectl port-forward only works from localhost — expose the service to your LAN:

  • Docker: already accessible at http://<host-ip>:8080 from any LAN device
  • Kubernetes Ingress: create an Ingress pointing to the service (works with Traefik, nginx, etc.)
  • Kubernetes LoadBalancer: use MetalLB or kube-vip to get a LAN IP
  • Kubernetes NodePort: access via http://<node-ip>:<port>

See the Deployment Guide for full examples with Ingress, LoadBalancer, and Helm flags.

View on GitHub Container Registry

Compatibility

RetroDash runs on devices most apps have abandoned. If it turns on, it probably works.

"If your tablet powers on, it probably works"

Android 7.0+ (2016) & iOS 15.1+ (2021) — devices with 1GB+ RAM

PlatformMin VersionYearRAMStatus
Android7.0 Nougat20161GB⚠ Basic
Android8.0 – 152017+1GB+✓ Full support
iOS15.120212GB⚠ Basic
iOS16.0+2022+2GB+✓ Full support

Features

Everything you need to repurpose old devices as dedicated homelab displays.

📡

Multi-Origin

Connect to Grafana, Prometheus, K9s, any web URL, or SSH terminals. Switch between them like TV channels.

🖥️

CRT Themes

Three authentic phosphor themes — amber (P3), green (P1), and blue (P7) — with scanlines, vignette, and glow effects.

Server-Side Rendering

The bridge server does all the heavy lifting with ChromeDP. Your old tablet just displays the stream — zero processing required.

🔋

Smart Charging

Built-in battery protection keeps your always-on device between safe charge levels. Prevents swelling and extends battery life.

🔒

Kiosk Mode

Lock the device to RetroDash with auto-start on boot, immersive fullscreen, and back button override. Perfect for wall mounts.

🌐

Remote Config

Configure origins, quality, and switching via the bridge server's REST API. No need to touch the tablet after initial setup.

☸️

Kubernetes-Native

Deploy to any Kubernetes cluster with the official Helm chart or Kustomize manifests. OCI registry, liveness/readiness probes, and PVC included.

❤️

Health Probes

Dedicated liveness (/healthz) and readiness (/readyz) endpoints let Kubernetes restart the pod automatically if the browser hangs.

📊

Prometheus Metrics

Custom application metrics and Go runtime stats exposed at /metrics. Scrape directly from Prometheus or Grafana Agent.

📝

Structured Logging

JSON-formatted logs with configurable log level. Works out of the box with Loki, Fluentd, and any log aggregator in your stack.

🏗️

Multi-Arch Images

Docker images built for AMD64 and ARM64. Runs on x86 servers, Apple Silicon, and Raspberry Pi without any configuration changes.

Simple Pricing

Free forever for basic use. Pro unlocks the full experience.

Free

$0

  • 1 origin (dashboard source)
  • All 3 CRT themes
  • MJPEG streaming
  • Basic quality settings
  • No multi-origin switching
  • No kiosk mode
  • No smart charging
Download

Guides & Documentation

Everything you need to get RetroDash running in your homelab.

Pre-built Golden Signals dashboards optimized for tablet kiosk mode — no scroll, CRT-ready.

View All Dashboards Browse Full Wiki

Contribute

RetroDash is open source and built for the homelab community. We welcome contributions of all kinds.

💻

Developers

Code Contributions

The bridge server is written in Go with 100% test coverage. Pick an issue, fork the repo, and submit a PR.

  • Go 1.24+ with golangci-lint
  • 100% test coverage required
  • CI validates lint + tests automatically
  • Multi-arch Docker builds (AMD64 + ARM64)
🐛

Community

Report & Discuss

Found a bug? Have a feature idea? Open an issue on GitHub. Every bit of feedback helps make RetroDash better.

  • Bug reports with reproduction steps
  • Feature requests and ideas
  • Documentation improvements
  • Share your homelab setup
Contributing Guide Open Issues

Give your old tablet a new life

Download RetroDash for free. Set up in minutes. Your homelab will thank you.