<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Edge Apps library 1.3.0 | Screenly</title><description>What has shipped across Screenly, newest first.</description><link>https://www.screenly.io/releases/edge-apps/1.3.0/</link><language>en</language><atom:link href="https://www.screenly.io/releases/edge-apps/1.3.0/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Tue, 28 Jul 2026 00:00:00 +0000</lastBuildDate><item><title>Edge Apps library 1.3.0: New Edge Apps come with Tailwind CSS set up</title><link>https://www.screenly.io/releases/edge-apps/1.3.0/tailwind-css/</link><guid isPermaLink="true">https://www.screenly.io/releases/edge-apps/1.3.0/tailwind-css/</guid><pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate><category>improvement</category><category>developers</category><description>&lt;p&gt;An Edge App made with &lt;code&gt;npx @screenly/edge-apps create&lt;/code&gt; now styles its page with Tailwind CSS
utility classes, so you can lay out a screen in the markup without writing a stylesheet first.
The Tailwind plugin was already part of the &lt;code&gt;edge-apps-scripts&lt;/code&gt; build, so an existing app needs
only the imports. Put these at the top of your stylesheet:&lt;/p&gt;
&lt;div class="code-block"&gt;
&lt;button type="button" class="code-copy" aria-label="Copy code" data-copy-code&gt;
&lt;svg data-copy viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;rect x="9" y="9" width="11" height="11" rx="2"&gt;&lt;/rect&gt;
&lt;path d="M5 15V5a2 2 0 0 1 2-2h10"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;svg data-check viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;path d="M20 6 9 17l-5-5"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#6ab825;font-weight:bold"&gt;layer&lt;/span&gt; &lt;span style="color:#6ab825;font-weight:bold"&gt;theme&lt;/span&gt;, &lt;span style="color:#6ab825;font-weight:bold"&gt;base&lt;/span&gt;, &lt;span style="color:#6ab825;font-weight:bold"&gt;utilities&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#6ab825;font-weight:bold"&gt;import&lt;/span&gt; &lt;span style="color:#ed9d13"&gt;&amp;#39;tailwindcss/theme.css&amp;#39;&lt;/span&gt; &lt;span style="color:#6ab825;font-weight:bold"&gt;layer&lt;/span&gt;(&lt;span style="color:#6ab825;font-weight:bold"&gt;theme&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#6ab825;font-weight:bold"&gt;import&lt;/span&gt; &lt;span style="color:#ed9d13"&gt;&amp;#39;@screenly/edge-apps/styles&amp;#39;&lt;/span&gt; &lt;span style="color:#6ab825;font-weight:bold"&gt;layer&lt;/span&gt;(&lt;span style="color:#6ab825;font-weight:bold"&gt;base&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#6ab825;font-weight:bold"&gt;import&lt;/span&gt; &lt;span style="color:#ed9d13"&gt;&amp;#39;tailwindcss/utilities.css&amp;#39;&lt;/span&gt; &lt;span style="color:#6ab825;font-weight:bold"&gt;layer&lt;/span&gt;(&lt;span style="color:#6ab825;font-weight:bold"&gt;utilities&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Keep the layer order line and the &lt;code&gt;layer(base)&lt;/code&gt; on the library&amp;rsquo;s styles. Without them, the
library&amp;rsquo;s base styles win over your utility classes, whatever their specificity.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t use &lt;code&gt;@import 'tailwindcss';&lt;/code&gt; on its own. It includes Tailwind&amp;rsquo;s Preflight reset, which
strips the borders and padding that components like &lt;code&gt;&amp;lt;app-header&amp;gt;&lt;/code&gt; set for themselves.&lt;/p&gt;
&lt;p&gt;Inside &lt;code&gt;&amp;lt;auto-scaler&amp;gt;&lt;/code&gt;, size things with &lt;code&gt;h-full&lt;/code&gt; and &lt;code&gt;w-full&lt;/code&gt; rather than &lt;code&gt;h-screen&lt;/code&gt; and
&lt;code&gt;w-screen&lt;/code&gt;. &lt;code&gt;&amp;lt;auto-scaler&amp;gt;&lt;/code&gt; draws your app at its reference size and scales the result to fit the
display, so viewport units measure the wrong box. The &lt;code&gt;portrait:&lt;/code&gt; and &lt;code&gt;landscape:&lt;/code&gt; variants work
as expected:&lt;/p&gt;
&lt;div class="code-block"&gt;
&lt;button type="button" class="code-copy" aria-label="Copy code" data-copy-code&gt;
&lt;svg data-copy viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;rect x="9" y="9" width="11" height="11" rx="2"&gt;&lt;/rect&gt;
&lt;path d="M5 15V5a2 2 0 0 1 2-2h10"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;svg data-check viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;path d="M20 6 9 17l-5-5"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#6ab825;font-weight:bold"&gt;main&lt;/span&gt; &lt;span style="color:#bbb"&gt;class&lt;/span&gt;=&lt;span style="color:#ed9d13"&gt;&amp;#34;flex h-full w-full items-center justify-center&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#6ab825;font-weight:bold"&gt;h1&lt;/span&gt; &lt;span style="color:#bbb"&gt;class&lt;/span&gt;=&lt;span style="color:#ed9d13"&gt;&amp;#34;text-6xl portrait:text-4xl&amp;#34;&lt;/span&gt;&amp;gt;Today&amp;#39;s specials&amp;lt;/&lt;span style="color:#6ab825;font-weight:bold"&gt;h1&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#6ab825;font-weight:bold"&gt;main&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>