SELF-HOSTED DASHBOARD SERVER

Self-hosted dashboards for e-ink displays.

Design dashboards in your browser and deploy them to Raspberry Pi, ESP32, Kindle and TRMNL-compatible displays.

AGPL-3.0-or-later · No telemetry · No cloud account required

·
140+GitHub stars
10Verified panels
MQTT + RESTTransports
1,140Passing tests
AGPL-3.0Licensed
ZeroTelemetry

Gallery

Dashboards I run at home

Weather, transit, home status, dev metrics, now-playing, composed in the browser and rendered to crisp e-ink frames.

click to enlarge

Editor

Compose in the browser

Try it: change the theme, style, and matting; the preview re-renders live.
Tesserae
Home dashboardSaved 1872×1404
Dashboard

Pick a display. The preview re-renders for that panel. The layout sizes to each device.

(default)
10px
10px
Live previewLive

1872 × 1404 · Seeed reTerminal E1003 · real render, no backend

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
Full install guide in the docs
mkdir ~/tesserae && cd ~/tesserae
curl -fsSLO https://raw.githubusercontent.com/dmellok/tesserae/main/docker-compose.yml
docker compose up -d

Quick start

From a server to a panel on the wall

With the server running from the install above, here's the rest of the way to a panel on the wall. Pick your hardware: a Raspberry Pi driving a Pimoroni Inky, or a self-contained Seeed reTerminal E1003.

  1. 01

    Install the Pi client

    On the Raspberry Pi wired to your Inky, as your normal user:

    git clone https://github.com/dmellok/tesserae-device-pi-bin.git
    cd tesserae-device-pi-bin
    ./scripts/install.sh

    The script enables SPI/I²C, asks for your server URL (REST, no broker needed) and panel size, then installs a tesserae-pi-bin-client systemd service.

  2. 02

    Pair the panel

    In Settings → Devices, your Pi appears under Discovered within a few seconds. Click Register to pair it. No tokens to copy.

  3. 03

    Compose a dashboard

    Dashboards → New. Drop in a weather widget, a calendar, a Spotify card, then bind the page to your Inky in the device picker. Hit Push and the Pi paints the frame.

  4. 04

    Put it on a cadence

    Add a schedule from the dashboard's Schedules card: Every N minutes or Daily at a set time. Battery panels can use smart sync to render just before each wake.

Different hardware? The per-client setup guides cover ESP32, TRMNL, Kindle, and the Home Assistant App.Setup guides


Architecture

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.

compose

MQTT / REST

MQTT / REST

REST

REST

Browser editor

Tesserae server

Raspberry Pi

ESP32

Kindle

TRMNL


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.

Hardware guide
PanelResolutionStatus
Seeed StudioTRMNL BYOS protocol
reTerminal E10031404×1872Verified
TRMNL 7.5" OG DIY Kit800×480Verified
Pimoroni Inkypi-png / pi-bin
Inky Impression 5.7"600×448Verified
Inky Impression 7.3"800×480Verified
Inky Impression 13.3"1600×1200Verified
Inky pHAT / wHATvariousVerified
WaveshareESP32
Waveshare 13.3" Spectra 61200×1600Verified
Waveshare 7.3" PhotoPainter800×480Verified
TRMNL-compatibleHTTP pull
TRMNL OG800×480Verified
Kindle Paperwhite 2 (jailbroken)758×1024Verified

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.

Dashboard design

  • Drag-resize cell editor with live preview
  • 14 bundled themes, 60+ in the community catalog
  • Layout presets per panel, composable type styles
  • Scheduling and rotations on a wall-clock anchor

Device support

  • Raspberry Pi — Inky Impression, every size
  • ESP32 — Waveshare, PhotoPainter, custom panels
  • Kindle — via the KOReader plugin
  • TRMNL-compatible — BYOS firmware
  • 10 panels verified on real hardware, 7 on the bench

Integrations

  • Home Assistant app + MQTT discovery
  • Open-Meteo weather, bundled
  • Calendars — CalDAV, Google, iCloud
  • Catalog widgets — Spotify, GitHub, OctoPrint, F1, AI images

Developer

  • Drop-a-folder plugins — widgets, renderers, devices
  • OpenAPI 3.0 REST API
  • AGPL-3.0-or-later, no telemetry, no cloud account
  • 1,140 passing tests
Read the source on GitHub

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.

Designed for
  • Home Assistant users
  • Makers
  • E-paper enthusiasts
  • Self-hosters
  • Hardware hackers
  • Digital-signage builders

Why I built it

I wanted beautiful, self-hosted ambient displays that weren't tied to cloud services or vendor ecosystems. Tesserae grew from a weekend project into a plugin platform spanning several hardware families and rendering pipelines.