Chyuang

Back
FreshRSS + BPC

FreshRSS + BPC

GitHub

A 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

  1. Clone the freshrss-bpc repo
  2. Edit bpc-server/Dockerfile, replace YOUR_EXTENSION_URL with your BPC zip URL
  3. 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
  1. docker compose up -d --build
  2. Enable "BPC" in FreshRSS settings

Usage

  1. Star an article from a paywalled site
  2. Wait a few seconds
  3. Refresh - full content is there