BYOD/S
Bring your own device, and build your own server for the device to ping.
In the BYOD/S model, the only TRMNL IP is our open source firmware. Technically we don't owe you an explanation to get up and running, but we'll provide one anyway. ;)
Device setup
See our BYOD guide for instructions to build a device that's compatible with our firmware.
Server quickstart
The TRMNL web server generates PNG images. When a device pings our Display API, the next-in-queue image is shared as an absolute URL inside a JSON response like this:
{
"image_url"=>"https://trmnl.s3.us-east-2.amazonaws.com/path-to-img.png"
}For several ready-made OSS server implementations, see BYOS Implementations. To develop your own server that is TRMNL firmware compatible out of the box:
change the base URL to your own server or local network from the WiFi Captive Portal
mimic the
api/setupandapi/displayendpoints per our firmware READMEfollow our ImageMagick guide to create TRMNL firmware compatible images
profit
Other infrastructure
In the quickstart above we glossed over a critical element: "next-in-queue" images.
At TRMNL we use a Playlists table to manage the ordering of plugin instances, letting users drag/drop different items in whatever sequence they prefer.

Each item in a device's Playlist is an instance* of a Plugin, something we call a PluginSetting.
This keeps our Plugins table immutable, for example Google Calendar is just a name, icon, and form field parameters. Meanwhile details about a connection to Google Calendar are stored inside a PluginSetting record. Keep this in mind as you build your own server -- do you want to allow multiple connections to the same parent plugin?
TRMNL also offers a Scheduler. This makes it easy to dictate conditions for when and why a given plugin is displayed on your device.

Following our architecture is unnecessary for a self-hosted e-ink dashboard, but we do encourage you to check out those which have already been implemented in BYOS clients.
Last updated