Displays the latest entries from any RSS feed on your Screenly digital signage screens.
This repository uses a git submodule for Claude AI configuration. Clone it with:
gh repo clone Screenly/rss-reader-app -- --recurse-submodulesThen install dependencies:
bun installbun run devbun testbun run buildThis code runs several Edge Apps:
- The main RSS Reader app, which deploys through
update-edge-app.ymllike every other Edge App, using the repo variablesSTAGE_EDGE_APP_IDandPRODUCTION_EDGE_APP_ID. - Feed apps (BBC News, Fox News, ...): each is its own Edge App with its own name, icon and default feed, listed in
deployed-apps.ymland deployed byupdate-rss-reader-apps.yml. All other settings come fromscreenly.yml, so a code or setting change reaches every feed app on the next release.
All of them release together, through the shared edge-apps-actions. DEPLOYMENT.md covers how the feed-app workflows work.
Every deploy waits for approval in its GitHub environment.
-
Stage: merge to
main. The push deploys the main app and every feed app with a stage id to stage. -
Production: after checking stage, tag that commit on
mainwith the next CalVer version,vYY.M.PATCH(for examplev26.11.0, thenv26.11.1; checkgit tag --sort=-v:refname | head -1for the latest), and push the tag. This deploys the main app and every feed app with a production id to production. Tags not onmainare refused, and tags that aren'tvfollowed by a digit (such asvrc1) are ignored.Any tag that starts with
vand a digit deploys to production, including pre-release tags such asv26.11.0-rc.1. Don't push one to test; use stage. (This comes from the shared edge-apps-actions tag filter, so it applies to every Edge App.)
git checkout main && git pull
git tag vYY.M.PATCH
git push origin vYY.M.PATCH- Release notes: publish a GitHub Release listing the pull requests merged since the previous release. Add
--draftto review the notes before publishing:
gh release create vYY.M.PATCH --verify-tag --generate-notes --title vYY.M.PATCHA feed app needs no code: it is an entry in deployed-apps.yml.
-
Host an icon at a public URL. The existing icons are under
https://playground.srly.io/edge-apps/helpers/rss-reader/app-icons/. -
Add an entry to
deployed-apps.ymlwith empty ids, and merge it tomain:apps: example-news: # app key: lowercase, used to pick the app in the workflows app_name: 'Example News' # Edge App name and instance title; must be unique description: 'Latest news from Example News' rss_title: 'Example News' # shown in the header icon_url: 'https://.../example-news.svg' rss_url: 'https://example.com/feed.xml' # check it loads first ids: stage: '' production: ''
Apps without an id are skipped by deploys, so merging this changes nothing yet.
-
Create it on stage: run Actions → Initialize Custom RSS Reader App from
main, with environmentstageand the app key. It refuses to run if the app already has a stage id or an Edge App with that name exists. -
Record the id: copy the id from the run's summary into
ids.stageand merge. From now on every stage deploy includes the app. -
Check it on stage, then repeat steps 3 and 4 with
productionto create it there and fill inids.production. The next release tag deploys it with everything else.
The initialize summary also says to set a repo variable. Ignore that for feed apps; their ids live only in deployed-apps.yml.
- Its name, description, icon, header title or feed URL: edit its entry in
deployed-apps.ymland release as usual. Merging deploys the change to stage, and the next tag deploys it to production. (Changingapp_nameafter the app exists doesn't rename it in Screenly; it is only used when the app is created.) - Code or other settings: change the code or
screenly.yml. Every feed app picks it up on the next release, with no change todeployed-apps.yml. - A one-off redeploy or test: run Actions → Update RSS Reader Apps, from
mainfor stage or from a release tag for production. Leave the app key empty for every app, or enter one such asbbc-news. The optional overrides (description, header title, icon URL, feed URL) apply to that run only, so set an app key when you use one; with the key empty, an override changes every feed app. To keep a change, put it indeployed-apps.yml. - Redeploying the main RSS Reader app: a manual run of Update Edge App from
mainredeploys stage. For production, re-run the workflow run of the latest release tag; a manual run from a tag does nothing for the main app. - Removing an app from deploys: clear its id for that environment in
deployed-apps.yml. This stops deploying to it but doesn't delete the app in Screenly.
| Setting | Description | Type | Default |
|---|---|---|---|
bypass_cors |
Route the RSS feed URL through the CORS proxy | optional | true |
cache_interval |
How often (in seconds) to refresh the feed, from 60 to 86400; values outside that range are clamped. If a refresh fails or the feed is empty, the last stories from this feed stay up for up to 24 hours | required | 1800 |
display_errors |
Show errors on screen for debugging purposes | optional | false |
mode |
Layout: headlines (lead story with image, plus a list) or list (headlines only, for maximum readability) |
optional | headlines |
override_locale |
Override the locale used for date formatting (e.g. en, fr, de) |
optional | en |
override_timezone |
Override the timezone for date display (e.g. Europe/London) |
optional | system timezone |
rss_title |
Source name shown in the header | required | BBC News |
rss_url |
URL of the RSS feed to display | required | http://feeds.bbci.co.uk/news/rss.xml |
The following feeds have been tested and are known to work. Some sources require the CORS proxy, so set bypass_cors accordingly.
| Source | URL | bypass_cors |
|---|---|---|
| ABC News | https://abcnews.go.com/abcnews/topstories |
true |
| Al Jazeera | https://www.aljazeera.com/xml/rss/all.xml |
true |
| BBC News | http://feeds.bbci.co.uk/news/rss.xml |
true |
| CNN | http://rss.cnn.com/rss/cnn_topstories.rss |
true |
| Fox News | https://moxie.foxnews.com/google-publisher/latest.xml |
true |
| NPR News | https://feeds.npr.org/1004/rss.xml |
true |
| New York Times | https://rss.nytimes.com/services/xml/rss/nyt/World.xml |
false |
| Wall Street Journal | https://feeds.content.dowjones.io/public/rss/RSSWorldNews |
true |
bun run screenshots