FreshRSS + BPC
GitHubA FreshRSS extension that fetches full article content from paywalled sites using a headless browser.
Get container → Install extension → Star an article → headless browser fetches full content.
Architecture
Two components:
FreshRSS Extension (PHP)
Hooks into entries_favorite. When an article is starred, checks the domain against a list of ~900 paywalled sites, calls the headless browser service, saves the returned content to the database.
$this->registerHook('entries_favorite', [$this, 'onFavorite']);
public function onFavorite(array $ids, bool $is_favorite): void {
if (!$is_favorite) return;
// fetch and save content
} Headless Browser Service (Node.js)
Puppeteer with a paywall bypass extension loaded. Receives URL, navigates, waits for extension to run, extracts article with Mozilla Readability, returns HTML.
Star an article
↓
entries_favorite hook fires
↓
HTTP request to browser service
↓
Puppeteer fetches page
↓
Readability extracts article
↓
Save to database
Setup
- Clone the freshrss-bpc repo
- Edit
bpc-server/Dockerfile, replaceYOUR_EXTENSION_URLwith your BPC zip URL - Add to your docker-compose:
services:
freshrss:
volumes:
- ./xExtension-BPC:/var/www/FreshRSS/extensions/xExtension-BPC:ro
depends_on:
- bpc
bpc:
build: ./bpc-server
container_name: bpc
hostname: bpc
restart: unless-stopped docker compose up -d --build- Enable "BPC" in FreshRSS settings
Usage
- Star an article from a paywalled site
- Wait a few seconds
- Refresh - full content is there