[{"data":1,"prerenderedAt":54},["ShallowReactive",2],{"$f1gq7jdi1j567d":3,"$f1cwkk641btqwg":15},{"meta":4,"html":14},{"title":5,"description":6,"date":7,"tags":8,"author":12,"slug":13},"How to Follow GitHub Releases in an RSS Reader","Every GitHub repository has an Atom feed of its releases. Here's how to add one to an RSS reader, which other GitHub feeds exist, and when a webhook fits better.","2026-11-03",[9,10,11],"rss","github","guide","SereneReader","follow-github-releases-rss","\u003Ch2>Every repository has a release feed\u003C\u002Fh2>\n\u003Cp>GitHub publishes a feed of releases for every public repository. Add \u003Ccode>\u002Freleases.atom\u003C\u002Fcode> to the end of the repository's address:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton class=\"code-block__copy\" type=\"button\" aria-label=\"Copy code\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002FOWNER\u002FREPO\u002Freleases.atom\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>For the GitHub CLI, whose repository is \u003Ccode>cli\u002Fcli\u003C\u002Fcode>, that's:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton class=\"code-block__copy\" type=\"button\" aria-label=\"Copy code\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002Fcli\u002Fcli\u002Freleases.atom\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>The feed is in Atom, a feed format that RSS readers handle the same way as RSS. Each entry is one release, with the release title, a link to the release page, the publish time and the release notes as the maintainers wrote them on GitHub. The feed holds the 10 most recent releases. You don't need a GitHub account, a token or a third-party service to use it.\u003C\u002Fp>\n\u003Ch2>Add a release feed to SereneReader\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Open the repository on GitHub and copy the \u003Ccode>OWNER\u002FREPO\u003C\u002Fcode> part of the address, for example \u003Ccode>cli\u002Fcli\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Build the feed URL: \u003Ccode>https:\u002F\u002Fgithub.com\u002Fcli\u002Fcli\u002Freleases.atom\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>In SereneReader, click \u003Cstrong>Add feed\u003C\u002Fstrong> at the bottom of the sidebar and paste the URL into \u003Cstrong>Feed URL\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>Fill in \u003Cstrong>Custom title\u003C\u002Fstrong>. GitHub names the feed after the repository only, so the GitHub CLI feed arrives as \"Release notes from cli\". A title such as \"GitHub CLI releases\" is easier to find in the sidebar.\u003C\u002Fli>\n\u003Cli>Pick a \u003Cstrong>Folder\u003C\u002Fstrong> if you have one for releases, then click \u003Cstrong>Add feed\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>New releases then arrive with your other articles, and the release notes open in the reader like any other post.\u003C\u002Fp>\n\u003Ch3>Keep release feeds in one folder\u003C\u002Fh3>\n\u003Cp>If you follow more than a few projects, make a folder for them. Click \u003Cstrong>New folder\u003C\u002Fstrong> in the sidebar, call it something like \"Releases\", and choose it when you add each feed. Open the folder when you want to see what changed in the tools you use, and leave it closed the rest of the time.\u003C\u002Fp>\n\u003Ch2>Other feeds GitHub publishes\u003C\u002Fh2>\n\u003Cp>The same pattern works for a few other pages. We checked each of these against real repositories on November 3, 2026.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>What you want to follow\u003C\u002Fth>\n\u003Cth>Feed URL\u003C\u002Fth>\n\u003Cth>What each entry contains\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Releases\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>https:\u002F\u002Fgithub.com\u002FOWNER\u002FREPO\u002Freleases.atom\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Release title and full release notes (10 most recent)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Tags\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>https:\u002F\u002Fgithub.com\u002FOWNER\u002FREPO\u002Ftags.atom\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Tag or release title, with the tagged commit's message instead of the release notes (10 most recent)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Commits on a branch\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>https:\u002F\u002Fgithub.com\u002FOWNER\u002FREPO\u002Fcommits\u002FBRANCH.atom\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Commit message (20 most recent)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Commits to one file or folder\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>https:\u002F\u002Fgithub.com\u002FOWNER\u002FREPO\u002Fcommits\u002FBRANCH\u002FPATH.atom\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Commit message for commits that touched that path (20 most recent)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Discussions\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>https:\u002F\u002Fgithub.com\u002FOWNER\u002FREPO\u002Fdiscussions.atom\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>New discussions, for repositories that have Discussions turned on\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>A user's public activity\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>https:\u002F\u002Fgithub.com\u002FUSER.atom\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Pushes, deleted branches and other public events (30 most recent)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>Some copy-paste examples:\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton class=\"code-block__copy\" type=\"button\" aria-label=\"Copy code\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002Fcli\u002Fcli\u002Ftags.atom\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002Fcli\u002Fcli\u002Fcommits\u002Ftrunk.atom\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002Fcli\u002Fcli\u002Fcommits.atom\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002Fcli\u002Fcli\u002Fdiscussions.atom\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002Fvitejs\u002Fvite\u002Fcommits\u002Fmain\u002Fpackages\u002Fvite\u002FCHANGELOG.md.atom\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fgithub.com\u002Ftorvalds.atom\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>A few details that help:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>\u003Ccode>\u002Fcommits.atom\u003C\u002Fcode> without a branch\u003C\u002Fstrong> follows the repository's default branch. For \u003Ccode>cli\u002Fcli\u003C\u002Fcode> it returns the same entries as \u003Ccode>\u002Fcommits\u002Ftrunk.atom\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A branch that doesn't exist\u003C\u002Fstrong> returns a 404 error, so check the branch name if a reader says it can't find the feed.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The file feed is useful for changelogs.\u003C\u002Fstrong> Some projects write their notes in a \u003Ccode>CHANGELOG.md\u003C\u002Fcode> file instead of in GitHub releases. Following commits to that file tells you when the changelog changes, as in the Vite example above.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Projects that tag versions without publishing GitHub releases\u003C\u002Fstrong> still have a working release feed. Linux and Go publish no GitHub releases, and their \u003Ccode>releases.atom\u003C\u002Fcode> feeds list their tags instead. The entry text is the commit message, so it's short.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>What about a whole organization?\u003C\u002Fh3>\n\u003Cp>GitHub doesn't publish a feed of releases across an organization. \u003Ccode>https:\u002F\u002Fgithub.com\u002FORG.atom\u003C\u002Fcode> returns a valid feed, but it holds organization events such as people being added to repositories. For the \u003Ccode>cli\u003C\u002Fcode> and \u003Ccode>github\u003C\u002Fcode> organizations it was empty. \u003Ccode>https:\u002F\u002Fgithub.com\u002Forgs\u002FORG.atom\u003C\u002Fcode> returns a web page, not a feed.\u003C\u002Fp>\n\u003Cp>To follow every repository in an organization, subscribe to each repository's release feed. You don't need to do that by hand: the script below asks GitHub's API for the organization's public repositories and writes an OPML file, the format readers use to import a list of feeds. It needs \u003Ccode>curl\u003C\u002Fcode> and \u003Ccode>jq\u003C\u002Fcode>, reads up to 100 repositories, and skips archived ones.\u003C\u002Fp>\n\u003Cdiv class=\"code-block\">\u003Cbutton class=\"code-block__copy\" type=\"button\" aria-label=\"Copy code\">Copy\u003C\u002Fbutton>\u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#E1E4E8\">ORG\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">cli\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B392F0\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> -s\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"https:\u002F\u002Fapi.github.com\u002Forgs\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$ORG\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\u002Frepos?per_page=100&amp;type=public\"\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#F97583\">  |\u003C\u002Fspan>\u003Cspan style=\"color:#B392F0\"> jq\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> -r\u003C\u002Fspan>\u003Cspan style=\"color:#79B8FF\"> --arg\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> org\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$ORG\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> '\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"&lt;?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?&gt;\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"&lt;opml version=\\\"2.0\\\"&gt;\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"  &lt;head&gt;&lt;title&gt;\\($org) releases&lt;\u002Ftitle&gt;&lt;\u002Fhead&gt;\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"  &lt;body&gt;\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"    &lt;outline text=\\\"\\($org) releases\\\"&gt;\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      (.[] | select(.archived | not) | \"      &lt;outline type=\\\"rss\\\" text=\\\"\\(.full_name)\\\" xmlUrl=\\\"https:\u002F\u002Fgithub.com\u002F\\(.full_name)\u002Freleases.atom\\\"\u002F&gt;\"),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"    &lt;\u002Foutline&gt;\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"  &lt;\u002Fbody&gt;\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#9ECBFF\">      \"&lt;\u002Fopml&gt;\"'\u003C\u002Fspan>\u003Cspan style=\"color:#F97583\"> &gt;\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#E1E4E8\">$ORG\u003C\u002Fspan>\u003Cspan style=\"color:#9ECBFF\">-releases.opml\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>Change \u003Ccode>ORG\u003C\u002Fcode> to the organization you want, run it, and import the file: in SereneReader, click \u003Cstrong>Add feed\u003C\u002Fstrong>, then \u003Cstrong>Import OPML\u003C\u002Fstrong>. The feeds land in one folder, named \"cli releases\" in this example. Large organizations can have hundreds of repositories, so check the file before you import it. On the Free plan an import stops at the 150-feed limit.\u003C\u002Fp>\n\u003Ch2>Can you skip pre-releases?\u003C\u002Fh2>\n\u003Cp>Not in the feed itself. The release feed includes pre-releases, and nothing in an entry marks it as one. We checked with TypeScript: GitHub marks \"TypeScript 7.1 Beta\" as a pre-release, and its feed entry looks the same as a stable release. Adding \u003Ccode>?prerelease=false\u003C\u002Fcode> to the feed URL doesn't change what GitHub returns.\u003C\u002Fp>\n\u003Cp>What you can filter on is the release title. Many projects put \"beta\", \"rc\" or \"alpha\" in the names of pre-releases. In SereneReader, add a phrase under Settings &gt; Data &gt; \u003Cstrong>Hidden phrases\u003C\u002Fstrong>, or open a release, click \u003Cstrong>Hide article\u003C\u002Fstrong>, and choose \u003Cstrong>Hide by phrase\u003C\u002Fstrong>. Articles whose title or summary contains the phrase are hidden, including ones that arrive later. For example, the phrase \u003Ccode>-rc\u003C\u002Fcode> hides Linux release candidates such as \u003Ccode>v7.4-rc1\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Pick the phrase with care. Hidden phrases apply to every feed you follow, and they match the summary as well as the title. A phrase like \u003Ccode>beta\u003C\u002Fcode> also hides a stable release whose notes mention a beta, and posts in your other feeds that use the word.\u003C\u002Fp>\n\u003Cp>One more thing to watch for: a repository that holds several packages often publishes releases for all of them in the same feed. The TypeScript feed also lists releases of its VS Code extension, titled \u003Ccode>vscode-typescript\u002Fv1.0.1\u003C\u002Fcode>. A hidden phrase such as \u003Ccode>vscode-typescript\u002F\u003C\u002Fcode> removes those.\u003C\u002Fp>\n\u003Ch2>Read releases with an AI agent\u003C\u002Fh2>\n\u003Cp>If you follow many projects, you may want a summary instead of every set of notes. SereneReader's API returns your articles as JSON, including the ones from release feeds, so an agent or a short script can read the past week's releases and tell you which ones affect you. \u003Ca href=\"\u002Fblog\u002Fconnect-rss-feeds-to-ai-agents\">How to connect your RSS feeds to AI agents\u003C\u002Fa> walks through the setup. The API is part of the Pro and Team plans.\u003C\u002Fp>\n\u003Ch2>When a feed isn't enough\u003C\u002Fh2>\n\u003Cp>A release feed is a quiet way to keep up with the software you use. It has limits:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>The notes are only as good as the release.\u003C\u002Fstrong> The feed carries the release text and nothing else. Linux release entries contain only a line like \"Linux 7.4-rc1\", and the TypeScript beta entry is a link to a blog post. The files attached to a release aren't listed either. For projects like these, follow the project's blog feed or its changelog file as well.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Private repositories don't work.\u003C\u002Fstrong> A private repository's feed returns a 404 error unless you're signed in to GitHub, and an RSS reader fetches feeds without your GitHub session. Use GitHub's own notifications for those (below).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New releases arrive on the reader's schedule.\u003C\u002Fstrong> A reader checks each feed periodically, so a release shows up at the next check, not the moment it's published. That's fine for reading. It isn't the right tool when something has to happen right away.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Busy feeds can skip entries.\u003C\u002Fstrong> The feed only ever holds the 10 most recent releases. A repository that publishes more than 10 releases between two checks, such as a large monorepo on release day, pushes some of them out before a reader sees them.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>When those limits matter, use one of these instead:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>GitHub's Watch menu.\u003C\u002Fstrong> On the repository page, click \u003Cstrong>Watch\u003C\u002Fstrong>, choose \u003Cstrong>Custom\u003C\u002Fstrong>, and select \u003Cstrong>Releases\u003C\u002Fstrong>. GitHub then sends a notification, and an email if you've turned email on, for each new release. This also works for private repositories you can access.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A webhook.\u003C\u002Fstrong> If a release should start something automatically, such as a build or a deploy, a repository webhook with the release event calls your server when the release is published. You can only add webhooks to repositories you administer.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dependency update tools.\u003C\u002Fstrong> If the goal is to keep a project's dependencies current, a tool such as Dependabot or Renovate opens pull requests when new versions come out.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>For keeping up with the tools you depend on, without another inbox to manage, the feed is usually enough.\u003C\u002Fp>\n\u003Cp>\u003Cem>Feed URLs and their contents checked against GitHub on November 3, 2026. If a feed stops updating, open its URL in a browser to check that GitHub still serves it.\u003C\u002Fem>\u003C\u002Fp>\n",{"pages":16},[17,26,33,40,47],{"title":18,"description":19,"date":20,"competitor":21,"competitorUrl":22,"tags":23,"slug":25},"Feedbin Alternative: SereneReader Compared","Feedbin is one $7 plan that also handles newsletters, YouTube and podcasts. SereneReader has a free plan, Pro from $5, a Team plan, and Mac and Watch apps.","2026-10-06","Feedbin","https:\u002F\u002Ffeedbin.com",[24,25,9],"compare","feedbin",{"title":27,"description":28,"date":20,"competitor":29,"competitorUrl":30,"tags":31,"slug":32},"Feedly Alternative: SereneReader Compared","Feedly has added AI and enterprise research tools to its RSS reader. Here's how its free plan, pricing, apps and API compare with SereneReader's.","Feedly","https:\u002F\u002Ffeedly.com",[24,32,9],"feedly",{"title":34,"description":35,"date":20,"competitor":36,"competitorUrl":37,"tags":38,"slug":39},"Inoreader Alternative: SereneReader Compared","Inoreader Pro adds rules, social feeds and page monitoring. SereneReader leaves those out, costs less for Pro and Team, and has Mac and Apple Watch apps.","Inoreader","https:\u002F\u002Finoreader.com",[24,39,9],"inoreader",{"title":41,"description":42,"date":20,"competitor":43,"competitorUrl":44,"tags":45,"slug":46},"Miniflux Alternative: SereneReader Compared","Miniflux is open source and runs on your own server, or hosted for $15 a year. SereneReader is a hosted reader with a free plan and native Apple apps.","Miniflux","https:\u002F\u002Fminiflux.app",[24,46,9],"miniflux",{"title":48,"description":49,"date":20,"competitor":50,"competitorUrl":51,"tags":52,"slug":53},"The Old Reader Alternative: SereneReader Compared","The Old Reader keeps Google Reader's social side, with friends, likes and comments. SereneReader offers native Apple apps, free-plan search, and a Team plan.","The Old Reader","https:\u002F\u002Ftheoldreader.com",[24,53,9],"the-old-reader",1794508009869]