Official package · Automation and infrastructure
RSS and RSSHub feeds as realtime events
Send every new item of an RSS, Atom or JSON feed, including any RSSHub route, to open browsers and apps the moment it appears. feed-relay is a small open-source Go service that runs next to your RSSHub.
ghcr.io/hibira-io/feed-relayGitHub ↗RSSHub ↗
- Each new item becomes an event on your channels, a push notification or an inbox notification, sent once even across restarts.
- Feeds with a WebSub hub, such as YouTube channels, arrive within seconds. Others are polled with ETag and Last-Modified, so an unchanged feed costs almost nothing.
- The first run only remembers the items already in a feed, so starting it never floods your users.
- A web console to add, preview, pause and test feeds, and an MCP server so AI agents can manage them. Every change reaches open consoles at once through your Hibira app.

Sign in to see these snippets with your own cluster host. Sign in
Install
# docker-compose.yml, with HIBIRA_APP_ID, HIBIRA_APP_KEY and HIBIRA_APP_SECRET in .env services: rsshub: image: diygod/rsshub:latest feed-relay: image: ghcr.io/hibira-io/feed-relay:latest env_file: .env # also ADMIN_PASSWORD for the console, MCP_TOKEN for /mcp environment: RSSHUB_URL: http://rsshub:1200 ports: - "8080:8080" volumes: - ./feed-relay.yaml:/config/feed-relay.yaml:ro - relay-data:/data volumes: relay-data:Set it up
# feed-relay.yaml hibira: url: https://ws.hibira.io app_id: ${HIBIRA_APP_ID} key: ${HIBIRA_APP_KEY} secret: ${HIBIRA_APP_SECRET} feeds: - name: releases url: /github/release/hibira-io/pusher-server # an RSSHub route channel: releases - name: go blog url: https://go.dev/blog/feed.atom channel: news interval: 10mUse it
import Pusher from 'pusher-js'; const pusher = new Pusher('YOUR_APP_KEY', { cluster: 'hkg', wsHost: 'ws.hibira.io', enabledTransports: ['ws', 'wss'], }); // { feed: { name, title }, id, title, link, summary, author, image, published } pusher.subscribe('releases').bind('new-item', (item) => { console.log(item.feed.title, item.title, item.link); });
Before you start
- The app secret is shown only once, when you create the app or rotate its secret. Keep it on your server, never in a browser or game build.
- Each event stays under 3,500 bytes to fit the Free plan’s 4 KB limit; the summary is shortened first. Fetch the full article from item.link.
- No server to run? An RSS trigger in n8n, Make, Activepieces or Node-RED followed by our Hibira node does the same, polled by the workflow.
- Relay only feeds you may use, and follow each source site’s terms.
- For live updates in the console on the Free plan, add the console’s address (for example http://localhost:8080) to the app’s allowed origins.
- On the Free plan, list every origin your pages load from in the app’s allowed origins (http://localhost:3000 while developing, then your domain). "*" needs a paid plan.
Use the app key from your dashboard; the secret stays on your server. Channels, events and authorization endpoints work exactly as they do with Pusher. Create your free account →