SELF-HOSTED DASHBOARD SERVER
A self-hosted dashboard platform for e-paper displays.
Compose dashboards in the browser, render them server-side, and push to the e-paper panels you own.
AGPL-3.0-or-later · No telemetry · No cloud account required
Editor
Compose in the browser
Pick a display — the preview re-renders for that panel. The layout sizes to each device.
1872 × 1404 · Seeed reTerminal E1003 · real render, no backend
- Resizable cell grid
- Per-device targeting
- Themes & fonts
- Instant render preview
This is a live render of the preview surface. The full self-hosted editor does much more — resizable cell layouts, 30+ widgets, a theme builder, scheduling and rotations, and one-click push to every panel.See it in the app
Install
Self-host in under a minute
One container — or a one-line script, a Home Assistant App, an LXC container, or straight from source. Open the UI, set a password, and start composing.
- No account required
- No cloud required
- No telemetry
- One container
- Runs anywhere
mkdir ~/tesserae && cd ~/tesserae
curl -fsSLO https://raw.githubusercontent.com/dmellok/tesserae/main/docker-compose.yml
docker compose up -d# Settings → Apps → App store → ⋮ → Repositories
# Add this URL, then install "Tesserae" and click Start:
https://github.com/dmellok/homeassistant-tesserae-addon# macOS · Linux · Raspberry Pi
curl -fsSL https://raw.githubusercontent.com/dmellok/tesserae/main/install.sh | bashiwr https://raw.githubusercontent.com/dmellok/tesserae/main/install.ps1 -UseBasicParsing | iexlxc launch images:debian/trixie tesserae
lxc shell tesserae
apt update && apt install -y git python3 python3.13-venv
# then the manual venv install:
git clone https://github.com/dmellok/tesserae.git && cd tesserae
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m app.maingit clone https://github.com/dmellok/tesserae.git
cd tesserae
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m app.mainArchitecture
How it actually works
A single Tesserae server drives Raspberry Pi, ESP32, Kindle, TRMNL and custom clients at the same time. Compose once; it renders server-side and fans frames out over MQTT or REST.
- MQTT
- Server pushes new frames to always-on clients the moment a page changes.
- REST
- Battery devices wake, pull their frame over HTTP, then sleep again.
Gallery
Dashboards people actually run
Weather, transit, home status, dev metrics, now-playing — composed in the browser and rendered to crisp e-ink frames.
Supported hardware
One server, many panels
10 panels verified across the major e-ink families, with 7 more on the bench — expand any vendor to see what’s in progress. Add your own with a small adapter.
| Panel | Resolution | Status |
|---|---|---|
Seeed StudioTRMNL BYOS protocol | ||
| reTerminal E1003 | 1404×1872 | Verified |
| TRMNL 7.5" OG DIY Kit | 800×480 | Verified |
All E Series and DIY Kit models share the TRMNL BYOS protocol. Pending rows mean hardware-side confirmation on Tesserae’s render path is in progress. | ||
| reTerminal E1001 | 800×480 | Pending |
| reTerminal E1002 | 800×480 | Pending |
| reTerminal E1004 | 1200×1600 | Pending |
| XIAO 7.5" ePaper Panel | 800×480 | Pending |
Pimoroni Inkypi-png / pi-bin | ||
| Inky Impression 5.7" | 600×448 | Verified |
| Inky Impression 7.3" | 800×480 | Verified |
| Inky Impression 13.3" | 1600×1200 | Verified |
| Inky pHAT / wHAT | various | Verified |
| Inky Impression 4" | 640×400 | Pending |
WaveshareESP32 | ||
| Waveshare 13.3" Spectra 6 | 1200×1600 | Verified |
| Waveshare 7.3" PhotoPainter | 800×480 | Verified |
| Waveshare 4.2" B/W | 400×300 | Pending |
TRMNL-compatibleHTTP pull | ||
| TRMNL OG | 800×480 | Verified |
| Kindle Paperwhite 2 (jailbroken) | 758×1024 | Verified |
| TRMNL X | 1872×1404 | Pending |
Anything else: pick custom in Settings → Panel and set the dimensions. “Pending” = awaiting real-hardware confirmation.
Built for hackers
Everything is yours to run, read, and extend
No accounts, no black boxes. From the rendering pipeline to the widget catalog, every layer is open, swappable, and runs on your own hardware.
- Self-hostedDocker or bare-metal; runs on a Pi, NAS, or mini-PC.
- Open sourceAGPL-3.0-or-later, developed in the open.
- Browser dashboard editorResizable cell layout with live preview.
- Server-side renderingHeadless render to each panel’s native gamut.
- MQTT + REST transportsPush over MQTT, or let devices pull over HTTP.
- Python plugin systemCustom tiles, renderers, transports, device adapters.
- Home AssistantAdd-on + MQTT discovery; pages surface as entities.
- REST APIOpenAPI 3.0 spec; trigger pushes from scripts and automations.
- Multi-devicePi, ESP32, Kindle, TRMNL, and custom clients at once.
- Widget & theme catalogOne-click install of community widgets and themes, sha256-pinned.
- Capability sandboxWidgets declare network access; undeclared egress is blocked.
- Scheduling & rotationsPages schedule themselves; rotate dashboards on a wall-clock anchor.
- Theming engine40+ bundled themes, composable type styles, image-to-palette.
- IntegrationsSpotify, GitHub, OctoPrint, F1, weather, AI image generation.
- Battery-aware syncJust-in-time renders, quiet hours, low-battery overlays.
Most e-paper projects are one firmware pinned to one panel. Tesserae splits rendering from transport from hardware, so a single server drives every panel you own.
- Home Assistant users
- Makers
- E-paper enthusiasts
- Self-hosters
- Hardware hackers
- Digital-signage builders