Advanced
Niche guides for custom use cases.
By Ryan and 1 other2 authors50 articles
- LLM-ready docsNavigate TRMNL guides with AI friendly formatting.
- Dynamic Polling URLsCustomize and generate API endpoints on the fly.
- Parsing plugins with the Sandbox RuntimeAdvanced feature for private plugins with large payloads.
- AI AgentBuild custom plugins without writing any code.
- ServerlessBuild advanced features and parse large payloads in any language with a free VM.
- UI Framework versioningPick the right Framework dependency for your plugins
- Plugin Markup Version ControlSimple undo / redo functionality for your plugin layouts.
- Visual Editor (IDE)A fully featured web UI for plugin development.
- GitHub SyncVersion control and collaboration for your private plugins and Recipes.
- Saved StateLet a private plugin remember values between refreshes.
- Developer AppsLet other users connect their account to your app without pasting API keys.
- TRMNL CLIManage your TRMNL devices, playlists and plugins from your terminal.
- MCP ServerConnect Claude, ChatGPT, Cursor and other AI agents to your TRMNL account.
- Plugin StrategiesChoose how your private plugin gets its data: polling, webhook, static, plugin merge, async polling or none.
- Account API KeysLet your own scripts and tools read and change your TRMNL account, with only the access you choose.
- Private PluginsBuild a custom plugin with our simple WYSIWYG editor.
- Understanding Color PalettesIt's not all black and white
- 429 Rate LimitUnderstanding this error screen on your device.
- Importing and exporting private pluginsYou worked hard developing your plugin - now share it!
- Liquid 101Start building custom TRMNL plugins with no coding experience.
- Using Google Docs with Private PluginsHow to turn a document into a server and a database.
- Using Google Sheets with Private PluginsHow to turn a spreadsheet into a server and a database.
- Plugins::Base.process! -> StandardError: private_pluginYour new plugin's screen won't generate. After turning on debug logs, your private plugin generates errors about marionette or a TCP connection.
- Reusing Markup with SharedWhether it is Liquid logic or using a template to render content, the Shared tab of the plugin builder is used by all markup views.
- Syncing Plugins with GitHubUsing two workflows in GitHub Actions, push and pull changes between TRMNL and GitHub for your plugins to always keep them in sync.
- Plugin Not Receiving Data from Polling URLWhen a polling URL is accessible with your browser, but is not returning any data in Your Variables within your plugin, it may be blocking our cloud rendering server connection.
- What fonts are used in Framework?Fonts selected for TRMNL are designed to look great on e-ink devices. It's important to consider that the PNG screen generated will look different on an LCD monitor vs the…
- Plugin ComposerDesign plugins for small screens with simple drag-and-drop
- Import: The ZIP file does not contain settings.ymlImporting a plugin and getting an error? Here are a few troubleshooting steps.
- Using Data Mode to Redesign a Native PluginThe Plugin Merge strategy let's you rewrite the markup for native plugins, such as Weather, to customize it exactly how you prefer.
- Framework Design DocsWhen building plugins, the Framework design documents provide the tools necessary for readability, layout, and functionality when designing plugins.
- Debugging native pluginsResolve markup, data visibility, and more in the browser.
- Missing Data in Multiple Polling URLsPlugins can collect data via the polling strategy, and can include multiple URLs in a single plugin by separating each URL by a line break.
- Demo Data for Publishing PluginsWhen you are ready to take your private plugin and turn it into a public recipe, so others can benefit from your work, it's important to make sure you don't…
- Custom plugins with Apple ShortcutsBuild TRMNL plugins directly from your Apple device.
- Grayscale: 1-bit, 2-bit, 4-bit in FrameworkThe plugin design Framework supports 16 levels of greyscale, with and without dithering depending on hardware/firmware capabilities and plugin settings. 1bit, 2bit, 4bit.
- API CatalogEndpoints to accelerate custom plugin development.
- Plugin recipesSharing private plugins for other users to install.
- Testing your Alias or Redirect pluginHow to quickly check on proxied graphics and JSON.
- Creating Inline Images for PluginsYou can reduce a network dependency and point of failure on your plugin by replacing network requests for SVG icons in the Title Bar with inline SVG code using a…
- Skipping Screens within Plugin MarkupThe special TRMNL_SKIP_SCREEN_GENERATION and TRMNL_SKIP_DISPLAY variables allow the plugin to be in control on whether it will be updated or seen.
- Alias PluginFetch encrypted content from any origin.
- Custom plugin filtersImprove content formatting with Liquid and localizations.
- Advanced LiquidPro tips for TRMNL plugin templating.
- Custom plugin form builderCreate user-facing configuration fields with YAML.
- Compare custom plugin typesThere are several ways to build a plugin - which is right for your application?
- Debugging private pluginsResolve API, markup, JavaScript, and more in the browser.
- Webhook ImagePush custom images to your TRMNL display from any script, service, or automation.
- Redirect PluginMITM your device <> core web app request / response journey.
- Recipe best practicesTips to get your plugin published with great UX and functionality.
