MCPSERV.CLUB
Bubo Reader

Bubo Reader

Self-Hosted

Minimalist RSS feed aggregator for self‑hosted sites

Stale(55)
219stars
0views
Updated Jan 20, 2025

Overview

Discover what makes Bubo Reader powerful

Bubo Reader is a **hyper‑minimalist, static RSS/Atom/JSON feed aggregator** that can be deployed on any server or CI‑based platform such as Netlify or Glitch. From a developer’s perspective, the project is intentionally lightweight: it fetches feeds at build time, renders them with a Nunjucks template, and outputs a pure static HTML page. This design eliminates runtime dependencies on databases or server‑side runtimes, making the deployment footprint tiny and highly cacheable.

Language

Runtime

Template Engine

Data Source

Overview

Bubo Reader is a hyper‑minimalist, static RSS/Atom/JSON feed aggregator that can be deployed on any server or CI‑based platform such as Netlify or Glitch. From a developer’s perspective, the project is intentionally lightweight: it fetches feeds at build time, renders them with a Nunjucks template, and outputs a pure static HTML page. This design eliminates runtime dependencies on databases or server‑side runtimes, making the deployment footprint tiny and highly cacheable.

Technical Stack & Architecture

  • Language: TypeScript (strictly typed, transpiled to ES6) ensures type safety for feed parsing and rendering logic.
  • Runtime: Node.js 18+ (ES modules) powers the build script. All network I/O is performed with native fetch, wrapped in custom throttling logic.
  • Template Engine: Nunjucks, a Jinja‑style templating system, provides declarative rendering. The template (config/template.html) can be swapped for any markup language or even a different templating engine if needed.
  • Data Source: conf/feeds.json is the sole configuration file. It maps categories to arrays of feed URLs, allowing developers to organize feeds hierarchically.
  • Build Pipeline: src/index.ts orchestrates feed fetching, parsing (via built‑in DOMParser for XML/JSON), and rendering. The output is a single public/index.html file along with static assets (style.css, optional images).

The architecture is intentionally single‑pass: fetch → normalize → render. There is no caching layer or background worker; the static page is regenerated on each deployment or manual build. This simplicity yields predictable execution time and makes it trivial to audit the data flow.

Core Capabilities & API Surface

  • Feed Normalization: The utilities module parses RSS, Atom, and JSON feeds into a unified internal representation (FeedItem). It handles common pitfalls such as relative URLs, missing dates, and duplicate entries.
  • Throttling & Batching: Developers can fine‑tune MAX_CONNECTIONS and DELAY_MS in index.ts to respect upstream rate limits or reduce CI build times. This is useful when aggregating dozens of feeds from slow sources.
  • Extensible Renderer: renderer.ts exposes a small API (render(items, templatePath)) that can be overridden. By injecting a custom renderer, developers can integrate React, Svelte, or any other front‑end framework without touching the feed logic.
  • Programmatic Build: The build script can be imported as a module in another Node project, enabling Bubo to act as a library that pre‑generates feed pages for larger static sites.

Deployment & Infrastructure

  • Self‑Hosting: Run npm run build:bubo locally and serve the public/ folder with any static file server (NGINX, Caddy, Cloudflare Pages). No database or persistent state is required.
  • CI/CD Friendly: Netlify and GitHub Actions examples demonstrate automatic rebuilds on feeds.json changes. The build is deterministic, so caching strategies (e.g., Netlify’s cache key) can be leveraged to speed up rebuilds.
  • Containerization: A minimal Dockerfile can wrap the Node build step, producing a lightweight image that pushes the static files to an S3 bucket or a CDN. The absence of runtime dependencies simplifies container layers.

Integration & Extensibility

  • Plugin Hooks: The utilities.ts module is the primary extension point. Developers can add custom parsers for proprietary feed formats or inject pre‑processing steps (e.g., Markdown conversion).
  • Webhooks: While Bubo itself is static, developers can hook the build step into external services (e.g., a webhook from a Git repo or a scheduled CloudWatch event) to trigger regeneration.
  • Custom Styling: The CSS file is fully replaceable. Because the output is a plain HTML page, developers can integrate any CSS framework (Tailwind, Bootstrap) or even inline critical CSS for performance.

Developer Experience

  • Configuration: A single JSON file (feeds.json) plus a template makes onboarding fast. Adding or removing feeds is as simple as editing JSON.
  • Documentation: The README contains clear sections on architecture, throttling, and deployment targets. Inline comments in index.ts explain the flow.
  • Community & Support: The project is hosted on GitHub with an active issue tracker. Licensing is permissive (MIT), encouraging reuse in commercial or internal projects.

Use Cases

  1. Personal Aggregator – A developer can build a lightweight, self‑hosted RSS dashboard to stay updated on niche blogs without third‑party services.
  2. Corporate Knowledge Base – Teams can aggregate internal documentation feeds (e.g., Confluence RSS) into a single static page served on an intranet.
  3. Static Site Enhancements – Integrate Bubo into a larger static site generator (Hugo, Jekyll) to embed live feed snippets without additional server logic.
  4. CI‑Triggered Updates – Use GitHub Actions to rebuild the feed page whenever a new entry appears, ensuring the public site always shows the latest content.

Advantages Over Alternatives

CriterionBubo Reader
PerformanceGenerates a single static file; zero runtime overhead.
FlexibilityPure TS/Node, easy to modify rendering logic or add custom parsers.
LicensingMIT – free for commercial use without copyleft

Open SourceReady to get started?

Join the community and start self-hosting Bubo Reader today

Weekly Views

Loading...
Support Us

Featured Project

$30/month

Get maximum visibility with featured placement and special badges

Repository Health

Loading health data...

Information

Category
other
License
MIT
Stars
219
Technical Specs
Pricing
Open Source
Database
None
Supported OS
LinuxWindowsmacOS
Author
georgemandis
georgemandis
Last Updated
Jan 20, 2025