As illustrated in our architecture docs, TRMNL has 1 paradigm that underscores how content is displayed on your device. To summarize:
Devices ping the server. Not the other way around.
Practically this means:
You cannot click a button on our website and 'force' new content to appear on your device. Your device must ask for it.
Your device will not "know" when new content is available to be refreshed; The device must ask for its next screen, and the server will decide what to provide next.
Of course, it's natural to want to skip ahead to new content, or refresh a generated screen while building custom plugins. So that is possible, but you'll leverage both the web interface and your device’s skip button to do it.
On-Demand Refresh
On-demand refresh was enabled for all users by the end of May, 2026. It made the TRMNL refresh experience much closer to most user's common experience of how refresh works. To put it simply, your device requests a screen and our servers anticipate that request and ensure data is fresh and a new screen is ready.
When we say we anticipate the request, we mean exactly that. If we know the next request is coming in 15 minutes, we'll start getting things ready in enough time to have the screen available for your device's request.
There is a progressive set of factors that determine your refresh rate, where each one listed below acts as an override to the one prior.
Device Refresh Rate
In your Device Settings in the top-right (gear icon), in the Battery & Sleep section, you can adjust your device's refresh rate. This is the time it will wait before moving to the next item in your playlist (or refreshing if there is only 1 item).
You can move the slider or click the time intervals below the slider to quickly set your refresh rate. This is a fuzzy value, you cannot set this like a cron job to run every hour, at :00, for instance. Due to batching, server load, WiFi connectivity, and various other factors, a refresh can vary a few seconds each time.
Also note that this can go as low as 5 mins, but that may be restricted by your Account Refresh Rate.
Playlist Item Refresh Rate (Duration)
Within your playlist scheduler, you can set the Duration of an individual item on your playlist, whether a full screen plugin or a mashup.
As noted previously, this is an override to the Device Refresh Rate. If you have 4 items on your playlist that are always visible, at 15 minute refresh rate across all of them, your plugins would refresh every hour.
Minimum Plugin Refresh Rate
The plugin settings page itself usually also offers a Minimum Plugin Refresh Rate or Max Refresh Rate. For a variety of reasons, you may not want to update your plugin as frequently as able, for instance if you were generating a custom AI "daily view" screen and each generation cost money.
If you had 1 plugin in your playlist, and your playlist was set to 15 minute refresh, but your plugin's Max Refresh Rate was set to Every 30 mins, then it would only update every other time the screen refreshed.
Mashup Minimum Refresh Rate
If you have a mashup, the minimum refresh rate is the minimum of all the plugins in that mashup.
Account Refresh Rate
By default, accounts have a 15 minute minimum refresh rate. With TRMNL+, this can be as low as 5 minutes. That means that no matter what, if a playlist is set to refresh every 5 minutes, and there is only 1 plugin, it will not get a new screen generated but every 3rd time.
Additional Reasons for Skipping Refresh
Manual Screen Request
If you manually tap a touchbar or press a button to request the next screen in your playlist, the device receives the current screen stored in our system, because we cannot anticipate that you were going to manually make that request. Only natural refreshes are anticipated. In this scenario, you would need to use the Force Refresh option in the plugin's settings page prior to the manual request, for instance if testing a new plugin setting change.
Data Unchanged
If the underlying data for a plugin that is not Static data or has a different exception in our system, when the screen generation process occurs, if the data has not changed then the screen will not be generated. This includes situations where a plugin may have set special features in their markup to define when to skip screen generation.
As of June 2026, the below summary is no longer accurate. It is kept here for historical purposes to capture the methods and decisions TRMNL made to launch it's first product, the TRMNL OG.
Asynchronous Refresh
Below are more details about how TRMNL refresh rates work.
Plugin refresh rates
Every native plugin has a default refresh rate. For example our "Days left this year" refreshes just 1x per day, because it would be pointless to re-generate the same screen intra-day.
Meanwhile our GitHub Commit Graph updates every 30 minutes. The random Wikipedia article generator refreshes every 4 hours. And our Product Hunt plugin refreshes hourly.
These are just defaults, however. You are welcome to override them on your own account, on a per-plugin basis.
Overriding a plugin's refresh rate
After setting up a plugin in your TRMNL account, you'll notice a refresh rate dropdown on the right side of the settings page:
Depending on which plugin you're editing, this dropdown will have different options.
When it's time to generate new screen content, TRMNL will follow whichever refresh rate is faster -- yours, or the system default.
However, you cannot refresh faster than the system allows. So for example, since Shopify has a max speed of every 10 mins, you can refresh every 10, 15, etc minutes. But since our RSS plugin refreshes at a max speed of 60 mins, you cannot refresh faster than 60 minutes.
We are open to decreasing refresh intervals on a case by case basis. These limitations are simply in place to predict our server resource requirements and maintain free, lifetime usage for all of your TRMNL devices.
Device (playlist) refresh rates
Adjacent to your plugin refresh rates is your device's refresh rate. This is simply how often your TRMNL wakes up, requests new content, renders it, then goes back to sleep.
You may configure your device's refresh (fetch) rate from either the Playlists or Devices tab. If you edit from the Playlists tab, you get even more control, because you can change this interval throughout the day.
For example, you may want to switch between your calendar and the weather every 30 minutes in the morning, but then switch between reddit, your glucose meter, and stock quotes every 5 minutes throughout the afternoon.
It's important to note that the screen generation process, governed by your plugin settings, happens independently of your device wakeup / fetch interval. In other words, TRMNL does not sync content + generate graphics on-demand when your device pings the server. This would be too compute intensive, drain your device battery (to stay awake for fresh content), and have unexpected results in the case that new content doesn't exist or the 3rd party plugin is non-responsive.
Lazy refreshing device content
Above we describe how plugin content may be requested every N minutes, based on your preferences on the plugin settings screen.
However it is possible (and common) that when TRMNL requests new data from a plugin, the content has not changed since our last request.
For example, if your connect Google Calendar and set it to refresh every 15 minutes, TRMNL will sync new calendar events every 15 minutes. But if the events returned to us have the same title, description, start/end date, and so on, TRMNL will not generate a new graphic for your device.
Here's an example of that in action.
This is due to TRMNL's timer-based content generation strategy. Every minute, TRMNL loops through every plugin that is due to be refreshed and attempts to create new screens.
This screen creation attempt has 2 steps:
sync new content
render new content
When TRMNL syncs content, but it matches the previously synced content (from 15+ minutes ago), the system stops and does not re-render (generate a screen) the content.
This saves compute power, without changing your device experience. You will still see the calendar graphic if it's up next on your Playlist, but the image itself may have been generated 15+ minutes ago.
Thus on your plugin settings screen might look like this:
Here we have a 1 hour refresh set on our Shopify plugin, but the "Refreshed" timestamp shows 6 hours ago. That implies we have not received a new order in 6 hours. But rest assured, TRMNL looks for new orders every hour based on our preferences.
Mashup refresh rates
A Mashup is any combination of 2 or more plugins on a single screen, using one of these layouts (excluding the top left option):
Since Mashups are composed of several underlying Playlist items (plugin settings), we sync new data for each of your plugin settings when generating Mashup screens.
Mashups update at the speed of the fastest underlying plugin. So if you have a 3x quadrant Mashup, where the underlying plugins refresh every 15 minutes, hourly, 1x/day, then your entire Mashup will update every 15 minutes.
Determining "when" a refresh occurs
New screens are generated relative to the moment in time that you establish a refresh rate, except 1x / day plugins.
1x / day plugins always refreshes at 00:15 local time. 1x / day mashups always refreshes at 00:30 local time.
If you enable Google Calendar at 14:00 (2p) local time, and the default refresh rate is 1x per hour, then it will refresh daily at 15:00 (3p) your local time.
If you later change your Google Calendar plugin to refresh 4x /day, and you make this change at 18:00 (6p) local time, then new screens will be generated at 18:00, 00:00, 06:00, and 12:00 in your local time.
You may easily manipulate this refresh interval to a more predictable moment, for example every 15 minutes at HH:15, HH:30, and so on, by clicking "Force Refresh" on the right side of your plugin settings screen, at that moment.
Just note that over time, your plugin's refresh interval will slip by a few seconds, possibly every day. This is due to fluctuations in our background queue's number of jobs, server deployments that pause the queue, and so on.
In summary
We're linking this help guide from a few places in-app to clarify how refreshing works, but the main points are:
TRMNL's website does not 'ping' your device, only your device can ping the TRMNL website
Your plugin <> device refresh intervals, when combined with our lazy loading generation strategy, may seem to indicate that plugins are not generating on time. But TRMNL does follow your timing preferences, with exceptions mentioned above.
If you have additional questions, send us an email or live chat at any time.
Stay focused.








