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.

  • 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.
The feed relay console: pasting github.com/vercel/next.js/releases finds the matching RSSHub route, and the preview shows the newest releases before the feed is added.
The feed relay console: pasting github.com/vercel/next.js/releases finds the matching RSSHub route, and the preview shows the newest releases before the feed is added.

Sign in to see these snippets with your own cluster host. Sign in

  1. 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:
  2. 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: 10m
  3. Use 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 →