FreshRSS + BPC

FreshRSS + BPC is an extension for the self-hosted feed reader FreshRSS. When you star an article from one of 942 listed news sites, it opens the article in a Chromium browser running in a separate container with the Bypass Paywalls Clean (BPC) browser extension loaded, extracts the article text, and saves it in place of the short version that came with the feed.

Get it on GitHub

Free and open source (MIT). Needs FreshRSS running in Docker.

Star an article to fetch it

You read your feeds in FreshRSS as usual. When you star an article, the extension checks the article’s domain against its list of sites. If the domain is on the list, it sends the article’s link to the browser service and replaces the stored content with the text that comes back. Refresh the page after a few seconds to read the full article in FreshRSS. Articles from sites that are not on the list are starred as normal and nothing is fetched.

The site list is domains.txt in the extension folder, one domain per line. It has 942 entries, mostly newspapers and magazines, and subdomains match as well, so example.com also covers news.example.com. You can add or remove lines.

The full text stays after feed updates

When FreshRSS refreshes a feed, it can overwrite an article’s stored content with the short version from the feed again. The extension stops this for starred articles: if an update or a re-imported copy of a starred article arrives, the content already saved is kept. The protection applies for as long as the article stays starred.

The browser service

The second part is a small Node.js server in its own container, reached by FreshRSS at http://bpc:3000. It runs Chromium under Puppeteer, in a virtual display, with the BPC extension loaded and the puppeteer-extra stealth plugin. For each request it opens the link, waits until the page has finished loading (up to 30 seconds) and then 2 more seconds for the extension to run, and passes the page to Mozilla’s Readability library to extract the article. It returns the article’s HTML, title, byline and plain text as JSON. The FreshRSS side waits up to 60 seconds for an answer.

If Readability can’t find an article on the page, or the fetch fails, the starred article keeps the content it had, and the failure is written to the FreshRSS log.

Installing it

You need FreshRSS running with Docker Compose. The BPC extension is not included in the repository: you supply a link to its .zip file, and the browser service downloads it when the image is built.

  1. Clone the repository.
  2. In bpc-server/Dockerfile, replace YOUR_EXTENSION_URL with the link to the BPC .zip file.
  3. From docker-compose.example.yml, add the bpc service to your compose file, mount the xExtension-BPC folder into FreshRSS’s extensions folder, and make FreshRSS depend on bpc.
  4. Run docker compose up -d --build.
  5. In FreshRSS, open Settings, then Extensions, and enable BPC.
All self-hosted →