TRMNL display mounted on a wall showing calendar, weather, stock prices, and schedule information

What TRMNL Is

TRMNL is a slow-information, always-on display. It is built around a simple idea: ambient, glanceable data beats notification chaos. The hardware is quiet and understated, and the software is intentionally minimal. I love that it treats information as decor rather than alerts.

The thoughtful design shows up in small places. One of my favorite examples is how the team handles accessibility and layout tweaks, like in this short thread: https://bsky.app/profile/ericwbailey.website/post/3mc3ositnc22j. It is a good reminder that calm tech can still sweat the details.

Why I Like It at Home

  • Lives on the wall next to the entry door and never asks for attention, but is always readable.
  • Focuses on a handful of tiles instead of infinite feeds or notifications.
  • Easy to script against, so personal data can be pulled in without a full dashboard project.

The Three Plugins I Built

I used TRMNLP, a local development server for building TRMNL plugins. It’s built in Ruby and uses Liquid templates (the same templating engine Shopify uses), which made it straightforward to design and iterate. The workflow is simple: write Liquid templates locally, watch them update in real time via the dev server, then push finished plugins to TRMNL with a single command.

TRMNL display showing current weather, family calendar with upcoming events, and SBB departure times for local trains

The final setup with weather, calendar, and SBB departures

Swiss Weather Data

I wanted Swiss-specific weather data because the existing TRMNL plugins rely on global weather services that are not nearly as accurate as local ones—especially for same-day predictions in Switzerland where weather can change quickly. MeteoSwiss provides highly detailed and accurate forecasts.

I used as a reference to figure out how the MeteoSwiss API metrics work. The rest was about replicating the official MeteoSwiss design using Highcharts for the temperature/precipitation chart and the TRMNL design framework for consistent styling.

TRMNL Meteoswiss Weather Plugin

This plugin ended up being the bulk of the work. It pulls the official MeteoSwiss forecasts (hourly and multi-day) and maps every condition code to TRMNL’s icon set so the display looks native. To try it yourself:

  • Install manually via the unpublished recipe: https://usetrmnl.com/recipes/198612 (the GitHub repo above stays current).
  • Configure your Swiss postal code (PLZ), pick one of the supported languages (English, Deutsch, Français, Italiano), and choose a layout (Full, Half Horizontal, Half Vertical, or Quadrant).
  • The feed refreshes every ~15 minutes; once set, it just runs quietly like the screenshots in the repo.

SBB Station Board

A station board plugin already exists (), but I wanted to tweak it a bit. Specifically, I added support for multiple lines—so you can display both bus and train departures going to the same destination together. I also integrated the real SBB pictograms for proper visual consistency with actual station boards.

I shared these changes as along with some other minor improvements.

Family Calendar

TRMNL already comes with a good integrated calendar plugin, but to keep the display minimal, I wanted to reduce it further. I created a plugin that uses the “plugin merge” data strategy to leverage the existing Fastmail calendar plugin but render it in a much more simplified way—just a quick preview of events coming up in the next month.

Setup Notes

The out-of-box setup was straightforward: Wi-Fi, add the display to the account, and pick a starter layout. After that, the SDK made it easy to drop in the custom plugins above. Everything has been stable so far, and the whole point—ambient info without pings—works exactly as advertised.