Skip to main content
ShadowBroker aggregates RSS feeds into the news ticker and geolocated news events layer. The feed list is fully configurable — you can add, remove, and reorder feeds through the Settings panel or the API.

Default feeds

The following 19 feeds ship with ShadowBroker out of the box, with an Asia-Pacific and defense focus:
NameURLWeight
GDACShttps://www.gdacs.org/xml/rss.xml5
FocusTaiwanhttps://focustaiwan.tw/rss5
NPRhttps://feeds.npr.org/1004/rss.xml4
Kyodohttps://english.kyodonews.net/rss/news.xml4
SCMPhttps://www.scmp.com/rss/91/feed4
The Diplomathttps://thediplomat.com/feed/4
Stars and Stripeshttps://www.stripes.com/feeds/pacific.rss4
Yonhaphttps://en.yna.co.kr/RSS/news.xml4
Taipei Timeshttps://www.taipeitimes.com/xml/pda.rss4
BBChttp://feeds.bbci.co.uk/news/world/rss.xml3
NHKhttps://www3.nhk.or.jp/nhkworld/rss/world.xml3
CNAhttps://www.channelnewsasia.com/rssfeed/83959863
Mercopresshttps://en.mercopress.com/rss/3
Nikkei Asiahttps://asia.nikkei.com/rss3
Asia Timeshttps://asiatimes.com/feed/3
Defense Newshttps://www.defensenews.com/arc/outboundfeeds/rss/3
Japan Timeshttps://www.japantimes.co.jp/feed/3
AlJazeerahttps://www.aljazeera.com/xml/rss/all.xml2
NYThttps://rss.nytimes.com/services/xml/rss/nyt/World.xml1

Priority weights

Each feed has a weight from 1 (lowest) to 5 (highest). The weight controls how prominently articles from that feed appear relative to others when the news aggregator ranks and deduplicates items.
WeightMeaning
5Highest priority — alerts and high-signal sources (e.g., GDACS disaster alerts, FocusTaiwan)
4High priority — primary regional sources
3Standard priority — general world news
2Lower priority — supplementary sources
1Lowest priority — high-volume feeds used as background coverage

Adding and removing feeds via the Settings panel

1

Open Settings

In the dashboard, click Settings in the sidebar, then select the News Feeds tab.
2

Add a new feed

Click Add feed. Enter a display name, the RSS feed URL, and select a weight from 1–5. Click Save.
3

Remove a feed

Click the trash icon next to any feed in the list and confirm the deletion.
4

Reorder feeds

Drag feeds up or down to reorder them. Weight is the primary ranking factor; order is a tiebreaker.
The maximum number of feeds is 25. Attempts to save a feed list with more than 25 entries are rejected with a 400 error. Remove an existing feed before adding a new one if you are at the limit.

Persistence

Feed configuration is stored in backend/config/news_feeds.json. The file is read at startup and written whenever you save changes through the Settings panel or API. Changes persist across container restarts automatically. If the file is missing or invalid, the backend falls back to the default feed list.

The /api/settings/news-feeds endpoints

All feed management endpoints require the X-Admin-Key header for write operations (PUT and POST). The GET endpoint is public.

GET /api/settings/news-feeds

Returns the current feed list as a JSON array.
curl http://localhost:8000/api/settings/news-feeds
Example response:
[
  { "name": "GDACS", "url": "https://www.gdacs.org/xml/rss.xml", "weight": 5 },
  { "name": "NPR", "url": "https://feeds.npr.org/1004/rss.xml", "weight": 4 }
]

PUT /api/settings/news-feeds

Replaces the entire feed list. Send the complete list as a JSON array — partial updates are not supported.
curl -X PUT \
  -H "X-Admin-Key: your-admin-key" \
  -H "Content-Type: application/json" \
  -d '[
    {"name": "GDACS", "url": "https://www.gdacs.org/xml/rss.xml", "weight": 5},
    {"name": "Reuters", "url": "https://feeds.reuters.com/reuters/worldNews", "weight": 4}
  ]' \
  http://localhost:8000/api/settings/news-feeds
Validation rules:
  • Maximum 25 feeds.
  • Each feed must have a non-empty name and url.
  • weight must be an integer between 1 and 5.
Returns 400 if validation fails.

POST /api/settings/news-feeds/reset

Restores the default feed list, overwriting any custom configuration.
curl -X POST \
  -H "X-Admin-Key: your-admin-key" \
  http://localhost:8000/api/settings/news-feeds/reset
The response includes the restored feed list:
{
  "status": "reset",
  "feeds": [...]
}
All three endpoints are rate-limited. GET is limited to 30 requests/minute. PUT and POST are limited to 10 requests/minute.

Build docs developers (and LLMs) love