# TRMNL

DevFeed: [TRMNL](<https://devfeed.tech/articles/trmnl-36615.md>)

Original publisher: [Read original article](<http://www.imperialviolet.org/2025/07/27/trmnl.html>)

Author: Adam Langley

Published: 2025-07-27T00:00:00Z

Content type: opinion

Language: en

Sources: [ImperialViolet](<https://devfeed.tech/sources/imperialviolet.md>)

Topics: [e-ink](<https://devfeed.tech/topics/e-ink.md>), [Microcontroller](<https://devfeed.tech/topics/microcontroller.md>), [Cloud Run](<https://devfeed.tech/topics/cloud-run.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>), [JSON](<https://devfeed.tech/topics/json.md>), [HTTP](<https://devfeed.tech/topics/http.md>)

Tags: [battery](<https://devfeed.tech/tags/battery.md>), [e-ink](<https://devfeed.tech/tags/e-ink.md>), [firmware](<https://devfeed.tech/tags/firmware.md>), [http](<https://devfeed.tech/tags/http.md>), [program](<https://devfeed.tech/tags/program.md>), [usb](<https://devfeed.tech/tags/usb.md>), [wi-fi](<https://devfeed.tech/tags/wi-fi.md>)

## AI overview

A review of the TRMNL, an 800x600, 1-bit e-ink display powered by a battery and microcontroller. The article describes its firmware and server customization, tile-based display service, Liquid templating, and a Go program on Cloud Run that displays family calendar events. It also notes refresh-scheduling difficulties and the device's relatively high cost.

## Source excerpt

The TRMNL is an 800x600, 1-bit e-ink display connected to a battery and a microcontroller, all housed in a nice but unremarkable plastic case. Because the microcontroller spends the vast majority of the time sleeping, and because e-ink displays don't require power unless they're updating, the battery can last six or more months. It charges over USB-C. When the microcontroller wakes up, it connects to a Wi-Fi network and communicates with a pre-configured server to fetch an 800x600 image to display, and the duration of the next sleep. You can flash your own firmware on the device, or point the standard firmware at a custom server. The company provides an example server, although you can implement the (HTTP-based) protocol in whatever way you wish. I considered running my own server, but thought I would give the easy path a try first to see if it would suffice. The default service lets you split the display into several tiles, and there are a number of pre-built and community-built things that can display in each. None of them worked well for me, but that's okay because you can create your own private ones. They get data either by polling a given URL, or by having data posted to a webhook. The layout is rendered using the Liquid templating system, which I had not used before, but it's reasonably straightforward. I wrote a Go program hosted on Cloud Run which fetches the family shared calendar and converts events from the next week into a JSON format designed to make it trivial to render in the templating system. With a 3D-printed holder, super glue, and some magnets, it's now happily stuck to the fridge where it displays the current date and the family events for the next week. The most awkward part of the default service is managing the refreshes. The device has a sleep schedule, and so do the tiles, which are only updated periodically. So the combination can easily leave the wrong day showing. It would be helpful if the service told you when the device would next up