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.jsonis the sole configuration file. It maps categories to arrays of feed URLs, allowing developers to organize feeds hierarchically. - Build Pipeline:
src/index.tsorchestrates feed fetching, parsing (via built‑in DOMParser for XML/JSON), and rendering. The output is a singlepublic/index.htmlfile 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_CONNECTIONSandDELAY_MSinindex.tsto respect upstream rate limits or reduce CI build times. This is useful when aggregating dozens of feeds from slow sources. - Extensible Renderer:
renderer.tsexposes 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:bubolocally and serve thepublic/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.jsonchanges. 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.tsmodule 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.tsexplain 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
- Personal Aggregator – A developer can build a lightweight, self‑hosted RSS dashboard to stay updated on niche blogs without third‑party services.
- Corporate Knowledge Base – Teams can aggregate internal documentation feeds (e.g., Confluence RSS) into a single static page served on an intranet.
- Static Site Enhancements – Integrate Bubo into a larger static site generator (Hugo, Jekyll) to embed live feed snippets without additional server logic.
- 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
| Criterion | Bubo Reader |
|---|---|
| Performance | Generates a single static file; zero runtime overhead. |
| Flexibility | Pure TS/Node, easy to modify rendering logic or add custom parsers. |
| Licensing | MIT – free for commercial use without copyleft |
Open SourceReady to get started?
Join the community and start self-hosting Bubo Reader today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Explore More Apps
Indico
Web‑based event and conference management platform
Donetick
Collaborative task & chore manager with smart scheduling
ghstats
Self-hosted data-analysis
wger
Free, self-hosted workout and nutrition manager
Iodine
DNS‑based IPv4 tunneling for firewalled networks
WeTTY
Web terminal access over HTTP/HTTPS