{"product":"edge-apps","releases":[{"date":"2026-07-19","entries":[{"areas":["developers"],"breaking":false,"content_html":"\u003cp\u003eStarting an Edge App used to mean cloning a template repository and replacing its placeholders.\nNow 1 command gives you a project that builds:\u003c/p\u003e\n\u003cdiv class=\"code-block\"\u003e\n  \u003cbutton type=\"button\" class=\"code-copy\" aria-label=\"Copy code\" data-copy-code\u003e\n    \u003csvg data-copy viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n      \u003crect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\"\u003e\u003c/rect\u003e\n      \u003cpath d=\"M5 15V5a2 2 0 0 1 2-2h10\"\u003e\u003c/path\u003e\n    \u003c/svg\u003e\n    \u003csvg data-check viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n      \u003cpath d=\"M20 6 9 17l-5-5\"\u003e\u003c/path\u003e\n    \u003c/svg\u003e\n  \u003c/button\u003e\n  \u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enpx @screenly/edge-apps create my-edge-app\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#24909d\"\u003ecd\u003c/span\u003e my-edge-app\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enpm run dev\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWith Bun, run \u003ccode\u003ebunx @screenly/edge-apps create my-edge-app\u003c/code\u003e instead. The command notices which\npackage manager started it and writes the \u003ccode\u003epackage.json\u003c/code\u003e scripts and test setup to match. \u003ccode\u003e--pm npm\u003c/code\u003e\nor \u003ccode\u003e--pm bun\u003c/code\u003e overrides that.\u003c/p\u003e\n\u003cp\u003eThe new directory has:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ea \u003ccode\u003escreenly.yml\u003c/code\u003e manifest with a \u003ccode\u003emessage\u003c/code\u003e setting and a \u003ccode\u003esentry_dsn\u003c/code\u003e setting\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eindex.html\u003c/code\u003e with \u003ccode\u003e\u0026lt;auto-scaler\u0026gt;\u003c/code\u003e and \u003ccode\u003e\u0026lt;app-header\u0026gt;\u003c/code\u003e already on the page\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esrc/main.ts\u003c/code\u003e, which applies the theme, reads the \u003ccode\u003emessage\u003c/code\u003e setting, and signals ready\u003c/li\u003e\n\u003cli\u003escripts for \u003ccode\u003edev\u003c/code\u003e (with the CORS proxy running alongside), \u003ccode\u003ebuild\u003c/code\u003e, \u003ccode\u003elint\u003c/code\u003e, \u003ccode\u003eformat\u003c/code\u003e,\n\u003ccode\u003etype-check\u003c/code\u003e, \u003ccode\u003escreenshots\u003c/code\u003e, and \u003ccode\u003edeploy\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ea Playwright spec under \u003ccode\u003ee2e/\u003c/code\u003e for screenshots at every supported resolution\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDependencies are installed for you, at the versions the library itself was released with.\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003eOption\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eWhat it does\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e--description \u0026lt;text\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eSets the description in \u003ccode\u003epackage.json\u003c/code\u003e, \u003ccode\u003escreenly.yml\u003c/code\u003e, and \u003ccode\u003eREADME.md\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e--author \u0026lt;text\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eSets the author in \u003ccode\u003epackage.json\u003c/code\u003e\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e--pm \u0026lt;npm|bun\u0026gt;\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003ePicks the package manager instead of detecting it\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e--force\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eWrites into a directory that already has files in it\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ccode\u003e--skip-install\u003c/code\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eSkips installing dependencies\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eRunning \u003ccode\u003eedge-apps-scripts create\u003c/code\u003e with no directory still does what it did before: it fills in\nthe \u003ccode\u003e{{APP_NAME}}\u003c/code\u003e-style placeholders in the current project, for template repositories you\u0026rsquo;ve\nalready cloned.\u003c/p\u003e\n","description":"The create command scaffolds a working Edge App into a new directory, with a manifest, an entry point, and package.json scripts set up for npm or Bun.","title":"A new create command scaffolds an Edge App in 1 step","type":"release","url":"https://www.screenly.io/releases/edge-apps/1.2.0/create-a-new-edge-app/"}],"json":"https://www.screenly.io/releases/edge-apps/1.2.0/v1.json","product":"edge-apps","product_label":"Edge Apps library","url":"https://www.screenly.io/releases/edge-apps/1.2.0/","version":"1.2.0"}],"title":"Edge Apps library 1.2.0","url":"https://www.screenly.io/releases/edge-apps/1.2.0/","version":1}