{"id":13457286,"url":"https://github.com/georgemandis/bubo-rss","last_synced_at":"2025-04-24T04:09:45.746Z","repository":{"id":45760017,"uuid":"224553163","full_name":"georgemandis/bubo-rss","owner":"georgemandis","description":"An irrationally minimalist, static feed reader (RSS, Atom, JSON) you can instantly deploy on Netlify, Glitch or your own server.","archived":false,"fork":false,"pushed_at":"2025-01-20T10:21:35.000Z","size":212,"stargazers_count":203,"open_issues_count":5,"forks_count":56,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-24T04:09:18.167Z","etag":null,"topics":["feed-reader","glitch","json-feed","netlify","rss","rss-reader","static-site"],"latest_commit_sha":null,"homepage":"https://buboreader.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/georgemandis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":"georgemandis","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2019-11-28T02:21:19.000Z","updated_at":"2025-04-10T12:42:49.000Z","dependencies_parsed_at":"2024-04-15T15:34:00.039Z","dependency_job_id":"0ec81427-de88-4029-b907-7ccffe8e4740","html_url":"https://github.com/georgemandis/bubo-rss","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fbubo-rss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fbubo-rss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fbubo-rss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgemandis%2Fbubo-rss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/georgemandis","download_url":"https://codeload.github.com/georgemandis/bubo-rss/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250560053,"owners_count":21450172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feed-reader","glitch","json-feed","netlify","rss","rss-reader","static-site"],"created_at":"2024-07-31T08:01:38.533Z","updated_at":"2025-04-24T04:09:45.729Z","avatar_url":"https://github.com/georgemandis.png","language":"TypeScript","funding_links":["https://github.com/sponsors/georgemandis"],"categories":["TypeScript","Software"],"sub_categories":["Feed Readers"],"readme":"[![Netlify Status](https://api.netlify.com/api/v1/badges/81dd219c-51cb-4418-a18c-42c8b104c689/deploy-status)](https://app.netlify.com/sites/bubo-rss-demo/deploys)\n\n# 🦉 Bubo Reader\n\nBubo Reader is a hyper-minimalist feed reader (RSS, Atom, JSON) you can deploy on your own server, [Netlify](https://netlify.com) in a few steps or [Glitch](https://glitch.com) in even fewer steps! The goal of the project is to generate a webpage that shows a list of links from a collection of feeds organized by category and website. That's it.\n\nIt is named after this [silly robot owl](https://www.youtube.com/watch?v=MYSeCfo9-NI) from Clash of the Titans (1981).\n\nYou can read more about this project on my blog:\n\n- [Introducing Bubo RSS: An Absurdly Minimalist RSS Feed Reader](https://george.mand.is/2019/11/introducing-bubo-rss-an-absurdly-minimalist-rss-feed-reader/).\n- [Publishing Bubos RSS to Netlify with GitHub Actions](https://george.mand.is/2020/02/publishing-bubos-rss-to-netlify-with-github-actions/)\n\n## Get Started\n\n- Clone or fork the repo and run `npm install` to install the dependencies.\n- Update `feeds.json` to include categories and links to feeds you would like to see.\n- Run `npm run build:bubo`\n\nThat's it! You should now have a static page with links to the latest content from your feeds in the `public` folder, ready to serve.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003cstrong\u003eAnatomy of Bubo Reader\u003c/strong\u003e\n  \u003c/summary\u003e\n\nThe static pieces:\n\n- `conf/feeds.json` - a JSON file containing your feed URLS separated into categories.\n- `config/template.html` - a [Nunjucks](https://mozilla.github.io/nunjucks/) template that lets you change how the feeds are displayed. This can be changed to anything else you like— see below.\n- `public/style.css` - a CSS file to stylize your feed output.\n- `public/index.html` - The HTML file that gets automatically generated when Bubo is run.\n\nThe engine:\n\n- `src/index.ts` - The primary script you run when you want to build a new version of Bubo. It will automatically fetch the latest content from your feeds and build a new static file at `public/index.html`.\n- `src/renderer.ts` — The renderer that loads Nunjucks, the template and understands how to process the incoming feed data. Prefer something else? This is the place to change it!\n- `src/utilities.ts` — A variety of parsing and normalization utilities for Bubo, hidden away to try and keep things clean.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003cstrong\u003eThrottling\u003c/strong\u003e\n  \u003c/summary\u003e\n\nIn the main `index.ts` file you will find two values that allow you to batch and throttle your feed requests:\n\n- `MAX_CONNECTIONS` dictates the maximum number of requests a batch can have going at once.\n- `DELAY_MS` dictates the amount of delay time between each batch.\n\nThe default configuration is **no batching or throttling** because `MAX_CONNECTIONS` is set to `Infinity`. If you wanted to change Bubo to only fetch one feed at a time every second you could set these values to:\n\n```javascript\nconst MAX_CONNECTIONS = 1;\nconst DELAY_MS = 1000;\n```\n\nIf you wanted to limit things to 10 simultaneous requests every 2.5 seconds you could set it like so:\n\n```javascript\nconst MAX_CONNECTIONS = 10;\nconst DELAY_MS = 2500;\n```\n\nIn practice, I've never _really_ run into an issue leaving `MAX_CONNECTIONS` set to `Infinity` but this feels like a sensible safeguard to design.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003cstrong\u003eGetting Started\u003c/strong\u003e\n  \u003c/summary\u003e\n\n- [Deploying to Glitch](#glitch)\n- [Deploying to Netlify](#netlify)\n- [Keeping feeds updated](#updated)\n\n\u003ca id=\"glitch\"\u003e\u003c/a\u003e\n\n## Deploying to Glitch\n\nThe quickest way is to remix the project on Glitch:\n[https://glitch.com/edit/#!/bubo-rss](https://glitch.com/edit/#!/bubo-rss)\n\nThere is also a `glitch` branch on this repo if you'd prefer to start there.\n\nJust change some feeds in `./config/feeds.json` file and you're set! If you'd like to modify the style or the template you can changed `./public/style.css` file or the `./config/template.html` file respectively.\n\n\u003ca id=\"netlify\"\u003e\u003c/a\u003e\n\n## Deploying to Netlify\n\n- [Fork the repository](https://github.com/georgemandis/bubo-rss/fork)\n- From your forked repository edit `config/feeds.json` to manage your feeds and categories\n- [Create a new site](https://app.netlify.com/start) on Netlify from GitHub\n\nThe deploy settings should automatically import from the `netlify.toml` file. All you'll need to do is confirm and you're ready to go!\n\n\u003ca id=\"updated\"\u003e\u003c/a\u003e\n\n### Keeping Feeds Updated\n\n#### Using Netlify Webhooks\n\nTo keep your feeds up to date you'll want to [setup a Build Hook](https://www.netlify.com/docs/webhooks/#incoming-webhooks) for your Netlify site and use another service to ping it every so often to trigger a rebuild. I'd suggest looking into:\n\n- [IFTTT](https://ifttt.com/)\n- [Zapier](https://zapier.com/)\n- [EasyCron](https://www.easycron.com/)\n\n#### Rolling Your Own\n\nIf you already have a server running Linux and some command-line experience it might be simpler to setup a [cron job](https://en.wikipedia.org/wiki/Cron).\n\n\u003c/details\u003e\n\n## Demos\n\nYou can view live demos here:\n\n- [https://bubo-rss-demo.netlify.app/](https://bubo-rss-demo.netlify.app/)\n- [http://bubo-rss.glitch.me/](http://bubo-rss.glitch.me/)\n\n## Support\n\nIf you found this useful please consider [sponsoring me or this project](https://github.com/sponsors/georgemandis).\n\nIf you'd rather run this on your own server please consider using one of these affiliate links to setup a micro instance on [Linode](https://www.linode.com/?r=8729957ab02b50a695dcea12a5ca55570979d8b9), [Digital Ocean](https://m.do.co/c/31f58d367777) or [Vultr](https://www.vultr.com/?ref=8403978).\n\n## Showcase\n\nHere are some websites using Bubo Reader:\n\n- [Kevin Fiol](https://kevinfiol.com/reader/) ([repo](https://github.com/kevinfiol/reader))\n\nPlease share if you would like to be featured!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgemandis%2Fbubo-rss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeorgemandis%2Fbubo-rss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgemandis%2Fbubo-rss/lists"}