TRMNL's native design system for developing beautiful, e-ink friendly screens.
Overview
The TRMNL device is an 800x480 pixel, black and white, 1-bit grayscale display. This meant we had to abandon a lot of modern web styling techniques when developing the API. For example: no gradients, no fancy typeface, and no anti-aliasing.
We replaced each of these strategies with dithering patterns, bitmap fonts, and a TRMNL-flavored design system. In these docs you'll learn how to adopt our system to build your own beautiful plugins.
Quickstart
Create an HTML file with our plugins CSS embedded in the <head>.
<!DOCTYPEhtml><html> <head> <linkrel="stylesheet"href="https://usetrmnl.com/css/latest/plugins.css"> </head> <bodyclass="environment"> <divclass="view view--full"> <divclass="layout"> <divclass="columns"> <divclass="column"> <divclass="markdown"> <spanclass="title">Motivational Quote</span> <divclass="content content--center">“I love inside jokes. I hope to be a part of one someday.”</div> <spanclass="label label--underline">Michael Scott</span> </div> </div> </div> </div> <divclass="title_bar"> <imgclass="image"src="https://usetrmnl.com/images/plugins/trmnl--render.svg" /> <spanclass="title">Plugin Title</span> <spanclass="instance">Instance Title</span> </div> </div> </body></html>
The above markup should produce a screen like this:
After designing a screen to your liking (more examples below), replace dynamic content with {{ variable }} references. TRMNL uses the Liquid templating library by Shopify to interpolate values into your template markup.
Next, extract inner the <div class="view view--full"> content and paste it into the Markup field of a custom plugin inside your TRMNL account.
Note: You may also leverage Liquid Filters to reduce the sanitization required by the service producing data for your TRMNL plugins. For example, you can convert "10" to "$10.00" via money_with_currency.
<divclass="item"> <divclass="meta"> <spanclass="index">1</span> </div> <divclass="content"> <spanclass="title title--small">Monthly Catchup with Dev Team</span> <spanclass="description">A monthly meeting to discuss progress and obstacles with the development team</span> <divclass="flex gap-2"> <spanclass="label label--small label--underline">10:00 - 11:00</span> <spanclass="label label--small label--underline">Confirmed</span> </div> </div></div>