<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/">
  <author>
    <name>community</name>
    <uri>https://trmnl.com</uri>
  </author>
  <author>
    <name>Ryan Kulp</name>
    <uri>https://trmnl.com</uri>
  </author>
  <author>
    <name>Mario Lurig</name>
    <uri>https://trmnl.com</uri>
  </author>
  <category term="trmnl"
    label="TRMNL"/>
  <generator uri="https://trmnl.com"
    version="0.0.0">TRMNL</generator>
  <icon>https://trmnl.com/favicon.ico</icon>
  <id>https://trmnl.com/blog</id>
  <link href="https://trmnl.com/blog"
    rel="alternate"
    type="text/html"
    title="TRMNL: Blog (web)"/>
  <link href="https://trmnl.com/feeds/blog.xml"
    rel="self"
    type="application/atom+xml"
    title="TRMNL: Blog (feed)"/>
  <logo>https://trmnl.com/images/brand/icons/icon--brand.png</logo>
  <rights>Copyright 2026</rights>
  <subtitle>The latest site news and information.</subtitle>
  <title>TRMNL: Blog</title>
  <updated>2026-05-07T00:00:00+00:00</updated>
  <entry>
    <author>
      <name>community</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;p&gt;for more context see the &lt;a href=&quot;https://trmnl.com/blog/creator-fund&quot;&gt;Creator Fund announcement&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;our 7th payout rewards community contributions between April 6, 2026 and May 6, 2026.&lt;/p&gt;&lt;h2&gt;source of funds&lt;/h2&gt;&lt;p&gt;each payout period, a portion of developer-specific revenue goes directly to creators.&lt;/p&gt;&lt;figure class=&quot;lexxy-content__table-wrapper&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;source&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;revenue&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;share&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;amount&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;Stripe&lt;/p&gt;&lt;p&gt;Developer Edition&lt;br&gt;TRMNL+&lt;/p&gt;&lt;p&gt;Shopify&lt;/p&gt;&lt;p&gt;Developer Edition&lt;br&gt;Clarity Kit (X)&lt;br&gt;Clarity Kit (OG)&lt;br&gt;BYOD&lt;/p&gt;&lt;/th&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$3,980&lt;br&gt;$538&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$149.65&lt;br&gt;$12,139.38&lt;br&gt;$14,379.29&lt;br&gt;$18,095.15&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;15%&lt;br&gt;80%&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;15%&lt;br&gt;10%&lt;br&gt;10%&lt;br&gt;10%&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$697&lt;br&gt;$430.40&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$22.45&lt;br&gt;$1,213.94&lt;br&gt;$1,437.93&lt;br&gt;$1,809.52&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/th&gt;&lt;td&gt;&lt;p&gt;$49,281.47&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;mark style=&quot;background-color:var(--highlight-bg-7);&quot;&gt;$5,511.23&lt;/mark&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;&lt;h2&gt;by the numbers&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;total payout: $5,511.23&lt;/li&gt;&lt;li&gt;plugin author share: $3,857.86 (70% of base total)&lt;/li&gt;&lt;li&gt;strategic contributors share: $1,653.37 (30% of base total)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;plugin author&lt;/strong&gt;&lt;/b&gt;&amp;nbsp;earnouts are calculated automatically by a collection of factors including a plugin&#39;s age (on live playlists), presence (by % dominance on playlists), and impressions (times displayed on device), relative to all other community plugins. there is a minimum threshold of 50 total connections (installs + forks) to qualify for monthly payouts. see the algorithm in action &lt;a href=&quot;https://www.youtube.com/watch?v=FJA_tOYcMbI&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;strategic contributors&lt;/strong&gt;&lt;/b&gt;&amp;nbsp;are those who contribute to&amp;nbsp;&lt;a href=&quot;https://github.com/usetrmnl&quot;&gt;TRMNL open source projects&lt;/a&gt;. these earnouts are calculated with a mix of automation + human touch. relative to the funding available, below are allocations by category:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Firmware, 6%&lt;/li&gt;&lt;li&gt;3D Models, 0%&lt;/li&gt;&lt;li&gt;BYOS, 52%&lt;/li&gt;&lt;li&gt;Localizations, 5%&lt;/li&gt;&lt;li&gt;BYOD, 34%&lt;/li&gt;&lt;li&gt;Documentation/Resources, 0%&lt;/li&gt;&lt;li&gt;Tooling, 3%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;note that these allocations change monthly based on contributions by category.&lt;/p&gt;&lt;h2&gt;algorithm?&lt;/h2&gt;&lt;p&gt;over time the above weights, revenue share percentages, and minimum thresholds may change. reporting will become more transparent. our goal is an open sourced algorithm and self-service calculations with daily (or faster) resolution.&lt;/p&gt;&lt;p&gt;candid feedback is welcome, email&amp;nbsp;&lt;a href=&quot;mailto:team@trmnl.com&quot;&gt;team@trmnl.com&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/creator-fund-04-2026</id>
    <link href="https://trmnl.com/blog/creator-fund-04-2026"/>
    <published>2026-05-07T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Creator Fund - April 2026</title>
    <updated>2026-05-07T00:00:00+00:00</updated>
    <dc:date>2026-05-07T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Ryan Kulp</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;p&gt;We &lt;a href=&quot;https://usetrmnl.com/blog/introducing-trmnl-x&quot;&gt;introduced X&lt;/a&gt; on July 30, 2025. Below are live updates since launch.&lt;/p&gt;&lt;h3&gt;When will I receive my TRMNL X?&lt;/h3&gt;&lt;p&gt;We began assembly + fulfillment on March 18 from our USA warehouse.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;Live in USA, Canada, Mexico, or Australia?&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Your TRMNL will ship from our USA warehouse. On April 26 this location received strong, N52 magnets which makes it possible to ship devices with the battery upgrade. Prior to this date we only shipped devices with a single battery, which accounted for just 7% of X preorders.&lt;/p&gt;&lt;p&gt;Between May 3-6 we were temporarily out of charging docks due to a supplier mis-shipment. These arrived May 7th. To remain at full capacity we sent other colors, which means that while we dispatch &amp;gt; 100 devices per day, your spot in the &lt;a href=&quot;https://trmnl.com/order-tracker&quot;&gt;order queue&lt;/a&gt; may not have reduced by 100+ as we fulfilled slightly out of sequential order based on in-stock colors.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;Live in Europe, Asia, Africa, South America, etc?&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Your TRMNL will ship from our Berlin warehouse. Due to issues with Customs and theft from suppliers, this warehouse has only received 3x case colors (Clear, White, Gray) and does not have magnets strong enough to support devices mounted to metal surfaces (e.g. refrigerators).* To receive your device sooner it may be possible to change your color or downgrade to a single battery version. Email niklas@trmnl.com to arrange.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;Strong (N52 grade) magnet arrival?&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;New magnets were shipped to our warehouses in March and finally arrived in the USA on April 26. As founder of TRMNL I guarantee we will scale fulfillment to 100s of devices per day once both warehouses have the missing components described above.&lt;/p&gt;&lt;p&gt;*For more details about magnet issues see the &quot;March&quot; and &quot;April&quot; sections at the bottom of this post.&lt;/p&gt;&lt;h3&gt;Tech Specs&lt;/h3&gt;&lt;p&gt;Highlights below, or see everything &lt;a href=&quot;https://trmnl.com/products/x/spec-sheet&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;10.3&quot; 1872x1404 EPD resolution with 16 shades of gray&lt;/li&gt;&lt;li&gt;Dust and basic waterproofing with a hacker-friendly enclosure&lt;/li&gt;&lt;li&gt;ESP32-S3 with 16MB of flash and 8MB of PSRAM as a core processor with fallback 2.4GHz WiFi&lt;/li&gt;&lt;li&gt;5GHz WiFi support via ESP32-C5 as a modem (external antenna)&lt;/li&gt;&lt;li&gt;Support up to 2x 6000mAh 3.8V LiPo batteries with automatic detection&lt;/li&gt;&lt;li&gt;Battery gas gauge from TI for battery SOC/SOH/capacity tracking&lt;/li&gt;&lt;li&gt;Bosch accelerometer for portrait/landscape orientation&lt;/li&gt;&lt;li&gt;Gesture touch-bar based on Azotech IC&lt;/li&gt;&lt;li&gt;Magnetic pogo pin-based mount for charging and accessories (Coming 2026)&lt;/li&gt;&lt;li&gt;OTG support with 5V 2A output&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Dimensions&lt;/h3&gt;&lt;p&gt;These values may change as we scale production. last updated December 15, 2025.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY2MzIxMjU_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--afd8df5339ded2d0dbc6f0a9c022b8a90db3d452&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://usetrmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY2MzIxMjUsInB1ciI6ImJsb2JfaWQifX0=--4fe9bcea7ce6f5b07810b792a3e4769bd9b3ec05/TRMNL-X-dimensions-2025-12-15.jpg&quot; filename=&quot;TRMNL-X-dimensions-2025-12-15.jpg&quot; filesize=&quot;40897&quot; width=&quot;1278&quot; height=&quot;832&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;X enclosure dimensions (mm)&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY2MzIxMjUsInB1ciI6ImJsb2JfaWQifX0=--4fe9bcea7ce6f5b07810b792a3e4769bd9b3ec05/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--d5e667c0137ab726f37f5f3b8ccaf980246e425b/TRMNL-X-dimensions-2025-12-15.jpg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        X enclosure dimensions (mm)
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;Weight (device only, no attachments)&lt;/p&gt;&lt;p&gt;1 battery - 362 grams&lt;br&gt;2 batteries - 448 grams&lt;/p&gt;&lt;h3&gt;&lt;b&gt;&lt;strong&gt;August 2025&lt;/strong&gt;&lt;/b&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Multiple boards and controllers support touch gestures, battery charging, and 5ghz WiFi&lt;/li&gt;&lt;li&gt;The circular area interfaces with a waterproof &quot;puck&quot; shaped charging connector, and several test points on the motherboard&#39;s bottom will let us build a QA jig for our warehouse&lt;/li&gt;&lt;li&gt;Prior to release we&#39;ll prototypes to your favorite creators for first-look reviews&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;September 2025&lt;/h3&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY0Njk4MDc_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--e65fee844581cfc51ea6b1464022c1afb0ca026c&quot; content-type=&quot;image/png&quot; url=&quot;https://usetrmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY0Njk4MDcsInB1ciI6ImJsb2JfaWQifX0=--3848d7bc1ccc9b3f6dbae3f418cdc08223198ba7/trmnl-x-board-preview.png&quot; filename=&quot;trmnl-x-board-preview.png&quot; filesize=&quot;187997&quot; width=&quot;2636&quot; height=&quot;2066&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;PCB preview&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY0Njk4MDcsInB1ciI6ImJsb2JfaWQifX0=--3848d7bc1ccc9b3f6dbae3f418cdc08223198ba7/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-x-board-preview.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        PCB preview
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;ol&gt;&lt;li&gt;We ordered 50x more prototypes with stronger magnets so devices can attach directly to a surface (e.g. refrigerator) without&amp;nbsp;&lt;a href=&quot;https://github.com/usetrmnl/mounts&quot;&gt;mounts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Dual band WiFi will be powered by the ESP32-C5 and we&#39;ve benchmarked faster speeds + better range with custom modem firmware&lt;/li&gt;&lt;li&gt;Orders with the Battery Upgrade (or Clarity Kit) will now enjoy 10,000mAh versus the announced 7,000mAh variant&lt;/li&gt;&lt;li&gt;Our &quot;charging puck&quot; (name TBD) now has a universal connector for kickstands and other peripheral accessories that will debut in 2026&lt;/li&gt;&lt;li&gt;The same firmware that runs all OG + BYOD devices has&amp;nbsp;&lt;a href=&quot;https://github.com/usetrmnl/trmnl-firmware/tree/trmnl_x_alpha&quot;&gt;been extended&lt;/a&gt;&amp;nbsp;and is already running my own X prototype, &lt;a href=&quot;https://x.com/useTRMNL/status/1979637211412017281&quot;&gt;preview here&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;October 2025&lt;/h3&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY0ODQyMzM_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--a5a50e0b90ef76e5acdf6beea3f046c57655527b&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://usetrmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY0ODQyMzMsInB1ciI6ImJsb2JfaWQifX0=--11ea7b6379735e1dea6bf5387f6192ba4adb2b2b/TRMNL-X-robin-williams-test.jpeg&quot; filename=&quot;TRMNL-X-robin-williams-test.jpeg&quot; filesize=&quot;265844&quot; width=&quot;960&quot; height=&quot;1280&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Grayscale testing with a GOAT&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY0ODQyMzMsInB1ciI6ImJsb2JfaWQifX0=--11ea7b6379735e1dea6bf5387f6192ba4adb2b2b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/TRMNL-X-robin-williams-test.jpeg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Grayscale testing with a GOAT
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;ol&gt;&lt;li&gt;The first batch of screens arrived at our USA warehouse, more en route to our &lt;a href=&quot;https://usetrmnl.com/blog/slashing-postage-rates-again&quot;&gt;Berlin warehouse&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Gesture bar + charging pucks are in small batch production&lt;/li&gt;&lt;li&gt;Received and approved packaging samples. Model X packaging will be more premium and protective than OG packaging.&lt;/li&gt;&lt;li&gt;Consolidating WiFi antennas (2.4 + 5gh) to a single component&lt;/li&gt;&lt;li&gt;Added 3 angle options (degrees) to the kickstand&lt;/li&gt;&lt;li&gt;[Work in progress] battery options may grow another 20% to 6000/12000mAh variants pending more testing&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;November 2025&lt;/h3&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY1MTg1ODA_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--d8a89686dba4f4b04bc16dcb136c95eab525f0bd&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://usetrmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY1MTg1ODAsInB1ciI6ImJsb2JfaWQifX0=--c1477124c066c9bfa66b9ccd6f09cb176c30b9d9/TRMNL-X-assembly.jpeg&quot; filename=&quot;TRMNL-X-assembly.jpeg&quot; filesize=&quot;296326&quot; width=&quot;1280&quot; height=&quot;960&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Full assembly (3D printed parts, not final)&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY1MTg1ODAsInB1ciI6ImJsb2JfaWQifX0=--c1477124c066c9bfa66b9ccd6f09cb176c30b9d9/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/TRMNL-X-assembly.jpeg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Full assembly (3D printed parts, not final)
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY1MTc0OTY_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--824732486c8578547d16075875d06a33df483cc4&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://usetrmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY1MTc0OTYsInB1ciI6ImJsb2JfaWQifX0=--74089f2a8c4c8b2d415181e16336639c0fca35f4/TRMNL-X-prototype-back.jpeg&quot; filename=&quot;TRMNL-X-prototype-back.jpeg&quot; filesize=&quot;173771&quot; width=&quot;1280&quot; height=&quot;674&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Fully functional prototype (3D printed case, non-branded silicone pads)&quot;&gt;&lt;/action-text-attachment&gt;&lt;/p&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY1MTc0OTYsInB1ciI6ImJsb2JfaWQifX0=--74089f2a8c4c8b2d415181e16336639c0fca35f4/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/TRMNL-X-prototype-back.jpeg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Fully functional prototype (3D printed case, non-branded silicone pads)
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY1MTc0OTc_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--3cf5cb7b951505b570349e23af70950eec7fd0cd&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://usetrmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY1MTc0OTcsInB1ciI6ImJsb2JfaWQifX0=--aaf5c4631331eaf1ee4fbc0f8b97cab4cdc71593/TRMNL-X-prototype-front.jpeg&quot; filename=&quot;TRMNL-X-prototype-front.jpeg&quot; filesize=&quot;238857&quot; width=&quot;1280&quot; height=&quot;960&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Prototype running latest (public) firmware release&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY1MTc0OTcsInB1ciI6ImJsb2JfaWQifX0=--aaf5c4631331eaf1ee4fbc0f8b97cab4cdc71593/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/TRMNL-X-prototype-front.jpeg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Prototype running latest (public) firmware release
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Added extra reset buttons to S3 and C5 MCUs for hacker friendliness, board design is final&lt;/li&gt;&lt;li&gt;Batteries are in production and we can confirm the improved 6k / 12kmAh sizing (announced size: 5k / 7k)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Enclosure injection molds are in production, purchase order placed for thousands of cases in different colors&lt;/li&gt;&lt;li&gt;Magnet deliveries from Chinese factories have been delayed due to recent&amp;nbsp;&lt;a href=&quot;https://www.cnbc.com/2025/11/10/china-suspends-some-critical-mineral-export-curbs-to-the-us-as-trade-truce-takes-hold.html&quot;&gt;Critical Mineral Export Bans&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;December 2025&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Battery production complete, shipping to our warehouses next week&lt;/li&gt;&lt;li&gt;EC licenses underway at testing facilities&lt;/li&gt;&lt;li&gt;Packaging in mass production&lt;/li&gt;&lt;li&gt;Magnets in mass production&lt;/li&gt;&lt;li&gt;[New] OTG functionality - power other devices from your TRMNL&#39;s charging puck&lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;January 2026&lt;/h3&gt;&lt;p&gt;From my desk to yours, a &lt;a href=&quot;https://www.youtube.com/watch?v=LNcoAZJP3hk&quot;&gt;video update&lt;/a&gt;.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY3NTYyNDE_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--ff980753fe59bd5c1d900042c94b672cb7df22bd&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY3NTYyNDEsInB1ciI6ImJsb2JfaWQifX0=--4a9e8b1d8020df4a822132b47790326a0e899297/trmnl-x-fulfillment-update-jan-2026.jpg&quot; filename=&quot;trmnl-x-fulfillment-update-jan-2026.jpg&quot; filesize=&quot;102241&quot; width=&quot;1280&quot; height=&quot;720&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY3NTYyNDEsInB1ciI6ImJsb2JfaWQifX0=--4a9e8b1d8020df4a822132b47790326a0e899297/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--d5e667c0137ab726f37f5f3b8ccaf980246e425b/trmnl-x-fulfillment-update-jan-2026.jpg&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;h3&gt;February 2026&lt;/h3&gt;&lt;p&gt;From our warehouse to your desk, a &lt;a href=&quot;https://www.youtube.com/watch?v=hiUiWCy93kg&quot;&gt;video update&lt;/a&gt;.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY4MDMzNzA_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--552e5837128e6639a6a9fcb2642fef5ad103b626&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY4MDMzNzAsInB1ciI6ImJsb2JfaWQifX0=--8d3563708b4c2953b5f4e0585a21d05396a8fbe9/model-x-fulfillment-update-2.jpeg&quot; filename=&quot;model-x-fulfillment-update-2.jpeg&quot; filesize=&quot;227933&quot; width=&quot;1280&quot; height=&quot;720&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY4MDMzNzAsInB1ciI6ImJsb2JfaWQifX0=--8d3563708b4c2953b5f4e0585a21d05396a8fbe9/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/model-x-fulfillment-update-2.jpeg&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;h3&gt;March 2026&lt;/h3&gt;&lt;p&gt;From my desk to yours, a &lt;a href=&quot;https://www.youtube.com/watch?v=TVSFlB5-ldk&quot;&gt;video update&lt;/a&gt;.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTY5MDQ5NjM_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--871782b71aa9639d525d2c027127dc00c01ca445&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY5MDQ5NjMsInB1ciI6ImJsb2JfaWQifX0=--e75e94298c78b2288a20d9f90d48226ddd589d1f/trmnl-x-now-shipping-video-update.jpg&quot; filename=&quot;trmnl-x-now-shipping-video-update.jpg&quot; filesize=&quot;184157&quot; width=&quot;1280&quot; height=&quot;720&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTY5MDQ5NjMsInB1ciI6ImJsb2JfaWQifX0=--e75e94298c78b2288a20d9f90d48226ddd589d1f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--d5e667c0137ab726f37f5f3b8ccaf980246e425b/trmnl-x-now-shipping-video-update.jpg&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;If you prefer not to watch the video, in summary we&#39;re shipping single-battery devices only from our USA warehouse because our magnet supplier ripped us off and sent thousands of weak magnets, following multiple sample shipments with the correct (strong) magnets.&lt;/p&gt;&lt;p&gt;As of Wednesday, March 18:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Berlin warehouse has all 3 types of PCBs&lt;/li&gt;&lt;li&gt;Berlin warehouse should receive device enclosures in 1-2 weeks&lt;/li&gt;&lt;li&gt;USA warehouse has everything and has begun assembly + fulfillment&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To check your place in the queue go here:&lt;br&gt;&lt;a href=&quot;https://trmnl.com/order-tracker&quot;&gt;https://trmnl.com/order-tracker&lt;/a&gt;&lt;/p&gt;&lt;p&gt;If you already have a TRMNL, install the Order Tracker plugin to stay up to date:&lt;br&gt;&lt;a href=&quot;https://trmnl.com/recipes/260817&quot;&gt;https://trmnl.com/recipes/260817&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;How can I estimate the time it will take to receive mine?&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Devices will be shipped in the order they were purchased and we intend to scale to 100s of fulfillments per day, as we have done for past releases and back-in-stock periods.&lt;/p&gt;&lt;p&gt;Our 2x warehouses have trained 15+ individuals to flash, assemble, and ship devices. We do not outsource to 3rd party logistics companies. You can learn more about our end to end philosophy and technology &lt;a href=&quot;https://trmnl.com/blog/in-house-fulfillment&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://trmnl.com/blog/logistics-tech&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h3&gt;April 2026&lt;/h3&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMzQ3NzA_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--67bc3d1334c8268ecdb70e1f782f074bf1d264b6&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMzQ3NzAsInB1ciI6ImJsb2JfaWQifX0=--4cfe457627cf9aeecbf3fd623d1ecbe4ccb149ab/trmnl-x-magnet-performance.jpeg&quot; filename=&quot;trmnl-x-magnet-performance.jpeg&quot; filesize=&quot;122001&quot; width=&quot;1280&quot; height=&quot;720&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMzQ3NzAsInB1ciI6ImJsb2JfaWQifX0=--4cfe457627cf9aeecbf3fd623d1ecbe4ccb149ab/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/trmnl-x-magnet-performance.jpeg&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;See a live demonstration of strong, N52 grade magnets on various refrigerator surfaces in &lt;a href=&quot;https://youtu.be/_0_XQ63_Hf0&quot;&gt;this video update&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;On April 26, &lt;a href=&quot;https://www.reddit.com/r/trmnl/s/niT6hBdSUT&quot;&gt;N52 magnets arrived&lt;/a&gt; at our USA warehouse and assembly/fulfillment pace will increase dramatically beginning Monday, April 27.&lt;/p&gt;&lt;p&gt;On April 27, white + gray cases arrived at our Berlin warehouse and they are building half-assemblies (docks, kickstands) as they await N52 magnets.&lt;/p&gt;&lt;h3&gt;May 2026&lt;/h3&gt;&lt;p&gt;The USA warehouse has been shipping 100+ devices per day since May 1st. However, between May 2-6th we were out of stock of charging docks for several colors due to a supplier mistake. To mitigate we assembled devices of all colors, but only fulfilled in-stock (charging dock) orders, some of which may sequentially be &lt;a href=&quot;https://trmnl.com/order-tracker&quot;&gt;behind yours&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;On May 7, black and sage charging docks arrived, allowing us to mostly ship in sequential order. This ensures the highest throughput overall, as punishing later orders with in-stock colors does not increase the speed of out-of-stock colors arriving&lt;b&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/model-x-progress</id>
    <link href="https://trmnl.com/blog/model-x-progress"/>
    <published>2026-05-07T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Model X Progress Report</title>
    <updated>2026-05-07T00:00:00+00:00</updated>
    <dc:date>2026-05-07T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Mario Lurig</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;blockquote&gt;This post is part of a series, featuring the incredible work of plugin authors who grow the TRMNL plugin ecosystem with every contribution. The TRMNL team has individually selected these plugins and authors to be featured.&lt;/blockquote&gt;&lt;h2&gt;&lt;a href=&quot;https://trmnl.com/recipes/260558&quot;&gt;Supercars Drivers&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Community member Sam Sharp created the &lt;a href=&quot;https://trmnl.com/recipes/260558&quot;&gt;Supercars Drivers&lt;/a&gt; plugin; here are their words on how it was created.&lt;/p&gt;&lt;h3&gt;Why did you want this plugin to exist?&lt;/h3&gt;&lt;p&gt;I wanted this plugin to exist because Supercars is one of my favorite racing series and I liked the idea of having the standings visible in a clean, simple format while giving me one less excuse to check my phone. It also felt like a good addition to the marketplace because Australian sports had not yet been well represented. More broadly, it became part of a fun hobby of extending the project to cover the sports I enjoy that had not been built yet.&lt;/p&gt;&lt;h3&gt;How did you balance look vs functionality?&lt;/h3&gt;&lt;p&gt;Primarily wanted a clean and functional design so it&#39;s easily readable and makes use of all the screen real estate afforded by each device/layout. As I have begun to branch out and try new designs I&#39;ve started to increase my use of images and more appealing design elements from the framework.&lt;/p&gt;&lt;h4&gt;TRMNL OG&lt;/h4&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxOTIwOTI_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--fab3b9d96f3315695023967ffe11d099fdfd57c5&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTIwOTIsInB1ciI6ImJsb2JfaWQifX0=--4a8fb8060abc9fd45988023edec5062607170f88/Supercars%20Drivers%20260558.png&quot; filename=&quot;Supercars Drivers 260558.png&quot; filesize=&quot;7803&quot; width=&quot;800&quot; height=&quot;480&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTIwOTIsInB1ciI6ImJsb2JfaWQifX0=--4a8fb8060abc9fd45988023edec5062607170f88/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/Supercars%20Drivers%20260558.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;h4&gt;TRMNL X&lt;/h4&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxOTIxMDQ_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--a4ee5fcc8768358513f1686b4d269c3b0649c3a3&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTIxMDQsInB1ciI6ImJsb2JfaWQifX0=--2a6b1e678d0bafa3d81d26eb6a7d485b0d8ca7bb/Supercars%20Drivers%20X%20260558.png&quot; filename=&quot;Supercars Drivers X 260558.png&quot; filesize=&quot;141703&quot; width=&quot;1039&quot; height=&quot;778&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTIxMDQsInB1ciI6ImJsb2JfaWQifX0=--2a6b1e678d0bafa3d81d26eb6a7d485b0d8ca7bb/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/Supercars%20Drivers%20X%20260558.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;h3&gt;Were you inspired by any other recipes or plugin creators?&lt;/h3&gt;&lt;p&gt;Main inspirations on content and design were Daniel Sitnik&#39;s &lt;a href=&quot;https://trmnl.com/recipes/11914&quot;&gt;Formula 1 Races&lt;/a&gt; and &lt;a href=&quot;https://trmnl.com/recipes/30563&quot;&gt;Formula 1 Constructor Standings&lt;/a&gt; plugins.&lt;/p&gt;&lt;h3&gt;What was your process for creating the plugin?&lt;/h3&gt;&lt;p&gt;Was initially writing everything manually and updating static JSON as a PoC and test rendering on a real device. Recently getting a Github Copilot subscription and OpenCode has really sped up the building and testing. Incorporating the preview and API tools in the &lt;a href=&quot;https://github.com/usetrmnl/trmnlp&quot;&gt;trmnlp&lt;/a&gt; repo has been especially helpful with iterating locally before easily updating all layouts through the API (once instating a beta plugin strategy to prevent over eager agents pushing changes to published recipes).&lt;/p&gt;&lt;h3&gt;What, if any, challenges did you face while creating it?&lt;/h3&gt;&lt;p&gt;The plugin categories were a bit buried in the docs so took me a while to find which values were allowed. Making changes to layout when they are relevant to multiple layouts/plugins got tedious when performing manually. Only gap I&#39;ve found is the inability to adjust the custom fields easily through the preview GUI. I&#39;ve written a wrapper to handle this when launching the preview but would be more convenient through the GUI. Would also be useful to access the Chef linter prior to requesting publishing.&lt;/p&gt;&lt;h3&gt;Did you learn anything you want to apply to future recipes?&lt;/h3&gt;&lt;p&gt;More rounded backgrounds / info tiles, icons and horizontal/rounded gauges. Also trying to think about more custom fields that may be useful and applying them to more devices and layouts as mine primarily focus on the v3 Full layout.&lt;/p&gt;&lt;h3&gt;Is there a tip you would give to a new plugin developer?&lt;/h3&gt;&lt;p&gt;Keep as close to the UI &lt;a href=&quot;https://trmnl.com/framework/docs/v3&quot;&gt;Framework&lt;/a&gt; as possible as some styling may appear to work in the preview but not once rendered on device. Try to think about how best to use all real estate afforded on each device and what custom fields might be useful/fun to incorporate early as refactoring later on can get tedious.&lt;/p&gt;&lt;h3&gt;What is your favorite plugin that someone else created and why?&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://trmnl.com/integrations/strmnl&quot;&gt;STRMNL Activity&lt;/a&gt; - Has been really satisfying seeing my activities stack as the week progresses and being laid out in a really nice format.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/featured-plugin-supercars-drivers</id>
    <link href="https://trmnl.com/blog/featured-plugin-supercars-drivers"/>
    <published>2026-05-06T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Featured Community Plugin - Supercars Drivers</title>
    <updated>2026-05-06T00:00:00+00:00</updated>
    <dc:date>2026-05-06T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Ryan Kulp</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;March 29, 2024&lt;/strong&gt;&lt;/b&gt;. pre-production samples arrived and we tested our first plugin. it looked like crap.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ1MzY_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--9707859005498c18858b6aceca905f2f8085e048&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ1MzYsInB1ciI6ImJsb2JfaWQifX0=--408a7e451d8e14528029f79c807fb6ad37c9b496/trmnl-prototype-march-2024.jpeg&quot; filename=&quot;trmnl-prototype-march-2024.jpeg&quot; filesize=&quot;76511&quot; width=&quot;640&quot; height=&quot;480&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;TRMNL OG, March 2024&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ1MzYsInB1ciI6ImJsb2JfaWQifX0=--408a7e451d8e14528029f79c807fb6ad37c9b496/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/trmnl-prototype-march-2024.jpeg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        TRMNL OG, March 2024
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;minutes later, &lt;a href=&quot;https://www.youtube.com/watch?v=hqi0114mwtY&quot;&gt;anti-aliasing&lt;/a&gt; became a topic of daily conversation. with my colleagues and with my wife. our little consumer grade panel couldn&#39;t handle font smoothing, we needed a bitmap option.&lt;/p&gt;&lt;h2&gt;MVP&lt;/h2&gt;&lt;p&gt;enter &lt;a href=&quot;https://emhuo.itch.io/nico-pixel-fonts-pack&quot;&gt;Nico&lt;/a&gt; and &lt;a href=&quot;https://www.fontriver.com/font/blockkie/&quot;&gt;BlockKie&lt;/a&gt;. a huge thanks to creators &lt;a href=&quot;https://emhuo.itch.io/&quot;&gt;Emily Huo&lt;/a&gt; and &lt;a href=&quot;https://www.fontriver.com/foundry/joohn_fonts/&quot;&gt;Joohn&lt;/a&gt; for their excellent work and gracious OSS licensing.&lt;/p&gt;&lt;p&gt;soon after we added &lt;a href=&quot;https://fonts.google.com/specimen/Inter&quot;&gt;Inter&lt;/a&gt; to the lineup, which is great for brief + large values like numbers and dates.&lt;/p&gt;&lt;p&gt;before Inter:&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ1ODE_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--3448144136133216db8e785645376ded4d07e1cc&quot; content-type=&quot;image/bmp&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ1ODEsInB1ciI6ImJsb2JfaWQifX0=--fe817d8fadb4f37b9408fd117cf110acdfde47c1/trmnl-days-left-bitmap-example.bmp&quot; filename=&quot;trmnl-days-left-bitmap-example.bmp&quot; filesize=&quot;48062&quot; width=&quot;800&quot; height=&quot;480&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--bmp&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ1ODEsInB1ciI6ImJsb2JfaWQifX0=--fe817d8fadb4f37b9408fd117cf110acdfde47c1/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-days-left-bitmap-example.bmp&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;after Inter:&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ1OTA_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--f126a6d607d5853f987a146ce4d466d43010920e&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ1OTAsInB1ciI6ImJsb2JfaWQifX0=--36a3f4ebbc7edcf4256fa204dce00576485449d3/trmnl-days-left-inter-example.png&quot; filename=&quot;trmnl-days-left-inter-example.png&quot; filesize=&quot;3086&quot; width=&quot;800&quot; height=&quot;480&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ1OTAsInB1ciI6ImJsb2JfaWQifX0=--36a3f4ebbc7edcf4256fa204dce00576485449d3/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-days-left-inter-example.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;with fonts mostly figured out we shifted design effort to &lt;a href=&quot;https://trmnl.com/blog/design-system&quot;&gt;Framework&lt;/a&gt;, our UI library for ePaper displays generally.&lt;/p&gt;&lt;h2&gt;whole product&lt;/h2&gt;&lt;p&gt;making Framework a viable resource took a couple years and is the brainchild of &lt;a href=&quot;https://trmnl.com/about&quot;&gt;Lucian&lt;/a&gt;. as fewer developers reached for &lt;code&gt;&amp;lt;import tailwind&amp;gt;&lt;/code&gt; in their markup, we knew we were on the right track.&lt;/p&gt;&lt;p&gt;just last month we shipped &lt;a href=&quot;https://trmnl.com/framework/docs/3.0&quot;&gt;v3.0&lt;/a&gt; with color support, dark mode, and so much more.&lt;/p&gt;&lt;p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ2NjY_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--a03f7042cd43c3613e0541cc66444e22aab17844&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ2NjYsInB1ciI6ImJsb2JfaWQifX0=--840d619f60a5b8248442a0d5fe6709080c3335cf/trmnl-framework-colors.png&quot; filename=&quot;trmnl-framework-colors.png&quot; filesize=&quot;41260&quot; width=&quot;740&quot; height=&quot;421&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Spectra 6 and BWRY palettes&quot;&gt;&lt;/action-text-attachment&gt;&lt;/p&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ2NjYsInB1ciI6ImJsb2JfaWQifX0=--840d619f60a5b8248442a0d5fe6709080c3335cf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-framework-colors.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Spectra 6 and BWRY palettes
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ2NzA_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--f2da22119b951caf891ebb15de9423154942dcf6&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ2NzAsInB1ciI6ImJsb2JfaWQifX0=--27cdfc7a7377da82c200e49cb22487310e178310/trmnl-framework-dark-mode.png&quot; filename=&quot;trmnl-framework-dark-mode.png&quot; filesize=&quot;27798&quot; width=&quot;933&quot; height=&quot;551&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Progress bars, grayscale, dark mode&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ2NzAsInB1ciI6ImJsb2JfaWQifX0=--27cdfc7a7377da82c200e49cb22487310e178310/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-framework-dark-mode.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Progress bars, grayscale, dark mode
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Framework is part CSS, part JavaScript.&lt;/p&gt;&lt;p&gt;the CSS does what you&#39;d expect: make things pretty. whereas JS &lt;a href=&quot;https://trmnl.com/framework/docs/3.1/overflow&quot;&gt;modulations&lt;/a&gt; do fancy stuff: truncate text, abbreviate large numbers, even &lt;a href=&quot;https://trmnl.com/framework/docs/3.1/pixel_perfect&quot;&gt;bump pixels&lt;/a&gt; to the very edge of a frame.&lt;/p&gt;&lt;h2&gt;final form&lt;/h2&gt;&lt;p&gt;today we&#39;re proud to announce Framework v3.1, which ships with &lt;a href=&quot;https://trmnl.com/framework/docs/3.1/font_family&quot;&gt;2x font bundles&lt;/a&gt;.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Classic&lt;/strong&gt;&lt;/b&gt; includes Nico, BlockKie, and Inter&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;TRMNL&lt;/strong&gt;&lt;/b&gt; includes three hand-made families in Regular and Bold weights&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;our starting sizes are 12, 16, and 21pt, optimized for the TRMNL OG 7.5&quot; display.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxOTA1MTU_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--64546613608695f502cb80b97fcfbb799f6b8458&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTA1MTUsInB1ciI6ImJsb2JfaWQifX0=--ea60f8067f3d935b64732020c73bec2adc529c7d/cuts-in-tandem.png&quot; filename=&quot;cuts-in-tandem.png&quot; filesize=&quot;35378&quot; width=&quot;3080&quot; height=&quot;1732&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;TRMNL font cuts in tandem&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTA1MTUsInB1ciI6ImJsb2JfaWQifX0=--ea60f8067f3d935b64732020c73bec2adc529c7d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/cuts-in-tandem.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        TRMNL font cuts in tandem
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;each weight contains 694 glyphs spanning Latin, Western/Eastern European, symbols, operators, even dingbats. &lt;a href=&quot;https://trmnl.com/font-family&quot;&gt;see them in action&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ3NTc_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--ecc6ad13e17d6512145f1679d7dbbe8bd699b494&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ3NTcsInB1ciI6ImJsb2JfaWQifX0=--78db767ddacef6e2c8b37a28bd59941f084c83db/trmnl-font-before-after.png&quot; filename=&quot;trmnl-font-before-after.png&quot; filesize=&quot;5845&quot; width=&quot;820&quot; height=&quot;240&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Classic → TRMNL&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ3NTcsInB1ciI6ImJsb2JfaWQifX0=--78db767ddacef6e2c8b37a28bd59941f084c83db/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-font-before-after.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Classic → TRMNL
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;TRMNL font is crunchy but smooth, tight but legible, bitmap-safe but ready to party. it&#39;s also going to be open source. friends don&#39;t let friends struggle with ePaper readability.&lt;/p&gt;&lt;h2&gt;get started&lt;/h2&gt;&lt;p&gt;if you build Private Plugins, upgrade to Framework v3.1 from the settings screen.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ4MTA_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--d5f23a018cf4d361265ea1cba93d9362cd570481&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ4MTAsInB1ciI6ImJsb2JfaWQifX0=--3d1dc342467bce46f8dfb8eba3423392b1222769/trmnl-private-plugin-framework-version-picker.png&quot; filename=&quot;trmnl-private-plugin-framework-version-picker.png&quot; filesize=&quot;20543&quot; width=&quot;557&quot; height=&quot;187&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Pin a version or set to &amp;quot;track latest&amp;quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ4MTAsInB1ciI6ImJsb2JfaWQifX0=--3d1dc342467bce46f8dfb8eba3423392b1222769/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-private-plugin-framework-version-picker.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Pin a version or set to &quot;track latest&quot;
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;to try the TRMNL font on specific plugins, navigate to your Playlist and hover the (•••) icon &amp;gt; Presentation &amp;gt; Font Family &amp;gt; TRMNL.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzQ4MDE_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--53168c7a076f6a96c57f29c8424aa02941ad04f5&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ4MDEsInB1ciI6ImJsb2JfaWQifX0=--f26c0f78819329ccffd883b90dcdeedafff5fc21/trmnl-playlist-item-presentation-font-family.png&quot; filename=&quot;trmnl-playlist-item-presentation-font-family.png&quot; filesize=&quot;48703&quot; width=&quot;780&quot; height=&quot;508&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Switch fonts on a per-plugin basis&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzQ4MDEsInB1ciI6ImJsb2JfaWQifX0=--f26c0f78819329ccffd883b90dcdeedafff5fc21/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-playlist-item-presentation-font-family.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Switch fonts on a per-plugin basis
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;to upgrade all your plugins to the TRMNL font, visit your &lt;a href=&quot;https://trmnl.com/devices/current/palette/edit&quot;&gt;Device settings &amp;gt; Palette configuration&lt;/a&gt;:&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxMzY1OTY_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--9c22b59f1e3efa6fb4bf2a8ae77dce3b28def43f&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzY1OTYsInB1ciI6ImJsb2JfaWQifX0=--59321fbddaef53be9e4f6a54ecf3fa566d445ba2/trmnl-device-font-family-settings.png&quot; filename=&quot;trmnl-device-font-family-settings.png&quot; filesize=&quot;21363&quot; width=&quot;620&quot; height=&quot;248&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxMzY1OTYsInB1ciI6ImJsb2JfaWQifX0=--59321fbddaef53be9e4f6a54ecf3fa566d445ba2/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-device-font-family-settings.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;note&lt;/strong&gt;&lt;/b&gt; that if a given plugin (native or otherwise) is pinned to an earlier Framework release (&amp;lt; 3.1), your font family preference will fall back to the Classic bundle until that plugin is updated.&lt;/p&gt;&lt;p&gt;for more information, read the docs:&lt;br&gt;&lt;a href=&quot;https://trmnl.com/framework/docs/3.1/font_family&quot;&gt;https://trmnl.com/framework/docs/3.1/font_family&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;what&#39;s next&lt;/h2&gt;&lt;p&gt;our first release has a few icons and some non-Latin characters. but we&#39;re thinking a native icon pack (&lt;code&gt;trmnl-icon-star&lt;/code&gt;) might be useful too. or even Korean, and maybe a bitmap take on emojis.&lt;/p&gt;&lt;p&gt;we look forward to your feedback and can&#39;t wait to see what you build.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/introducing-typography</id>
    <link href="https://trmnl.com/blog/introducing-typography"/>
    <published>2026-04-30T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Introducing Typography</title>
    <updated>2026-04-30T00:00:00+00:00</updated>
    <dc:date>2026-04-30T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Mario Lurig</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;blockquote&gt;&lt;p&gt;I made something great, and now I want to share it with others!&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This sentiment has been thought by 100s of plugin authors, willing to transform their work from private benefit to public good. To do that, authors go through our &lt;i&gt;&lt;em&gt;recipe review &lt;/em&gt;&lt;/i&gt;process. This comes in two steps:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Automated feedback from CHEF, a tool to catch common mistakes or oversights before submission.&lt;/li&gt;&lt;li&gt;Manual feedback from a human, where we look over everything to make sure it meets our quality bar, then provide you with specific feedback and guidance about changes, if needed, that are required before publishing.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;While it is ever evolving, here is the steps we go through to make sure your recipe is ready to go, broken down into sections of the plugin. Some quick terminology:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;user&lt;/strong&gt;&lt;/b&gt;: Someone who installs or forks a plugin recipe.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;author&lt;/strong&gt;&lt;/b&gt;: Creator and maintainer of a plugin recipe.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Plugin Ecosystem&lt;/h2&gt;&lt;p&gt;Recipes are evaluated on how they contribute to the plugin ecosystem overall. This includes a few core ideals:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Collaboration over competition&lt;/strong&gt;&lt;/b&gt;. A new recipe should not be seen by a user as indistinguishable from an existing recipe. If there is a similar plugin, it should add easily identifiable value.&lt;br&gt;Efforts to improve existing plugins should be the first priority, but we understand that if the original author is non-responsive or your suggestions are outside of the goals they have for their recipe, that a new recipe can be appropriate.&lt;br&gt;Similar topics, but different data sources, are great examples of where &lt;i&gt;&lt;em&gt;competition&lt;/em&gt;&lt;/i&gt; is valuable and completely acceptable.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Depth, not numbers&lt;/strong&gt;&lt;/b&gt;. Variations on an idea should be encompassed within a single recipe. Whenever possible, a recipe that serves multiple themes, layouts, or even highlights different data &lt;i&gt;&lt;em&gt;from the same data source&lt;/em&gt;&lt;/i&gt; by using form fields is more valuable than multiple recipes creating &lt;i&gt;&lt;em&gt;noise&lt;/em&gt;&lt;/i&gt; in the search results. We consider &lt;i&gt;&lt;em&gt;omnibus&lt;/em&gt;&lt;/i&gt; plugins like &lt;a href=&quot;https://trmnl.com/recipes/180935&quot;&gt;Comic Library&lt;/a&gt; strong additions to the ecosystem.&lt;br&gt;TL;DR We want higher quality, not just more.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Family friendly&lt;/strong&gt;&lt;/b&gt;. The default option is always family friendly and non-offensive. If content (language, images) that wouldn&#39;t be appropriate for a 13-year-old could appear, it should be &lt;b&gt;&lt;strong&gt;default&lt;/strong&gt;&lt;/b&gt; filtered &lt;i&gt;&lt;em&gt;off&lt;/em&gt;&lt;/i&gt;. If a recipe cannot be, you can publish it as &lt;b&gt;&lt;strong&gt;unlisted&lt;/strong&gt;&lt;/b&gt;, which makes it available to others, but will not show up in any search results.&lt;br&gt;Additionally, we have special categories (set in Form Fields), for things that are on the edge. For instance, the &lt;code&gt;morbid&lt;/code&gt; category is searchable as a #category, but recipes are excluded from search results using normal terms.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Form Fields&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Make sure the &lt;code&gt;author_bio&lt;/code&gt; offers at least one way that a user could get in-touch with the author and that appropriate &lt;a href=&quot;https://trmnl.com/api/categories&quot;&gt;categories&lt;/a&gt; are chosen.&lt;/li&gt;&lt;li&gt;Check that &lt;code&gt;default&lt;/code&gt; and &lt;code&gt;placeholder&lt;/code&gt; is being used appropriately and there are no erroneous fields like &lt;code&gt;optional: false&lt;/code&gt; (you only need to include it if it is true).&lt;/li&gt;&lt;li&gt;Update any plain-text links to use HTML &lt;code&gt;href&lt;/code&gt; links and include &lt;code&gt;&amp;lt;br/&amp;gt;&lt;/code&gt; when it was clear the author intended a line break.&lt;/li&gt;&lt;li&gt;Test each of the form fields to make sure the functionality offered is &lt;i&gt;&lt;em&gt;actually&lt;/em&gt;&lt;/i&gt; working. This involves making adjustments, saving, and looking within &lt;i&gt;&lt;em&gt;edit markup&lt;/em&gt;&lt;/i&gt; to see the changes.&lt;br&gt;This also includes making use of &lt;code&gt;&quot;key&quot;:&quot;value&quot;&lt;/code&gt; pairs for &lt;a href=&quot;https://help.trmnl.com/en/articles/10513740-custom-plugin-form-builder#h_b1004334c8&quot;&gt;options&lt;/a&gt; if it improves readability to the user and usability for the author. Also check that &lt;i&gt;&lt;em&gt;truthy&lt;/em&gt;&lt;/i&gt; values like &lt;i&gt;&lt;em&gt;yes, true, 1&lt;/em&gt;&lt;/i&gt; are evaluated properly in Liquid logic.&lt;/li&gt;&lt;li&gt;Validate no personal information will leak and that, if necessary, &lt;a href=&quot;https://help.trmnl.com/en/articles/12772238-demo-data-for-publishing-plugins&quot;&gt;demo data&lt;/a&gt; is used.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Plugin Strategy&lt;/h2&gt;&lt;h3&gt;Polling&lt;/h3&gt;&lt;p&gt;We use the &lt;i&gt;&lt;em&gt;parse&lt;/em&gt;&lt;/i&gt; feature to make sure the URL is processing logically and to understand if the endpoint is privately hosted or a public API. If public, but requiring authorization, that appropriate links and instructions are included in the Form Fields. Usually this isn&#39;t a source for problems, but more of an opportunity for improvement because Liquid logic is supported in this field.&lt;/p&gt;&lt;p&gt;We also will look to see if it is forcing &quot;fresh data&quot; by calling a URL that returns randomized data every time. If it&#39;s external, we recommend switching it to ours: &lt;code&gt;https://trmnl.com/custom_plugin_example_data.json&lt;/code&gt;.&lt;/p&gt;&lt;h3&gt;Webhook&lt;/h3&gt;&lt;p&gt;A webhook requires extra steps by the user that need to be outlined or linked to in the &lt;code&gt;author_bio&lt;/code&gt; section of the Form Fields. Most commonly this is to a Github project page which has a detailed ReadMe (which we&#39;ll review for clarity and may even try).&lt;/p&gt;&lt;h3&gt;Static&lt;/h3&gt;&lt;p&gt;&lt;i&gt;&lt;em&gt;Rarely requires review unless other issues require us taking a look.&lt;/em&gt;&lt;/i&gt;&lt;/p&gt;&lt;h3&gt;Plugin Merge&lt;/h3&gt;&lt;p&gt;Make use of the &lt;code&gt;plugin_instance_select&lt;/code&gt; &lt;a href=&quot;https://help.trmnl.com/en/articles/10513740-custom-plugin-form-builder?q=private+plug#h_27304a1639&quot;&gt;form field&lt;/a&gt; to help the user select the proper plugin easily and that instructions are included in &lt;code&gt;author_bio&lt;/code&gt;&#39;s description.&lt;/p&gt;&lt;h2&gt;Markup&lt;/h2&gt;&lt;p&gt;For maximum compatibility, we require recipes authors to prioritize using our design &lt;a href=&quot;https://trmnl.com/framework/docs/v3&quot;&gt;Framework&lt;/a&gt; and &lt;a href=&quot;https://help.trmnl.com/en/articles/10671186-liquid-101&quot;&gt;Liquid&lt;/a&gt; markup for logic first, only followed by CSS and Javascript when these reach their limit. Javascript-driven recipes can be unique and amazing when a recipe goes beyond text and images, so we don&#39;t want discourage that creativity.&lt;/p&gt;&lt;h3&gt;Red Flags&lt;/h3&gt;&lt;p&gt;These are items that will cause problems.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;async&lt;/code&gt; API calls. Renderer will not wait more than 5 seconds; consider using &lt;a href=&quot;https://help.trmnl.com/en/articles/14130649-serverless&quot;&gt;Serverless&lt;/a&gt; or your own hosted middleware. 99% of the time, any API calls should be in your POLLING URLs section (you can have multiple URLs, one on each line).&lt;/li&gt;&lt;li&gt;Charting without using a &lt;a href=&quot;https://help.trmnl.com/en/articles/10347358-custom-plugin-filters#h_df3a9ceb58&quot;&gt;unique class identifier&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Javascript that is waiting for page load rather than the event listener &lt;a href=&quot;https://help.trmnl.com/en/articles/10693981-advanced-liquid#h_b7065921f8&quot;&gt;DOMContentLoaded&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Using the inline CSS property &lt;code&gt;opacity&lt;/code&gt;, which gives a false sense of &quot;working&quot; in preview, but will not work well when rendered in 1-bit (black and white). Instead, use Framework classes like &lt;code&gt;text--black 2bit:text--gray-30 4bit:text--gray-20&lt;/code&gt; to target &lt;a href=&quot;https://help.trmnl.com/en/articles/12386214-grayscale-1-bit-2-bit-4-bit-in-framework&quot;&gt;grayscale&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Custom fonts. For certain aesthetics, fine, but 9 out of 10 times you should stick to the fonts we provide and use for different Framework elements automatically. This ensures great legibility at different sizes.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Layouts&lt;/h3&gt;&lt;p&gt;We preview every &lt;i&gt;&lt;em&gt;view&lt;/em&gt;&lt;/i&gt; (e.g. Full, Quadrant) across both TRMNL OG and TRMNL X in &lt;i&gt;&lt;em&gt;landscape&lt;/em&gt;&lt;/i&gt; mode, as well as TRMNL X in &lt;i&gt;&lt;em&gt;portrait&lt;/em&gt;&lt;/i&gt; mode, to verify the screen is &lt;b&gt;&lt;strong&gt;mostly content, not whitespace&lt;/strong&gt;&lt;/b&gt;. We also check if any data is getting cutoff horizontally or pushed off vertically unintentionally.&lt;/p&gt;&lt;p&gt;Most recipes that fail at larger sizes haven&#39;t taken into account our responsive classes (e.g. &lt;code&gt;lg:&lt;/code&gt;or &lt;code&gt;portrait:&lt;/code&gt;) as outlined in our &lt;a href=&quot;https://trmnl.com/framework/docs/v3/trmnl_x_guide&quot;&gt;TRMNL X Framework Guide&lt;/a&gt; or are not using Framework. Here are some of our favorite Framework tricks for great layouts.&lt;/p&gt;&lt;h4&gt;Content Overflow&lt;/h4&gt;&lt;p&gt;Make use of automatic length limiting with:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Variable level &lt;a href=&quot;https://shopify.github.io/liquid/filters/truncate/&quot;&gt;Liquid truncate&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Line level &lt;a href=&quot;https://trmnl.com/framework/docs/v3/clamp&quot;&gt;data clamping&lt;/a&gt;&lt;/li&gt;&lt;li&gt;View level &lt;a href=&quot;https://trmnl.com/framework/docs/v3/overflow&quot;&gt;overflow&lt;/a&gt;, including &lt;a href=&quot;https://trmnl.com/framework/docs/v3/table_overflow&quot;&gt;table overflow&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Charts&lt;/h4&gt;&lt;p&gt;Rather than using a fixed &lt;code&gt;height&lt;/code&gt; for your &lt;a href=&quot;https://trmnl.com/framework/docs/v3/chart&quot;&gt;chart&lt;/a&gt;, setting height to &lt;code&gt;null&lt;/code&gt; will let it fill its container, so you can control it using your other markup.&lt;/p&gt;&lt;h4&gt;Using Liquid Templates&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://docs.trmnl.com/go/reusing-markup&quot;&gt;Liquid templates&lt;/a&gt; offer a great way to re-use content. However, any data used in the template needs to be passed &lt;i&gt;&lt;em&gt;into&lt;/em&gt;&lt;/i&gt; the template. This means that the &lt;code&gt;trmnl&lt;/code&gt; native variables need to be passed in as well if you are using them in your template. For example: &lt;code&gt;{% render &quot;my_template&quot;, trmnl: {{ trmnl }} %}&lt;/code&gt;.&lt;/p&gt;&lt;h4&gt;Flexibly Rearranging Content&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Adjust the &lt;code&gt;layout&lt;/code&gt; or &lt;code&gt;flex&lt;/code&gt; direction in portrait mode. For instance, &lt;code&gt;flex flex--row portrait:flex--col&lt;/code&gt; can quickly reflow your content. You can even stack responsive classes &lt;code&gt;lg:portrait&lt;/code&gt; as noted in our &lt;a href=&quot;https://trmnl.com/framework/docs/v3/responsive#available-combinations&quot;&gt;docs&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Using &lt;code&gt;grid&lt;/code&gt; and the &lt;code&gt;grid--cols-#&lt;/code&gt; feature to reflow content. Here is an example:&lt;/li&gt;&lt;/ul&gt;&lt;pre data-language=&quot;html&quot;&gt;&amp;lt;div class=&quot;layout&quot;&amp;gt;&lt;br&gt;  &amp;lt;div class=&quot;grid grid--cols-3&quot;&amp;gt;&lt;br&gt;    &amp;lt;span class=&quot;value value--small lg:value--base&quot;&amp;gt;Column One&amp;lt;/span&amp;gt;&lt;br&gt;    &amp;lt;span class=&quot;value value--small lg:value--base&quot;&amp;gt;Column One&amp;lt;/span&amp;gt;&lt;br&gt;    &amp;lt;span class=&quot;value value--small lg:value--base&quot;&amp;gt;Column One&amp;lt;/span&amp;gt;&lt;br&gt;  &amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;Landscape mode looks fine.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwNjEwNDc_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--0f7017522623058c5e50f1dbdd4a44cb39ad6da5&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDcsInB1ciI6ImJsb2JfaWQifX0=--b161ff533f05cf4bf2bb055645504a2e87dc4152/image.png&quot; filename=&quot;image.png&quot; filesize=&quot;7467&quot; width=&quot;399&quot; height=&quot;234&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDcsInB1ciI6ImJsb2JfaWQifX0=--b161ff533f05cf4bf2bb055645504a2e87dc4152/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/image.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;Switch to portrait and we have collisions.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwNjEwNDU_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--bed1b0d3cdf51a0ff993ffe8ef6420967bb7c5a2&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDUsInB1ciI6ImJsb2JfaWQifX0=--323985e5cfe371f89d3ac80fdccd1064a28104cc/image.png&quot; filename=&quot;image.png&quot; filesize=&quot;8163&quot; width=&quot;233&quot; height=&quot;395&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDUsInB1ciI6ImJsb2JfaWQifX0=--323985e5cfe371f89d3ac80fdccd1064a28104cc/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/image.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;A quick fix could be to shrink the text in portrait mode using &lt;code&gt;portrait:value--xxsmall&lt;/code&gt;, but that increases the whitespace dramatically.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwNjEwNDY_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--396acfb51cab4f7b1bd5f93ccd6146bc8ce81fc3&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDYsInB1ciI6ImJsb2JfaWQifX0=--286fb25c1b04ae5e87cf744151d56374f88e862c/image.png&quot; filename=&quot;image.png&quot; filesize=&quot;4386&quot; width=&quot;235&quot; height=&quot;394&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDYsInB1ciI6ImJsb2JfaWQifX0=--286fb25c1b04ae5e87cf744151d56374f88e862c/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/image.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;But instead by using &lt;code&gt;portrait:grid--cols-2&lt;/code&gt; we get to actually increase the size and reduce the whitespace.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwNjEwNDI_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--a0aa2b7b32426108a5720801aa1082870c476a67&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDIsInB1ciI6ImJsb2JfaWQifX0=--24b1faecc691e760e2af9d7d96825f593e60e930/image.png&quot; filename=&quot;image.png&quot; filesize=&quot;12395&quot; width=&quot;241&quot; height=&quot;402&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwNjEwNDIsInB1ciI6ImJsb2JfaWQifX0=--24b1faecc691e760e2af9d7d96825f593e60e930/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/image.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;pre data-language=&quot;html&quot;&gt;&amp;lt;div class=&quot;layout&quot;&amp;gt;&lt;br&gt;  &amp;lt;div class=&quot;grid grid--cols-3 portrait:grid--cols-2&quot;&amp;gt;&lt;br&gt;    &amp;lt;span class=&quot;value value--small lg:value--base&quot;&amp;gt;Column One&amp;lt;/span&amp;gt;&lt;br&gt;    &amp;lt;span class=&quot;value value--small lg:value--base&quot;&amp;gt;Column Two&amp;lt;/span&amp;gt;&lt;br&gt;    &amp;lt;span class=&quot;value value--small portrait:col--span-2 portrait:value--large lg:value--base&quot;&amp;gt;Column Three&amp;lt;/span&amp;gt;&lt;br&gt;  &amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;h2&gt;The Little Things&lt;/h2&gt;&lt;p&gt;We don&#39;t always notice these, and mostly they are nice-to-haves and not required for publishing.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If you use a &lt;code&gt;title_bar&lt;/code&gt;, don&#39;t use the default TRMNL logo that is in our example docs, but instead use an image appropriate for the data source. Be careful with emoji, they often don&#39;t render as expected.&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;em&gt;Using a static image inserted via a &lt;/em&gt;&lt;/i&gt;&lt;i&gt;&lt;code&gt;&lt;em&gt;src&lt;/em&gt;&lt;/code&gt;&lt;/i&gt;&lt;i&gt;&lt;em&gt; URL?&lt;/em&gt;&lt;/i&gt; If you want to make sure that it always renders, you can encode it within the page rather than calling an external URL. Use our guide to &lt;a href=&quot;https://help.trmnl.com/en/articles/12391781-creating-inline-images-for-plugins&quot;&gt;inline images&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Keep things &lt;b&gt;&lt;strong&gt;DRY&lt;/strong&gt;&lt;/b&gt; [Don&#39;t Repeat Yourself]. The &lt;a href=&quot;https://help.trmnl.com/en/articles/13216853-reusing-markup-with-shared&quot;&gt;&lt;i&gt;&lt;em&gt;Shared&lt;/em&gt;&lt;/i&gt; view&lt;/a&gt; is a great way to accomplish this.&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/plugin-recipe-publishing-tips</id>
    <link href="https://trmnl.com/blog/plugin-recipe-publishing-tips"/>
    <published>2026-04-27T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>A Checklist for Turning a Private Plugin into a Recipe for Others</title>
    <updated>2026-04-27T00:00:00+00:00</updated>
    <dc:date>2026-04-27T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Mario Lurig</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;blockquote&gt;This post is part of a series, featuring the incredible work of plugin authors who grow the TRMNL plugin ecosystem with every contribution. The TRMNL team has individually selected these plugins and authors to be featured.&lt;/blockquote&gt;&lt;h2&gt;&lt;a href=&quot;https://trmnl.com/recipes/250879&quot;&gt;Today: Beautiful Date &amp;amp; Countdown&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Community member med created the &lt;a href=&quot;https://trmnl.com/recipes/250879&quot;&gt;Today: Beautiful Date &amp;amp; Countdown&lt;/a&gt; plugin; here are their words on how it was created.&lt;/p&gt;&lt;h3&gt;Why did you want this plugin to exist?&lt;/h3&gt;&lt;p&gt;installing a date plugin on a TRMNL is almost a rite of passage. it’s one of the first things people reach for when they set up the device. if you’re going to look at something every single day, it makes sense today&#39;s date should be there. on a more personal level, i build because i&#39;m obsessed with UX. i can’t not refine things. so taking one of the most common, simplest plugins possible and rethinking it through a design-first lens felt great :) a date is a tiny problem, but it’s also a perfect opportunity for my obsession to bring value to the people.&lt;/p&gt;&lt;h3&gt;Why were you the person to make it?&lt;/h3&gt;&lt;p&gt;you have my obsession to thank (or blame) for that.i can&#39;t look at something every day and not want to have it just &lt;i&gt;&lt;em&gt;perfect&lt;/em&gt;&lt;/i&gt;, especially when it&#39;s simple. simplest things are the most dangerous sometimes; they&#39;re very easy to accept as good enough.&lt;/p&gt;&lt;h3&gt;&lt;mark style=&quot;color:rgb(67, 67, 67);&quot;&gt;Were you inspired by any other recipes or plugin creators?&lt;/mark&gt;&lt;/h3&gt;&lt;p&gt;since this was my first plugin, i spent a lot of time looking at what was already out there. there are some really solid recipes and a lot of creative approaches. i didn’t want to reinvent the wheel, i just wanted to reinterpret it through my own design lens.after building it, i joined the discord and was honestly impressed by the level of talent and experimentation happening in the community. great job guys.&lt;/p&gt;&lt;h3&gt;What was your process for creating the plugin?&lt;/h3&gt;&lt;p&gt;my process for most things creative is to sit down and figure out in an extensive way what problem(s) am i trying to solve and what would be the ideal solution. real life then comes into play and you try to keep and minimize the delta between the ideal scenario and the actual implementation to a minimum. in this example, a big notion for me was context. more than seeing the date, i wanted to get a deeper level of understanding of the context with just one glance.&lt;/p&gt;&lt;h3&gt;What, if any, challenges did you face while creating it?&lt;/h3&gt;&lt;p&gt;it was honestly pretty straightforward thanks to the awesome &lt;a href=&quot;https://github.com/usetrmnl/trmnlp&quot;&gt;trmnlp&lt;/a&gt; tool. having live preview during development and being able to quickly switch between device sizes and settings removed almost all the friction from the process.when you have a clear idea of what you’re trying to build, having tooling that stays out of the way makes all the difference. it made the whole experience super pleasant from start to finish.&lt;/p&gt;&lt;h3&gt;Did you learn anything you want to apply to future recipes?&lt;/h3&gt;&lt;p&gt;the most important thing i&#39;ve taken from this plugin is the dark mode dotted-matrix aesthetic that i’ve already started incorporating into my other plugins. i now have a daily unix tip, weather glance, and a world map “been there” dashboard; all matching this same visual language. i think it fits the trmnl purpose incredibly well. the high contrast works beautifully on e-ink, the dotted grid feels native to the device, and the whole control-panel vibe matches the audience using it. it’s glanceable, structured, and low noise.and yes… i am absolutely crazed about it right now :)&lt;/p&gt;&lt;h3&gt;What is your favorite plugin that someone else created and why?&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://trmnl.com/recipes/152705&quot;&gt;paperboy&lt;/a&gt; is the prime example of a &lt;i&gt;&lt;em&gt;perfect&lt;/em&gt;&lt;/i&gt; plugin for me. super cool idea, extremely clear signal, zero fluff. it does one thing and does it properly. big props to the author. the design probably looks effortless now, but i’m sure it took serious iteration to get to that level of clarity.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/featured-plugin-today-beautiful-date-countdown</id>
    <link href="https://trmnl.com/blog/featured-plugin-today-beautiful-date-countdown"/>
    <published>2026-04-21T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Featured Community Plugin - Today: Beautiful Date &amp; Countdown</title>
    <updated>2026-04-21T00:00:00+00:00</updated>
    <dc:date>2026-04-21T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Mario Lurig</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;p&gt;Creating a plugin is an exciting way to use our &lt;a href=&quot;https://help.trmnl.com/en/articles/12410549-developer-edition-features&quot;&gt;Developer Edition&lt;/a&gt; license to bring your low-distraction dashboard to life with the content you want to see. Let&#39;s cover a few ways to get started; pick the one that fits you best.&lt;/p&gt;&lt;h2&gt;The Copycat&lt;/h2&gt;&lt;p&gt;You see a great idea, you aim to take it. Great! The spirit of TRMNL&#39;s open source core is to share our value with others, building a community on a foundation of generosity. Hundreds of authors have crafted a plugin, honed it, and published it as a &lt;i&gt;&lt;em&gt;recipe&lt;/em&gt;&lt;/i&gt; for others to &lt;b&gt;&lt;strong&gt;install&lt;/strong&gt;&lt;/b&gt; or &lt;b&gt;&lt;strong&gt;fork&lt;/strong&gt;&lt;/b&gt;. Here&#39;s a quick way to understand the difference:&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMzU5MDM_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--01f584d882007c05c41710676840d48e6d3b5ed5&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMzU5MDMsInB1ciI6ImJsb2JfaWQifX0=--70ad55ccb5d0fe8fc0ee187dd93e4b47f58779fd/image.png&quot; filename=&quot;image.png&quot; filesize=&quot;2101&quot; width=&quot;300&quot; height=&quot;69&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Preview, Install, or Fork Buttons&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMzU5MDMsInB1ciI6ImJsb2JfaWQifX0=--70ad55ccb5d0fe8fc0ee187dd93e4b47f58779fd/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/image.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Preview, Install, or Fork Buttons
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Install:&lt;/strong&gt;&lt;/b&gt; Use the plugin in your account, with customizations designed by the author, and maintain a link between your copy and the original recipe, so that any updates made to the original &lt;i&gt;&lt;em&gt;recipe&lt;/em&gt;&lt;/i&gt; will automatically be applied to your installation. This is similar to how apps in a mobile app store function.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Fork:&lt;/strong&gt;&lt;/b&gt; Make a copy of the plugin, but with the ability&lt;i&gt;&lt;em&gt; to see exactly how it was made and have the ability to &lt;/em&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;&lt;strong&gt;change anything&lt;/strong&gt;&lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;em&gt;, including the markup code that lays out the look and functionality of the plugin.&lt;/em&gt;&lt;/i&gt; The link to the original recipe is severed. &lt;b&gt;&lt;strong&gt;This is the copycat way.&lt;/strong&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And don&#39;t think you need to copy a plugin with similar content. You may just love the way the content is laid out and can imagine &lt;i&gt;&lt;em&gt;your data&lt;/em&gt;&lt;/i&gt; in that same format. Don&#39;t like it after forking? Click &lt;i&gt;&lt;em&gt;Remove Plugin&lt;/em&gt;&lt;/i&gt; and go hunt down another one. Of course, if you&#39;d rather get a robot to help you...&lt;/p&gt;&lt;h2&gt;The AI Builder&lt;/h2&gt;&lt;p&gt;Oh, you thought you could escape AI&#39;s ever-presence in the conversation?&lt;/p&gt;&lt;p&gt;Actually, you can, just scroll-down to the next section.&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;em&gt;But&lt;/em&gt;&lt;/i&gt;... if you are intrigued, then let me introduce to our &lt;a href=&quot;https://help.trmnl.com/en/articles/14130438-ai-agent&quot;&gt;AI Builder&lt;/a&gt;, a collection of tools, prompts, and a dusting of hubris that takes a one-sentence request and $1 or two and turns it into a plugin that makes you go, &quot;wow.&quot;&lt;/p&gt;&lt;p&gt;As mentioned in our &lt;a href=&quot;https://help.trmnl.com/en/articles/14130438-ai-agent&quot;&gt;helpful AI agent guide&lt;/a&gt;, once you opt-in to using the tool and get your API key assigned (so OpenRouter can track your usage and charge you), you can start creating a brand new private plugin, &lt;i&gt;&lt;em&gt;save&lt;/em&gt;&lt;/i&gt; your settings (e.g. name of the plugin), then head into &lt;i&gt;&lt;em&gt;edit markup&lt;/em&gt;&lt;/i&gt;. Once there, the shiny new &lt;b&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/b&gt; tab will be available.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMzY0NzY_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--f07ec35d4e5ada68d08d4f6258d5c86179f482ca&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMzY0NzYsInB1ciI6ImJsb2JfaWQifX0=--a7f1453dba153e51774e30f4de6c4e7225a91bc9/image.png&quot; filename=&quot;image.png&quot; filesize=&quot;7687&quot; width=&quot;911&quot; height=&quot;71&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Edit Markup header with Agent highlighted&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMzY0NzYsInB1ciI6ImJsb2JfaWQifX0=--a7f1453dba153e51774e30f4de6c4e7225a91bc9/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/image.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Edit Markup header with Agent highlighted
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;Now, while it is ever evolving, it really shines in its ability to give you a great first draft of a plugin, even if you don&#39;t know where your data is coming from or exactly what you want it to look like. Just remember, there&#39;s a reason we recommend Claude&#39;s AI models; less expensive models can do an good job with additional guidance, but you&#39;re building your &lt;b&gt;&lt;strong&gt;first plugin&lt;/strong&gt;&lt;/b&gt;, so may be worth leaning on the model to do a lot of the heavy lifting.&lt;/p&gt;&lt;p&gt;If you prefer to keep the human completely in the loop, have you considered some light reading?&lt;/p&gt;&lt;h2&gt;The Bookworm&lt;/h2&gt;&lt;p&gt;You want some documentation. Pages of clear guidance and examples, because &lt;b&gt;&lt;strong&gt;you need to understand it&lt;/strong&gt;&lt;/b&gt;, and you know you&#39;re on the looooooong road to being a multi-recipe publishing, thought-leadin&#39;, creator fund earning &lt;a href=&quot;https://trmnl.com/experts&quot;&gt;TRMNL Expert&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We built our &lt;a href=&quot;https://trmnl.com/framework&quot;&gt;&lt;b&gt;&lt;strong&gt;Framework&lt;/strong&gt;&lt;/b&gt;&lt;/a&gt; with two core intentions: Create a design language for reliable and innovative rendering on an ePaper display, and give any developer, even the lapsed ones, &lt;i&gt;&lt;em&gt;superpowers.&lt;/em&gt;&lt;/i&gt; Like &lt;code&gt;mobile-first&lt;/code&gt; design lead frontend developers through the mobile/desktop swap, our &lt;code&gt;framework-first&lt;/code&gt; ethos can be interpreted as, &quot;Design with Framework and Liquid first, then fallback to custom CSS and Javascript if you reach a limitation.&quot;&lt;/p&gt;&lt;p&gt;So dive into the &lt;a href=&quot;https://trmnl.com/framework/docs/v3&quot;&gt;docs&lt;/a&gt; or the &lt;a href=&quot;https://trmnl.com/framework/examples?version=v3&quot;&gt;examples&lt;/a&gt;, consume it all, and get building! Remenber that we also use Liquid and even have &lt;a href=&quot;https://help.trmnl.com/en/articles/10347358-custom-plugin-filters&quot;&gt;custom filters&lt;/a&gt; available.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Framework &lt;/strong&gt;&lt;/b&gt;&lt;a href=&quot;https://trmnl.com/framework/docs/v2/v2_overview&quot;&gt;&lt;b&gt;&lt;strong&gt;v2&lt;/strong&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;strong&gt;: &lt;/strong&gt;&lt;/b&gt;Added responsive classes for larger displays and higher bit depths (more grays), redesigned our built-in javascript functionality for clamping, and expanded size variations across elements and components.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;strong&gt;Framework &lt;/strong&gt;&lt;/b&gt;&lt;a href=&quot;https://trmnl.com/framework/docs/v3/v3_overview&quot;&gt;&lt;b&gt;&lt;strong&gt;v3&lt;/strong&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/b&gt; Added color through variants, hues, and new utilities, supporting colors beyond black and white.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Of course, maybe you would rather have your docs in more of a just-in-time fashion...&lt;/p&gt;&lt;h2&gt;The Maker&lt;/h2&gt;&lt;p&gt;You just need a &lt;i&gt;&lt;em&gt;process&lt;/em&gt;&lt;/i&gt; to get started, and a reference point for how to do the specific thing you want to do right now. You want to get started.&lt;/p&gt;&lt;p&gt;So you jump on our &lt;a href=&quot;https://help.trmnl.com/en/articles/9510536-private-plugins&quot;&gt;private plugins&lt;/a&gt; tutorial, you load the Framework docs in another tab, and you find an open API you can query without any authentication and get to work understanding by doing. Here&#39;s a simple set of guidelines to help you get comfortable:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Set your plugin to &lt;b&gt;&lt;strong&gt;polling&lt;/strong&gt;&lt;/b&gt;, save, then &lt;i&gt;&lt;em&gt;force refresh&lt;/em&gt;&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;After a few seconds, click &lt;i&gt;&lt;em&gt;edit markup&lt;/em&gt;&lt;/i&gt; and scroll down to make sure data is populating in &lt;b&gt;&lt;strong&gt;My Variables&lt;/strong&gt;&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Build in the FULL view; the other views will be derivative of the full view so it&#39;s a great place to lock-in before you start migrating. This includes sticking all your Liquid logic (&lt;a href=&quot;https://help.trmnl.com/en/articles/10671186-liquid-101&quot;&gt;tutorial&lt;/a&gt; and &lt;a href=&quot;https://help.trmnl.com/en/articles/10693981-advanced-liquid&quot;&gt;advanced tutorial&lt;/a&gt;) in the FULL view, for now. In the future, to keep the code &lt;a href=&quot;https://trmnl.com/blog/private-plugin-shared-markup&quot;&gt;DRY&lt;/a&gt; [Don&#39;t Repeat Yourself], you can move the logic to the Shared tab. &lt;i&gt;&lt;b&gt;&lt;strong&gt;All views process Shared content prior to their own&lt;/strong&gt;&lt;/b&gt;&lt;/i&gt;&lt;b&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Start with a basic template:&lt;/li&gt;&lt;/ul&gt;&lt;pre data-language=&quot;html&quot;&gt;&amp;lt;div class=&quot;layout&quot;&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;div class=&quot;column&quot;&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;!-- Show some data here --&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;/div&amp;gt;&lt;br&gt;&amp;lt;div class=&quot;title_bar&quot;&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;img class=&quot;image&quot; src=&quot;/images/plugins/trmnl--render.svg&quot;&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;span class=&quot;title&quot;&amp;gt;Title Bar with Instance&amp;lt;/span&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;span class=&quot;instance&quot;&amp;gt;Production&amp;lt;/span&amp;gt;&lt;br&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;If the data source is an array of objects, then make a quick iteration:&lt;/li&gt;&lt;/ul&gt;&lt;pre data-language=&quot;js&quot;&gt;{% for thing in yourVariableName %}&lt;br&gt;&amp;nbsp; {{ thing.id }}&lt;br&gt;{% endfor %}&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Look over the data provided from your API and take notes about features you need to include, such as &lt;a href=&quot;https://help.trmnl.com/en/articles/10513740-custom-plugin-form-builder&quot;&gt;Form Field&lt;/a&gt; customization (&lt;a href=&quot;https://usetrmnl.github.io/trmnl-form-builder/&quot;&gt;visual editor&lt;/a&gt;), highlighting data, and &lt;a href=&quot;https://help.trmnl.com/en/articles/10693981-advanced-liquid?q=liquid#h_9e85ea209b&quot;&gt;date transformations&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Make some early layout decisions for the data. Will it be a grid, a list of items, columns (smart columns?), flex... (&lt;a href=&quot;https://trmnl.com/framework/docs/v3/layout&quot;&gt;Framework docs&lt;/a&gt;). &lt;b&gt;&lt;strong&gt;This can change later&lt;/strong&gt;&lt;/b&gt;, and the easiest way to know it should change is to &lt;i&gt;&lt;b&gt;&lt;strong&gt;build something and hate it&lt;/strong&gt;&lt;/b&gt;&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You&#39;re building in small pieces, then likely tearing away large chunks. You don&#39;t care, because you are &lt;b&gt;&lt;strong&gt;learning&lt;/strong&gt;&lt;/b&gt; and &lt;b&gt;&lt;strong&gt;having fun&lt;/strong&gt;&lt;/b&gt;.&lt;/p&gt;&lt;h2&gt;The Designer&lt;/h2&gt;&lt;p&gt;You&#39;ve lived your life in layers, built elements through drag and drop, and you want that same experience within TRMNL. You want a &lt;a href=&quot;https://help.trmnl.com/en/articles/14726819-visual-editor-ide&quot;&gt;Visual Editor&lt;/a&gt;.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcxOTMwMjY_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--c9879afd68e30ce6f73b412aece8ea64177f238a&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTMwMjYsInB1ciI6ImJsb2JfaWQifX0=--791ac12d5aea8b5172df022ba468064744885a5b/TRMNL-visual-editor.png&quot; filename=&quot;TRMNL-visual-editor.png&quot; filesize=&quot;378017&quot; width=&quot;1898&quot; height=&quot;1069&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcxOTMwMjYsInB1ciI6ImJsb2JfaWQifX0=--791ac12d5aea8b5172df022ba468064744885a5b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/TRMNL-visual-editor.png&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;Released in beta in April 2026, our visual editor offers a way to build new plugins or modify existing plugins (hello &lt;i&gt;&lt;em&gt;Copycat&lt;/em&gt;&lt;/i&gt;) with a design driven view, rather than a programmatic view, while both are available. Using the editor is optional, and the &lt;i&gt;&lt;em&gt;Designer&lt;/em&gt;&lt;/i&gt; can easily switch back and forth depending on their needs. &lt;/p&gt;&lt;h2&gt;Final Thoughts&lt;/h2&gt;&lt;p&gt;There is no wrong way to make a plugin...&lt;i&gt;&lt;em&gt; except to use custom css to lay everything out like you&#39;re working on your first website in 1998.&lt;/em&gt;&lt;/i&gt; Ignoring this advice is possible, but will lead to frustrations later. The learning curve is not steep nor is it high, but ignoring it is ignoring an &lt;b&gt;&lt;strong&gt;opportunity to learn&lt;/strong&gt;&lt;/b&gt;, which should never be squandered.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/making-great-plugin-first-time</id>
    <link href="https://trmnl.com/blog/making-great-plugin-first-time"/>
    <published>2026-04-20T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Making a Great Plugin the First Time</title>
    <updated>2026-04-20T00:00:00+00:00</updated>
    <dc:date>2026-04-20T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Ryan Kulp</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;p&gt;businesses want portals, consumers prefer apps. it took us a couple years but today i&#39;m proud to announce our new iOS app, TRMNL Companion, built by team member Liz.&lt;/p&gt;&lt;p&gt;Companion is not a mobile version of the web interface, it&#39;s a tool belt for Apple power users.&lt;/p&gt;&lt;h3&gt;get the app&lt;/h3&gt;&lt;p&gt;download Companion on your iPhone or iPad:&lt;br&gt;&lt;a href=&quot;https://apps.apple.com/us/app/trmnl-companion/id6752111280&quot;&gt;https://apps.apple.com/us/app/trmnl-companion/id6752111280&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;what Companion does&lt;/h3&gt;&lt;p&gt;Companion offers a new way to build plugins, tapping into data sources that were previously inaccessible.&lt;/p&gt;&lt;p&gt;let&#39;s start with a few quick wins: Calendars, Apple Health, Apple Home, and Reminders.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;Calendars&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;combine calendars without sharing permissions or ICS links. Companion lets you merge unlimited calendars natively through EventKit.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMTcyMzA_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--8896a0caa6f837a9dd2beef508a5dcc2400aa7d3&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTcyMzAsInB1ciI6ImJsb2JfaWQifX0=--d7da7ab0238a734c53e2971ebee806b35269f0ea/trmnl-companion-calendar-sync.jpg&quot; filename=&quot;trmnl-companion-calendar-sync.jpg&quot; filesize=&quot;59799&quot; width=&quot;792&quot; height=&quot;768&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Calendar Sync&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTcyMzAsInB1ciI6ImJsb2JfaWQifX0=--d7da7ab0238a734c53e2971ebee806b35269f0ea/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--d5e667c0137ab726f37f5f3b8ccaf980246e425b/trmnl-companion-calendar-sync.jpg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Calendar Sync
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;Apple data&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;want to build custom plugins with activity from Apple Health, sensors from Apple Home, or tasks from Apple Reminders? just create a private plugin (&quot;Webhook&quot; strategy), then point to it inside Companion.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMTQ0OTg_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--53e1b0155bbffc36201613e68d149e8eafb1136b&quot; content-type=&quot;image/png&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTQ0OTgsInB1ciI6ImJsb2JfaWQifX0=--79c1c25a3c7f71eef50069fd9a55e76c3e55aa11/trmnl-companion-apple-data-sync.png&quot; filename=&quot;trmnl-companion-apple-data-sync.png&quot; filesize=&quot;166832&quot; width=&quot;1200&quot; height=&quot;833&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Apple Data Sync&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--png&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTQ0OTgsInB1ciI6ImJsb2JfaWQifX0=--79c1c25a3c7f71eef50069fd9a55e76c3e55aa11/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--a1b29f018116e3f4abd0440beb02228a54f47dd1/trmnl-companion-apple-data-sync.png&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Apple Data Sync
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;TRMNL will automatically push data to the plugin editor where you can design beautiful markup with &lt;a href=&quot;https://trmnl.com/framework&quot;&gt;Framework&lt;/a&gt; for a secure, private, personalized Apple dashboard.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;Shortcuts&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;with a simple drag and drop interface inside any Apple product (phone, laptop, iPad) you may now access previously walled garden data from other apps (native or 3rd party) and use it in TRMNL plugins.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMTQ1NDU_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--2957f0c617bd8d37e11ae58a39519f988a4bc600&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTQ1NDUsInB1ciI6ImJsb2JfaWQifX0=--ee500c3b136a51c6c8dbf3ee12b1e50f31666d57/IMG_6658.jpg&quot; filename=&quot;IMG_6658.jpg&quot; filesize=&quot;143925&quot; width=&quot;1170&quot; height=&quot;1167&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;TRMNL Shortcut&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTQ1NDUsInB1ciI6ImJsb2JfaWQifX0=--ee500c3b136a51c6c8dbf3ee12b1e50f31666d57/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGciLCJyZXNpemVfdG9fbGltaXQiOlsxMDI0LDc2OF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--d5e667c0137ab726f37f5f3b8ccaf980246e425b/IMG_6658.jpg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        TRMNL Shortcut
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;create a Shortcut, add whatever triggers or data sources you want, then use &quot;Send Data to Plugin&quot; to bring it to life on your ePaper display.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMTcyMTk_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--5a5b62a80566cba56e630b86f9d490f029387aac&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTcyMTksInB1ciI6ImJsb2JfaWQifX0=--4676fa6c66c1ae307d87443c3cf262602144573f/trmnl-companion-shortcut-send-data-example.jpeg&quot; filename=&quot;trmnl-companion-shortcut-send-data-example.jpeg&quot; filesize=&quot;44433&quot; width=&quot;640&quot; height=&quot;614&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTcyMTksInB1ciI6ImJsb2JfaWQifX0=--4676fa6c66c1ae307d87443c3cf262602144573f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/trmnl-companion-shortcut-send-data-example.jpeg&quot;&gt;

&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;for even more control, set up a Shortcut Automation to expand the triggers which cause new data to be sent to TRMNL.&lt;/p&gt;&lt;action-text-attachment sgid=&quot;eyJfcmFpbHMiOnsiZGF0YSI6ImdpZDovL3RybW5sL0FjdGl2ZVN0b3JhZ2U6OkJsb2IvMTcwMTcyMTU_ZXhwaXJlc19pbiIsInB1ciI6ImF0dGFjaGFibGUifX0=--c9586b985a8061113622c94d3252cc2c72eef6f7&quot; content-type=&quot;image/jpeg&quot; url=&quot;https://trmnl.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTcyMTUsInB1ciI6ImJsb2JfaWQifX0=--46165f31694c356184d7b06c4b3b78553e215910/trmnl-note-board-recipe.jpeg&quot; filename=&quot;trmnl-note-board-recipe.jpeg&quot; filesize=&quot;49273&quot; width=&quot;640&quot; height=&quot;436&quot; previewable=&quot;true&quot; presentation=&quot;gallery&quot; caption=&quot;Note Board by Mark Hopper&quot;&gt;&lt;figure class=&quot;attachment attachment--preview attachment--jpeg&quot;&gt;
    &lt;img src=&quot;https://trmnl.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTcwMTcyMTUsInB1ciI6ImJsb2JfaWQifX0=--46165f31694c356184d7b06c4b3b78553e215910/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJqcGVnIiwicmVzaXplX3RvX2xpbWl0IjpbMTAyNCw3NjhdfSwicHVyIjoidmFyaWF0aW9uIn19--b5fc5af83c336b0fe3eb199eed01a2c85b3a702d/trmnl-note-board-recipe.jpeg&quot;&gt;

    &lt;figcaption class=&quot;attachment__caption&quot;&gt;
        Note Board by Mark Hopper
    &lt;/figcaption&gt;
&lt;/figure&gt;&lt;/action-text-attachment&gt;&lt;p&gt;get started quickly with Mark Hopper&#39;s &lt;a href=&quot;https://trmnl.com/recipes/96659&quot;&gt;Note Board&lt;/a&gt; Recipe.&lt;/p&gt;&lt;h3&gt;what Companion does not do (yet)&lt;/h3&gt;&lt;p&gt;Companion does not let you manage Playlists, update your Account, or change Device settings. there is no dashboard or ability to browse community Recipes.&lt;/p&gt;&lt;p&gt;this may be possible in the future, but for now we&#39;re focused on what we do best: turning disparate data into dashboards that are calm, aesthetic, and useful.&lt;/p&gt;&lt;p&gt;read &lt;a href=&quot;https://help.trmnl.com/en/articles/12294875-trmnl-companion-for-ios&quot;&gt;the help guide&lt;/a&gt; for more details about each feature.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/companion-ios-app</id>
    <link href="https://trmnl.com/blog/companion-ios-app"/>
    <published>2026-04-13T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Introducing Companion for iOS</title>
    <updated>2026-04-13T00:00:00+00:00</updated>
    <dc:date>2026-04-13T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Mario Lurig</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;blockquote&gt;This post is part of a series, featuring the incredible work of plugin authors who grow the TRMNL plugin ecosystem with every contribution. The TRMNL team has individually selected these plugins and authors to be featured.&lt;/blockquote&gt;&lt;h2&gt;&lt;a href=&quot;https://trmnl.com/recipes/241645&quot;&gt;Trending Recipes&lt;/a&gt; Plugin&lt;/h2&gt;&lt;p&gt;Community member ExcuseMe&lt;mark style=&quot;color:rgb(67, 67, 67);&quot;&gt; (Discord: &lt;/mark&gt;&lt;code&gt;ExcuseMe&lt;/code&gt;) created the &lt;a href=&quot;https://trmnl.com/recipes/241645&quot;&gt;Trending Recipes&lt;/a&gt; plugin; here are their words on how it was created.&lt;/p&gt;&lt;h3&gt;Why did you want this plugin to exist?&lt;/h3&gt;&lt;p&gt;As someone who has published a couple of recipes, I found myself checking installs and forks more than once a day whenever I&#39;d put something new out there. &lt;b&gt;&lt;strong&gt;It&#39;s always exciting to see whether your idea, and your execution of it, resonates enough to earn a spot on someone&#39;s screen. &lt;/strong&gt;&lt;/b&gt;But there was no easy way to see that momentum at a glance: which recipes are gaining traction right now, and how does mine compare? I wanted that feedback loop right on my TRMNL, not buried in a browser tab.&lt;/p&gt;&lt;h3&gt;Why were you the person to make it?&lt;/h3&gt;&lt;p&gt;I already had experience building a simple backend with a database for TRMNL recipes, and this plugin couldn&#39;t exist without one since it needs to take hourly snapshots to calculate deltas over time. But more than the technical side, I think it came down to scratching my own itch. I wanted a better way to track how my published recipes are doing while also keeping an eye on what the rest of the community is building. Once I realized nobody else was surfacing that kind of trending data, it felt like the obvious next thing to build.&lt;/p&gt;&lt;h3&gt;&lt;mark style=&quot;color:rgb(67, 67, 67);&quot;&gt;How did you balance look vs functionality?&lt;/mark&gt;&lt;/h3&gt;&lt;p&gt;At the start, the data was clear: mainly the current connections and how they changed over the last x hours or days. It became harder to balance once the plugin started extracting statistics that weren&#39;t available before, like trending ranks, overall connection rankings, and user-level stats. Had this been just a private recipe, more numbers would have made it onto the screen because their meaning was obvious to me. But you can&#39;t expect that from a regular user. You also can&#39;t explain every number with just a little icon in front of it, and even if you could, that would look messy in a repeating section.&lt;/p&gt;&lt;h3&gt;What was your process for creating the plugin?&lt;/h3&gt;&lt;p&gt;It started with a small Python server in a Docker container that fetches all the public recipe data on a regular schedule, plus an endpoint to serve that data to a TRMNL recipe. AI is especially useful for these early steps to get a minimal viable product going, since the goal is to find out as soon as possible whether a recipe idea is even worth the time. From there, I build a simple version of the recipe using TRMNL&#39;s framework styling, just displaying the rough data to get a feel for whether it&#39;s on the right track. This one borrows from my &lt;a href=&quot;https://trmnl.com/recipes/189338&quot;&gt;Network Devices&lt;/a&gt; recipe: Columns with the overflow functionality to fill any screen with items, leaving little unused space; especially great when larger screen devices. After that it&#39;s refining. Add something, refine again; until you&#39;re happy enough to publish.&lt;/p&gt;&lt;h3&gt;Did you learn anything that you want to apply to other recipes you create(d)?&lt;/h3&gt;&lt;p&gt;One thing worth sharing is an SVG filter I picked up from &lt;code&gt;L #1385&lt;/code&gt;, something I didn&#39;t even know was possible. Recipe icons are user-uploaded and can be full-color, which can render as muddy gray on a 1-bit or 2-bit screen. This hidden SVG filter converts colors to grayscale and snaps them to discrete levels, keeping icons crisp on e-ink:&lt;/p&gt;&lt;pre data-language=&quot;html&quot;&gt;&amp;lt;svg width=&quot;0&quot; height=&quot;0&quot; style=&quot;position: absolute&quot;&amp;gt;&lt;br&gt;    &amp;lt;defs&amp;gt;&lt;br&gt;        &amp;lt;filter id=&quot;binarize&quot;&amp;gt;&lt;br&gt;            &amp;lt;feColorMatrix&lt;br&gt;                type=&quot;matrix&quot;&lt;br&gt;                values=&quot;0.0722 0.7152 0.2126 0 00.0722 0.7152 0.2126 0 00.0722 0.7152 0.2126 0 00 0 0 1 0&quot;&lt;br&gt;            /&amp;gt;&lt;br&gt;            &amp;lt;feComponentTransfer&amp;gt;&lt;br&gt;                &amp;lt;feFuncR type=&quot;discrete&quot; tableValues=&quot;0 0.25 0.75 1&quot; /&amp;gt;&lt;br&gt;                &amp;lt;feFuncG type=&quot;discrete&quot; tableValues=&quot;0 0.25 0.75 1&quot; /&amp;gt;&lt;br&gt;                &amp;lt;feFuncB type=&quot;discrete&quot; tableValues=&quot;0 0.25 0.75 1&quot; /&amp;gt;&lt;br&gt;            &amp;lt;/feComponentTransfer&amp;gt;&lt;br&gt;        &amp;lt;/filter&amp;gt;&lt;br&gt;    &amp;lt;/defs&amp;gt;&lt;br&gt;&amp;lt;/svg&amp;gt;&lt;/pre&gt;&lt;p&gt;Then apply it conditionally with CSS so it only kicks in on e-ink screens:&lt;/p&gt;&lt;p&gt;&lt;code&gt;.screen--1bit .binarize, .screen--2bit .binarize {filter: url(#binarize);}&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Any element with the &quot;binarize&quot; class gets its colors crunched down to 4 levels on the device, but renders normally in the preview.&lt;/p&gt;&lt;h3&gt;Is there a tip you would give to a new developer?&lt;/h3&gt;&lt;p&gt;Use a main template so you don&#39;t have to duplicate your code in each view for maintainability. What works well for me is to start by designing the full view of the recipe, then strip down the data as the views get smaller, or maybe change the layout between horizontal and vertical depending on the view. One of the best ways to achieve that is defining a template in your &lt;b&gt;&lt;strong&gt;shared.liquid&lt;/strong&gt;&lt;/b&gt; and calling render from each view. For example, in the full view of this plugin I just have this code:&lt;/p&gt;&lt;pre data-language=&quot;css&quot;&gt;{% render &quot;main&quot;, trmnl:trmnl, recipes:recipes, user_recipes:user_recipes, user_stats:user_stats, global_stats:global_stats, timeframe:timeframe, columns:3, compact: false%}&lt;/pre&gt;&lt;p&gt;All the data is passed as arguments (including the global &lt;i&gt;&lt;em&gt;{{trmnl}}&lt;/em&gt;&lt;/i&gt; variable), along with view-specific parameters.The columns argument defines the maximum columns per view, and the compact flag decides whether I need to limit the text inside the title bar.&lt;/p&gt;&lt;h3&gt;What is your favorite plugin that someone else created and why?&lt;/h3&gt;&lt;p&gt;Having recently set up a home media server, at the moment I would say it&#39;s &lt;a href=&quot;https://trmnl.com/recipes/190336&quot;&gt;Servarr Dashboard&lt;/a&gt;. A mashup combines &lt;i&gt;&lt;em&gt;Radarr&lt;/em&gt;&lt;/i&gt; and &lt;i&gt;&lt;em&gt;Sonarr&lt;/em&gt;&lt;/i&gt; into a single status report that&#39;s also useful for the rest of the family.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/featured-plugin-trending-recipes</id>
    <link href="https://trmnl.com/blog/featured-plugin-trending-recipes"/>
    <published>2026-04-07T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Featured Community Plugin: Trending Recipes</title>
    <updated>2026-04-07T00:00:00+00:00</updated>
    <dc:date>2026-04-07T00:00:00+00:00</dc:date>
  </entry>
  <entry>
    <author>
      <name>Ryan Kulp</name>
      <uri>https://trmnl.com</uri>
    </author>
    <category term="trmnl"
      label="TRMNL"/>
    <content type="html">&lt;div data-controller=&quot;blog-syntax-highlighter&quot; class=&quot;lexxy-content&quot;&gt;&lt;p&gt;for more context see the &lt;a href=&quot;https://trmnl.com/blog/creator-fund&quot;&gt;Creator Fund announcement&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;our 6th payout rewards community contributions between March 10, 2026 and April 5, 2026.&lt;/p&gt;&lt;h2&gt;source of funds&lt;/h2&gt;&lt;p&gt;each payout period, a portion of developer-specific revenue goes directly to creators.&lt;/p&gt;&lt;figure class=&quot;lexxy-content__table-wrapper&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;source&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;revenue&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;share&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;amount&lt;/strong&gt;&lt;/b&gt;&lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;Stripe&lt;/p&gt;&lt;p&gt;Developer Edition&lt;br&gt;TRMNL+&lt;/p&gt;&lt;p&gt;Shopify&lt;/p&gt;&lt;p&gt;Developer Edition&lt;br&gt;Clarity Kit (X)&lt;br&gt;Clarity Kit (OG)&lt;br&gt;BYOD&lt;/p&gt;&lt;/th&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$3,420&lt;br&gt;$490&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$931.84&lt;br&gt;&lt;mark style=&quot;background-color:var(--highlight-bg-1);&quot;&gt;$115,874.50&lt;/mark&gt;&lt;br&gt;$19,717.98&lt;br&gt;$24,325.24&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;15%&lt;br&gt;80%&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;15%&lt;br&gt;&lt;mark style=&quot;background-color:var(--highlight-bg-1);&quot;&gt;15%&lt;/mark&gt;&lt;br&gt;10%&lt;br&gt;10%&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$513&lt;br&gt;$392&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;$139.78&lt;br&gt;&lt;mark style=&quot;background-color:var(--highlight-bg-1);&quot;&gt;$17,381.18&lt;/mark&gt;&lt;br&gt;$1,971.80&lt;br&gt;$2,432.52&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;lexxy-content__table-cell--header&quot;&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/th&gt;&lt;td&gt;&lt;p&gt;$164,759.56&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;mark style=&quot;background-color:var(--highlight-bg-7);&quot;&gt;$22,830.28&lt;/mark&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;&lt;p&gt;note that&amp;nbsp;&lt;i&gt;&lt;em&gt;Clarity Kit (X)&lt;/em&gt;&lt;/i&gt;&amp;nbsp;sales were combined with all previous &lt;i&gt;&lt;em&gt;Clarity Kit (X)&lt;/em&gt;&lt;/i&gt; sales in celebration of Model X fulfillment which began on March 18. these additional funds are allocated to Plugin Authors only.&lt;/p&gt;&lt;h2&gt;by the numbers&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;total payout: $22,830.28&lt;/li&gt;&lt;li&gt;plugin author share: $21,195.54 (70% of base total, plus accrued Clarity Kit (X))&lt;/li&gt;&lt;li&gt;strategic contributors share: $1,634.73 (30% of base total)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;plugin author&lt;/strong&gt;&lt;/b&gt;&amp;nbsp;earnouts are calculated automatically by a collection of factors including a plugin&#39;s age (on live playlists), presence (by % dominance on playlists), and impressions (times displayed on device), relative to all other community plugins. there is a minimum threshold of 50 total connections (installs + forks) to qualify for monthly payouts. see the algorithm in action &lt;a href=&quot;https://www.youtube.com/watch?v=FJA_tOYcMbI&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;strong&gt;strategic contributors&lt;/strong&gt;&lt;/b&gt;&amp;nbsp;are those who contribute to&amp;nbsp;&lt;a href=&quot;https://github.com/usetrmnl&quot;&gt;TRMNL open source projects&lt;/a&gt;. these earnouts are calculated with a mix of automation + human touch. relative to the funding available, below are allocations by category:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Firmware, 18%&lt;/li&gt;&lt;li&gt;3D Models, 6%&lt;/li&gt;&lt;li&gt;BYOS, 46%&lt;/li&gt;&lt;li&gt;Localizations, 7%&lt;/li&gt;&lt;li&gt;BYOD, 23%&lt;/li&gt;&lt;li&gt;Documentation/Resources, 0%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;note that these allocations change monthly based on contributions by category.&lt;/p&gt;&lt;h2&gt;algorithm?&lt;/h2&gt;&lt;p&gt;over time the above weights, revenue share percentages, and minimum thresholds may change. reporting will become more transparent. our goal is an open sourced algorithm and self-service calculations with daily (or faster) resolution.&lt;/p&gt;&lt;p&gt;candid feedback is welcome, email&amp;nbsp;&lt;a href=&quot;mailto:team@trmnl.com&quot;&gt;team@trmnl.com&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content>
    <id>https://trmnl.com/blog/creator-fund-03-2026</id>
    <link href="https://trmnl.com/blog/creator-fund-03-2026"/>
    <published>2026-04-06T00:00:00+00:00</published>
    <rights>Copyright 2026</rights>
    <title>Creator Fund - March 2026</title>
    <updated>2026-04-06T00:00:00+00:00</updated>
    <dc:date>2026-04-06T00:00:00+00:00</dc:date>
  </entry>
  <dc:date>2026-05-07T00:00:00+00:00</dc:date>
</feed>