A keyboard-driven reader for Inoreader and GitHub Notifications.
Irodr provides a similar experience to LDR: feeds with unread items are listed on the left,
s/a move between feeds, j/k move between items, and a feed is marked read when you leave it.
- Fast reading like LDR
- Prefetches the next feeds, so moving to them is instant
- Marks a feed read when you move to another one, through the newest item you have loaded
- Keyboard shortcuts for everything
- Sources side by side: Inoreader feeds and GitHub notifications (grouped by repository) in one list
- Customizable by user scripts through
window.userScript
- Open https://irodr.netlify.app/
- Sources opens automatically. Click Connect to Inoreader
- Click Authorize on the Inoreader site
In Sources, enter a classic GitHub personal access token with the notifications scope and click Connect GitHub.
Sources links to GitHub's token form with the scopes already selected.
Unread notifications of every type are grouped by repository under GitHub Notifications.
Moving to another feed marks the departed repository's notifications read on GitHub, through the newest loaded notification.
Shift+S skips without marking read, and m marks the current feed read without moving.
Inoreader login is not required.
The token and cached notifications are stored unencrypted in this browser. See Source adapters for details, storage and limitations.
| Key | Action |
|---|---|
| j / k | Next / previous item |
| s / a | Next / previous feed (leaving a feed marks it read) |
| Shift+s | Skip to the next feed without marking the current one |
| m | Mark the current feed read |
| Shift+j | Show all items and load older ones |
| t | Toggle unread / all items |
| v | Open the current item in a new tab |
| z | Collapse / expand all categories |
| Space / Shift+Space | Scroll down / up |
| Shift+t | Toggle translate mode (English → Japanese) |
| Shift+h | Print read items of this session to the console |
Shortcuts use the physical key, so they also work with non-Latin keyboard layouts. Translate mode uses the browser's Translator API. In other browsers, install irodr-translate.user.js to translate with Google Translate (see Translation). Irodr supports current browsers: features that are Baseline Widely available. Preferences saved by irodr 1.x are carried over on the first start.
To use your own Inoreader app:
- Visit https://www.inoreader.com/ and open Preferences → Developer
- Create a new app with the Read and Write scope (a redirect URL is not required)
- In irodr's Sources, open Use your own Inoreader app, enter its Client ID and Client Secret, and click Connect to Inoreader
Irodr provides an API for user scripts such as Greasemonkey scripts:
window.addEventListener("userscript-init", (event) => { /* window.userScript is ready */ })window.userScript.getActiveContent()window.userScript.getActiveSubscription()window.userScript.triggerKey(keys)/window.userScript.registerKey(keys, handler)window.userScript.event.subscribe("SubscriptionContent::componentDidMount", handler)
See the User Script API document and resources/userScript.
Inoreader's API does not allow CORS, so irodr sends Inoreader requests through a proxy.
- Production (https://irodr.netlify.app/): a Netlify Edge Function at
/cors-proxy/ - Development: the Vite dev server proxies the same path (see
vite.config.ts) - Without a proxy: install irodr-cors.js, or use your own proxy with irodr-custom-cors-proxy.js
GitHub's API allows CORS and is called directly.
Irodr is a client-side React application built with Vite+ (vp),
React with React Compiler, and StyleX.
pnpm install # or: vp install
pnpm run dev # http://localhost:8888/
pnpm run check # vp check: format (Oxfmt), lint (Oxlint) and type check
pnpm run fix # vp check --fix
pnpm test # vp test: unit tests (Vitest)
pnpm run test:e2e # integration tests (Playwright) against fake Inoreader and GitHub APIs
pnpm run build # production build into dist/The pre-commit hook (.vite-hooks/pre-commit) formats and lints staged files and runs the unit tests.
It is installed by pnpm install (vp config).
- Architecture: layers, and how to add a new source
- Source adapters: Inoreader and GitHub Notifications behavior
- AGENTS.md: conventions for coding agents
See Releases page.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Pull requests and stars are always welcome.
For bugs and feature requests, please create an issue.
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature - Commit your changes:
git commit -am 'Add some feature' - Push to the branch:
git push origin my-new-feature - Submit a pull request :D
MIT © azu

