SELF-HOSTED DASHBOARD SERVER

Turn an e-ink panel into a living dashboard.

Compose in a browser, render dithered frames on your own server, and push them to the panel on your wall over MQTT or REST.

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

A weather dashboard on a portrait e-ink panel
A task board on an e-ink panel
A morning dashboard on a wall-mounted e-ink panel
Waveshare 7.3
143GitHub stars
16Panels supported
MQTT + RESTTransports
1,140Passing tests
100%Self-hosted
ZeroTelemetry

Editor

Compose in the browser

Drag, snap, preview — then push to any panel.

Gallery

Dashboards people actually run

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

community templates · click to enlarge

Architecture

One server. Every panel.

Compose once in the browser. Tesserae renders the frame and fans it out to whatever hardware you run — over MQTT or REST.

Browser editorcompose · preview
Tesserae serverrenders dithered frames
Raspberry Pi
ESP32
Kindle
TRMNL
Any Linux

Supported hardware

One server, many panels

Verified across the major e-ink families — with more on the bench. Add your own with a small adapter.

Hardware guide
PanelResolutionStatus
Seeed StudioTRMNL BYOS protocol

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 E1001800×480Pending
reTerminal E1002800×480Pending
reTerminal E10031404×1872Verified
reTerminal E10041200×1600Pending
TRMNL 7.5" OG DIY Kit800×480Verified
XIAO 7.5" ePaper Panel800×480Pending
Pimoroni Inkypi-png / pi-bin
Inky Impression 4"640×400Pending
Inky Impression 5.7"600×448Verified
Inky Impression 7.3"800×480Verified
Inky Impression 13.3"1600×1200Verified
Inky pHAT / wHATvariousVerified
Waveshare 13.3" Spectra 61200×1600Verified
Waveshare 7.3" PhotoPainter800×480Verified
Waveshare 4.2" B/W400×300Pending
TRMNL OG800×480Verified
TRMNL X1872×1404Pending
Kindle Paperwhite 2 (jailbroken)758×1024Verified

Anything else: pick custom in Settings → Panel and set the dimensions. Statuses reflect real-hardware verification.


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

Principles

What you're getting

The defaults Tesserae picks, and the trade-offs they imply.

Fully self-hosted

Runs entirely on your own box. Nothing phones home — your data stays on your network.

Composed in the browser

Drag-and-drop dashboards with live preview. No YAML, no rebuilds, no redeploys.

Rendered server-side

Frames are rasterized on the server, so panels stay simple, cheap, and low-power.

MQTT or REST

Push frames over MQTT, or let devices pull over REST. Fits the network you already run.

Open & extensible

AGPL-3.0, plugin widgets, and drop-in adapters to add new hardware in-tree.

No cloud, no account

No sign-up, no subscription, no telemetry. Yours to run for as long as you like.

01
Compose

Lay out widgets in the browser editor.

02
Render

The server rasterizes a dithered frame for the panel.

03
Push

Send it over MQTT or REST to the panel.

04
Paint

The display refreshes. Done.