How to Use RSSHub: The Beginner's Guide (First Deploy, Your First Route, the Radar Lesson, and the Access-Key Rule)

CodexFuse Team · 2026-11-02T06:10:29.694Z · 11 min read min read

Learn how to use RSSHub, the open-source RSS feed generator: deploy with Docker, make your first route, use RSSHub Radar, add the access key, and wire feeds into your reader.

Learning how to use RSSHub starts with one sentence: RSSHub is an open-source engine that creates RSS feeds for websites that never offered one — so you can follow those sites from your own feed reader instead of checking them by hand. If you have ever wished you could create an RSS feed from a website that only shows you a homepage or a social feed, this rsshub tutorial walks you through the whole arc: deploy RSSHub with Docker, build your first route, shape feeds with parameters, use RSSHub Radar in your browser, lock your instance with the access-key rule, and wire everything into a reader. The Docker part assumes you have Docker installed; if you have never used it, my Docker beginner guide gets you from zero to a first container before you come back here.

RSSHub is bigger than most people expect from a self-hosted tool. At the time I checked this week, the DIYgod/RSSHub repository on GitHub had 46,765 stars and 10,291 forks (those numbers move daily, so treat them as a snapshot), the code is released under the AGPL-3.0 license — worth knowing, because one deploy-template page on the web wrongly claims MIT — and the project's own README describes RSSHub as "the world's largest RSS network, consisting of over 5,000 global instances." There are no fixed version numbers to memorize: the project ships rolling releases tagged vYYYY.MM.DD plus a commit hash.

What Is RSSHub, Exactly?

RSSHub is a route-based feed generator. A route is a small scraper maintained by the project's open-source community that turns one website (or one corner of it) into a standard RSS, Atom, or JSON feed. You give RSSHub a route address, it fetches the site, normalizes the result, caches it, and hands your reader a feed URL. The community, not a company, authors and maintains the routes — the guide puts it plainly: "Our thriving community is the key to RSSHub's success."

The Route Lesson: One Address per Feed

The most important structural idea in this tutorial is the namespace: each site gets a namespace, which is normally the site's second-level domain. The official docs teach the concept with the Telegram route, and the example is worth quoting verbatim because it shows the whole pattern: "According to the Telegram route documentation, the route is /telegram/channel/:username/:routeParams?, where username is a required parameter and routeParams is an optional parameter. Replace :username with the channel id awesomeRSSHub to get the path /telegram/channel/awesomeRSSHub, then add the instance domain https://rsshub.app, a subscription source is generated: https://rsshub.app/telegram/channel/awesomeRSSHub."

So a feed is always three parts: your instance's domain, the namespace, and the route path with its parameters. The practical habit to build — do it once and it pays forever — is checking the docs' per-namespace route pages whenever you want a new site: they document each route's parameters and the environment variables some routes require (certain authenticated routes need tokens set as env vars). Two other discovery routes: the Radar rules API at https://rsshub.app/api/radar/rules, and the RSSHub Radar browser extension, which we will meet properly below.

How Do You Deploy RSSHub with Docker?

Self-hosting is where RSSHub shines: your instance, your rate limits, your reading stays private. The canonical deploy is a single Docker run against the official image on Docker Hub or GitHub's registry:

  1. Run the no-browser image: docker run -d --name rsshub -p 1200:1200 diygod/rsshub — this starts RSSHub on port 1200 without the browser dependency.
  2. Decide about the browser image (one line): if any of your planned feeds need a real browser, use diygod/rsshub:chromium-bundled instead — the full lesson on why comes later in this guide.
  3. Or use Compose: wget https://raw.githubusercontent.com/DIYgod/RSSHub/master/docker-compose.yml, review it, then docker compose up -d.
  4. Open it: visit http://{Server IP}:1200 in your browser — the welcome page confirms the instance is alive.
  5. Set the basics in env vars: the configuration page documents them; the ones that matter on day one are below.
Env varWhat it doesDefault
PORTThe port RSSHub listens on1200
CACHE_TYPEmemory or redismemory (redis recommended for busy instances)
CACHE_EXPIREHow long route content is cached5 minutes
ACCESS_KEYLocks the whole instance (see the access-key rule below)unset
UAThe user agent RSSHub presents to sitesa random Chrome-on-macOS string

How Do You Make Your First Route?

Start with the public instance so you learn the address pattern before you operate your own. Take the Telegram example from the docs and run it against the official instance:

https://rsshub.app/telegram/channel/awesomeRSSHub

Open that URL in a browser and you get an RSS 2.0 feed of the channel — no signup, no app, just a URL. Now swap in your own site: find its route on the docs' per-namespace pages (noting any required env vars), and append the route to your instance's domain instead of rsshub.app. One honest note: routes are community-written, so a route can break when the site it reads changes its layout — the community fixes them, but budget for the occasional dead feed rather than assuming permanence.

How Do You Shape a Feed with Parameters?

This is the part most beginners skip, and it is what turns a raw feed into a useful one. RSSHub accepts query parameters on any feed URL. The defaults are sensible — output is RSS 2.0, entries are sorted — but the parameter set repays learning:

ParameterWhat it doesExample
formatOutput format: rss, atom, json, or rss3?format=json for a JSON Feed
limitCaps the number of entries?limit=10
filter, filter_title, filter_description, filter_author, filter_categoryKeeps only entries matching the pattern (title + content for filter)?filter_title=release
filter_timeKeeps entries newer than N seconds?filter_time=86400 (last day)
filterout*The mirror family: filterout, filterout_title, etc., drop matches?filterout_title=ad
filter_case_sensitiveWhether filters respect casedefault true; filters support regex via the re2 engine
briefTruncates entry text to at least N characters?brief=100
mode=fulltextFetches the full article text for routes that support it?mode=fulltext
key / codeAuthentication for a locked instancesee the access-key rule

The filter family is the real power tool: a noisy feed plus filterout becomes a signal feed. Learn the pattern on one feed, then reuse it everywhere.

What Is RSSHub Radar, and How Do You Use It?

RSSHub Radar is the browser extension that removes the "find the route" homework. The docs describe it in one line: RSSHub "provides a Radar function, which is used to map website addresses to RSSHub addresses." Install it from the Chrome Web Store (it was at version 2.2.0 when I checked, updated February 11, 2026), visit any site you want to follow, click the extension, and it shows you the matching RSSHub routes and the site's native feeds — then subscribes you in one click to Miniflux, FreshRSS, Folo, Feedly, Inoreader, Feedbin, The Old Reader, Feeds.Pub, or a local reader. For beginners, the workflow is: deploy first, then let Radar teach you the route system by example instead of memorizing namespaces.

The Access-Key Rule: Lock Your Instance

Say this once and never skip it: an RSSHub instance with no access key is open to the entire internet. Anyone who finds it can burn your rate limits and read your routes. The fix takes one env var. When ACCESS_KEY is set, RSSHub activates global access control — requests without a valid key or code are denied, and even /healthz requires authentication.

There are two ways to authenticate. You can pass the key directly as ?key=YourKey, but that is coarse: anyone with the URL has your key. The better way is the access code, which is md5(route + key) — a code valid only for that one route. The docs' own example: md5('/qdaily/column/59' + 'ILoveRSSHub') gives 0f820530128805ffc10351f22b5fd121, so the locked feed URL becomes:

StepValue
Route/qdaily/column/59
KeyILoveRSSHub
Access codemd5('/qdaily/column/59' + 'ILoveRSSHub') = 0f820530128805ffc10351f22b5fd121
Locked URLhttps://your-instance/qdaily/column/59?code=0f820530128805ffc10351f22b5fd121

Share code-authenticated URLs freely; they work for that route and nothing else. Keep the raw key out of shared URLs — if it leaks, regenerate it.

Do You Need the Chromium-Bundled Image?

Some routes read sites that only render in a real browser, and those routes need Playwright's Chromium. The plain diygod/rsshub image has no browser dependency, so those routes fail — one independent deploy guide describes the failure exactly: the plain image's empty browser cache makes the routes die with "Executable doesn't exist," while the chromium-bundled variant "ships the Playwright Chromium that more than 120 routes need." The rule is simple: start with the plain image, and the moment a route you care about needs a browser, switch to diygod/rsshub:chromium-bundled. If you run your own browser outside Docker, point CHROMIUM_EXECUTABLE_PATH (or the Playwright/Puppeteer websocket endpoints) at it per the configuration docs.

How Do You Wire Your Feeds Into a Reader?

RSSHub is the generator, not the reader — the final step is handing your locked, filtered feed URLs to software whose job is displaying them. Two self-hosted readers pair naturally with it: my Miniflux beginner guide covers the minimalist option, and my FreshRSS beginner guide covers the feature-rich one. Paste your feed URLs into either, or use RSSHub Radar's one-click subscribe to skip the copy-paste entirely. From here the habit is self-sustaining: spot a site, Radar it, filter it, read it.

7 Mistakes Beginners Make with RSSHub

MistakeWhy it hurtsThe fix
Publishing an instance with no ACCESS_KEYStrangers can use your bandwidth and trigger your rate limitsSet ACCESS_KEY before you expose the port; use ?code= URLs for sharing
Using the plain image for browser routesRoutes die with "Executable doesn't exist"Switch to diygod/rsshub:chromium-bundled
Enabling ALLOW_USER_SUPPLY_UNSAFE_DOMAIN on a public instanceVisitors can make your server fetch arbitrary domains — the docs flag this as a Server-Side Request Forgery riskLeave it off (it is off by default); only enable it on a private instance you fully trust
Treating RSSHub as the readerYou keep refreshing the instance page instead of reading comfortablyWire feeds into Miniflux or FreshRSS and read there
Assuming routes never breakA site redesign kills your feed and you blame the instanceCheck the route's docs page or Radar; community fixes land, but on the community's schedule
Keeping the default in-memory cache on a busy instanceMemory grows with your feed list and restart loses the cacheSet CACHE_TYPE=redis with a Redis instance once you have dozens of feeds
Sharing URLs with ?key= in themAnyone with the URL has your instance keyShare ?code= URLs (route-scoped); regenerate the key if it leaks

Sources

  1. RSSHub docs — Guide (route concept, Telegram route example, Radar function, namespaces, Radar rules API)
  2. RSSHub docs — Parameters (format, limit, filter family, filterout family, filter_time, filter_case_sensitive, brief, fulltext mode, sorted)
  3. RSSHub docs — Configuration (PORT, CACHE_TYPE, ACCESS_KEY and access codes, ALLOW_USER_SUPPLY_UNSAFE_DOMAIN, CHROMIUM_EXECUTABLE_PATH; updated 3 days before this writing)
  4. RSSHub docs — Create Route (namespace = second-level domain, per-namespace maintainers)
  5. DIYgod/RSSHub on GitHub (stars/forks snapshot, AGPL-3.0 license, "world's largest RSS network" quote, community maintenance)
  6. DIYgod/RSSHub-Radar on GitHub (extension source, "discover and subscribe to the RSS and RSSHub of current websites")
  7. RSSHub Radar — Chrome Web Store (version 2.2.0, updated February 11, 2026; one-click readers list)
  8. Railway — Deploy & Host RSSHub (Just Updated) (access-key contract, chromium-bundled ships Playwright Chromium for 120+ routes, plain image "Executable doesn't exist" failure)
  9. Railway — Deploy & Host RSSHub (docker run commands, port 1200)
  10. RSSHub docs mirror — Deploy (plain vs chromium-bundled images, Compose download, port 1200)
  11. Brightcoding — How to Generate RSS Feeds from Any Website (independent guide, updated 2026-11-02; route/instance/Radar definitions, quick start, parameters)
  12. MakeUseOf — How to follow websites that don't offer an RSS feed (RSSHub Radar feature arc)
  13. SelfHostedNinja — RSSHub: Self-Hosting Made Simple (Docker Compose deploy, nginx, backups)
  14. self-host.app — RSSHub Self-Hosting Guide (deploy coverage)

Frequently Asked Questions

Is RSSHub free?

Yes — the code is open source under the AGPL-3.0 license, and self-hosting costs you only the server. The official public instance at rsshub.app is also free to try routes on, but for anything regular, your own instance is the point.

Can RSSHub create a feed from any website?

From any site that has a community route, which covers thousands of popular sites — but not literally every site on the web. Check the docs' route pages or RSSHub Radar for your site; if no route exists, the community welcomes new route contributions, and the docs teach route authoring. Remember the one caveat from this guide: routes read the live site, so a site redesign can break a route until the community updates it.

Do I need my own server to use RSSHub?

No. You can test any route on the public instance (or one of the 5,000+ community instances the project mentions) with zero setup. You need your own server only when you want privacy, your own rate limits, and routes that require your private tokens.

Should I use RSSHub or FetchRSS?

They solve the same problem from opposite sides: RSSHub is the self-hosted, open-source route engine you run yourself; FetchRSS is a hosted service that does the scraping for you. If you want full control and no subscription, RSSHub; if you want zero infrastructure, a hosted alternative like FetchRSS. This guide covers RSSHub because the self-hosted path is where the interesting setup lessons live.

Do I need the chromium-bundled Docker image?

Only if your feeds need it. Start with the plain diygod/rsshub image; the day a route fails with an "Executable doesn't exist" style browser error, switch to diygod/rsshub:chromium-bundled. Most text-and-API routes never need a browser at all.

Featured on Twelve Tools Launch Llama Tools Launch your MCP