<?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.2.0 | Screenly</title><description>What has shipped across Screenly, newest first.</description><link>https://www.screenly.io/releases/edge-apps/1.2.0/</link><language>en</language><atom:link href="https://www.screenly.io/releases/edge-apps/1.2.0/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate><item><title>Edge Apps library 1.2.0: A new create command scaffolds an Edge App in 1 step</title><link>https://www.screenly.io/releases/edge-apps/1.2.0/create-a-new-edge-app/</link><guid isPermaLink="true">https://www.screenly.io/releases/edge-apps/1.2.0/create-a-new-edge-app/</guid><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><category>release</category><category>developers</category><description>&lt;p&gt;Starting an Edge App used to mean cloning a template repository and replacing its placeholders.
Now 1 command gives you a project that builds:&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-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npx @screenly/edge-apps create my-edge-app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#24909d"&gt;cd&lt;/span&gt; my-edge-app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;npm run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;With Bun, run &lt;code&gt;bunx @screenly/edge-apps create my-edge-app&lt;/code&gt; instead. The command notices which
package manager started it and writes the &lt;code&gt;package.json&lt;/code&gt; scripts and test setup to match. &lt;code&gt;--pm npm&lt;/code&gt;
or &lt;code&gt;--pm bun&lt;/code&gt; overrides that.&lt;/p&gt;
&lt;p&gt;The new directory has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;code&gt;screenly.yml&lt;/code&gt; manifest with a &lt;code&gt;message&lt;/code&gt; setting and a &lt;code&gt;sentry_dsn&lt;/code&gt; setting&lt;/li&gt;
&lt;li&gt;&lt;code&gt;index.html&lt;/code&gt; with &lt;code&gt;&amp;lt;auto-scaler&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;app-header&amp;gt;&lt;/code&gt; already on the page&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src/main.ts&lt;/code&gt;, which applies the theme, reads the &lt;code&gt;message&lt;/code&gt; setting, and signals ready&lt;/li&gt;
&lt;li&gt;scripts for &lt;code&gt;dev&lt;/code&gt; (with the CORS proxy running alongside), &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;lint&lt;/code&gt;, &lt;code&gt;format&lt;/code&gt;,
&lt;code&gt;type-check&lt;/code&gt;, &lt;code&gt;screenshots&lt;/code&gt;, and &lt;code&gt;deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;a Playwright spec under &lt;code&gt;e2e/&lt;/code&gt; for screenshots at every supported resolution&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dependencies are installed for you, at the versions the library itself was released with.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--description &amp;lt;text&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets the description in &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;screenly.yml&lt;/code&gt;, and &lt;code&gt;README.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--author &amp;lt;text&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets the author in &lt;code&gt;package.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--pm &amp;lt;npm|bun&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Picks the package manager instead of detecting it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Writes into a directory that already has files in it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--skip-install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skips installing dependencies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Running &lt;code&gt;edge-apps-scripts create&lt;/code&gt; with no directory still does what it did before: it fills in
the &lt;code&gt;{{APP_NAME}}&lt;/code&gt;-style placeholders in the current project, for template repositories you&amp;rsquo;ve
already cloned.&lt;/p&gt;</description></item></channel></rss>