{"id":15634883,"url":"https://github.com/azu/irodr","last_synced_at":"2025-04-05T13:06:52.401Z","repository":{"id":24435797,"uuid":"101561516","full_name":"azu/irodr","owner":"azu","description":"RSS reader client like LDR for Inoreader.","archived":false,"fork":false,"pushed_at":"2025-04-04T22:17:37.000Z","size":5304,"stargazers_count":131,"open_issues_count":20,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-04T23:22:38.340Z","etag":null,"topics":["browser","inoreader","ldr","rss","viewer"],"latest_commit_sha":null,"homepage":"https://irodr.netlify.app/","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/azu.png","metadata":{"funding":{"github":"azu"},"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-27T15:25:51.000Z","updated_at":"2025-04-04T22:17:40.000Z","dependencies_parsed_at":"2024-04-01T14:25:38.933Z","dependency_job_id":"a229321b-731b-4627-b270-95270c44d2f7","html_url":"https://github.com/azu/irodr","commit_stats":{"total_commits":966,"total_committers":5,"mean_commits":193.2,"dds":0.6180124223602484,"last_synced_commit":"c64d25836c1d0fede7e4ed7bb66623eeecbf20a3"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azu%2Firodr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azu%2Firodr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azu%2Firodr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azu%2Firodr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azu","download_url":"https://codeload.github.com/azu/irodr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247339155,"owners_count":20923014,"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":["browser","inoreader","ldr","rss","viewer"],"created_at":"2024-10-03T10:58:32.901Z","updated_at":"2025-04-05T13:06:52.379Z","avatar_url":"https://github.com/azu.png","language":"TypeScript","funding_links":["https://github.com/sponsors/azu"],"categories":["TypeScript"],"sub_categories":[],"readme":"# Irodr [![Actions Status: test](https://github.com/azu/irodr/workflows/test/badge.svg)](https://github.com/azu/irodr/actions?query=workflow%3A\"test\")\n\nRSS reader client for [Inoreader](http://www.inoreader.com/ \"Inoreader\").\n\nThis RSS reader provide a similar experience to [LDR](http://reader.livedoor.com/). \n\n![Screen Shot](./docs/img/irodr-behavior.gif)\n\n## Purpose\n\n- [x] Fast read RSS like [LDR](http://reader.livedoor.com/)\n    - [x] Prefetch contents\n    - [x] Mark as \"read\" on idle time\n- [x] Keyboard Shortcut\n- [x] Customizable by UserScript\n    - [x] Provide [UserScript API](src/component/container/App/Hidden/UserScript) like `window.getActiveItem`\n\n## Usage\n\n![login gif](./docs/img/login-irodr.gif)\n\n1. Open \u003chttps://irodr.netlify.app/\u003e\n2. Click **Connect to Inoreader**\n3. Click **Authorize** on Inoreader site\n\n### Keyboard Shortcut \n\n- \u003ckbd\u003ej\u003c/kbd\u003e: move-next-content-item\n- \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003ej\u003c/kbd\u003e: load-more-past-contents\n- \u003ckbd\u003et\u003c/kbd\u003e: toggle-content-filter\n- \u003ckbd\u003ek\u003c/kbd\u003e: move-prev-content-item\n- \u003ckbd\u003ea\u003c/kbd\u003e: move-prev-subscription-feed\n- \u003ckbd\u003es\u003c/kbd\u003e: move-next-subscription-feed\n- \u003ckbd\u003em\u003c/kbd\u003e: make-subscription-read\n- \u003ckbd\u003ev\u003c/kbd\u003e: open-current-content-url\n- \u003ckbd\u003ez\u003c/kbd\u003e: toggle-subscription-feed-list\n- \u003ckbd\u003espace\u003c/kbd\u003e: scroll-down-content\n- \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003espace\u003c/kbd\u003e: scroll-up-content\n- \u003ckbd\u003eshift\u003c/kbd\u003e+\u003ckbd\u003es\u003c/kbd\u003e: skip-and-move-next-subscription-feed\n\n### Custom Client Id and Client Secret\n\nIf you want to your Client ID/Secret of inoreader, do following steps:\n\n1. Visit https://www.inoreader.com/\n2. Open \"Preferences\"\n3. Open \"Developer\" tab\n4. Create new App\n    - \"Redirect URL\" is not required\n    - \"Scoped\": Read and Write\n5. Copy Client Id and Client Secret\n\n![Create new App](https://monosnap.com/file/uKYqAHpIjibLkffvfHWXoSys1wVxl7.png)\n\nYou paste the Client ID and secret to Irodr Authorization.\n\n![Irodr Authorization](https://monosnap.com/file/ki0yNr9jfRu9TBHvHxrrLOH78w8JyY.png) \n\n## UserScript API\n\nIrodr provide some UserScript API for UserScript like Greasemonkey.\n \n- `window.addEventListener(\"userscript-init\", (event) =\u003e { /* Initialize UseScript object */ })`\n- `window.userScript.getActiveContent(): UserScriptActiveContent | undefined`\n- `window.userScript.getActiveSubscription(): UserScriptActiveSubscription | undefined`\n- `window.userScript.triggerKey(keys: string, action?: string): void`\n\nFor more details, see [UserScript API document](src/component/container/App/Hidden/UserScript).\nSee also [resources/userScript](./resources/userScript) directory.\n\n## :memo: Notes\n\n- Inoreader doesn't support CORS\n    - Please support CORS :bow:\n    - [x] Comment to [Inoreader Developers - User authentication via OAuth 2.0](http://www.inoreader.com/developers/oauth \"Inoreader Developers - User authentication via OAuth 2.0\")\n- Currently, We need CORS proxy in `package.json`\n    - In other word, require proxy or proxy server\n\n## Development\n\n### Usage\n\nRun following command and open local server.\n\n    npm start\n    # open http://localhost:13245/\n\n\n### :memo: CORS workaround\n\nInoreader doesn't support CORS for API.\nSo, Irodr use CORS proxy for Inoreader API.\n\n#### Production\n\nhttp://irodr.netlify.app/ work on [Netlify](https://www.netlify.com/ \"Netlify\").\nIt uses [Netlify Edge Functions](https://docs.netlify.com/edge-functions/overview/) for CORS proxy.\n\n- [netlify/edge-functions/cors-proxy.ts](./netlify/edge-functions/cors-proxy.ts)\n\nRecommend: You can connect to Inoreader API without CORS proxy via UserScripts.\n\n- [irodr-cros.js](./resources/userScript/irodr-cors.js \"irodr-cros.js\")\n\nAlso, you can use own CORS proxy.\n\n- [irodr-custom-cors-proxy.js](./resources/userScript/irodr-custom-cors-proxy.js)\n\n#### Local server\n\nIn local, you can just run `npm run dev` and open `http://localhost:8888/`.\n\n    npm run dev\n\n### :memo: Limitation of Mixed-content\n\nA browser show a warning  on https://irodr.netlify.app/\nIt is caused by Mixed content.\n\n- [Mixed content - Web security | MDN](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content \"Mixed content - Web security | MDN\")\n\n## Changelog\n\nSee [Releases page](https://github.com/azu/irodr/releases).\n\n## Running tests\n\nInstall devDependencies and Run `npm test`:\n\n    npm test\n\n## Code of Conduct\n\nPlease note that this project is released with a [Contributor Code of Conduct](./CODE_OF_CONDUCT.md).\nBy participating in this project you agree to abide by its terms.\n\n## Contributing\n\nPull requests and stars are always welcome.\n\nFor bugs and feature requests, [please create an issue](https://github.com/azu/irodr/issues).\n\n1. Fork it!\n2. Create your feature branch: `git checkout -b my-new-feature`\n3. Commit your changes: `git commit -am 'Add some feature'`\n4. Push to the branch: `git push origin my-new-feature`\n5. Submit a pull request :D\n\n## Author\n\n- [github/azu](https://github.com/azu)\n- [twitter/azu_re](https://twitter.com/azu_re)\n\n## License\n\nMIT © azu\n\n## OSS Supports\n\n\u003ca href=\"https://www.netlify.com\"\u003e\n  \u003cimg src=\"https://www.netlify.com/img/global/badges/netlify-color-bg.svg\" alt=\"Netlify\"/\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazu%2Firodr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazu%2Firodr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazu%2Firodr/lists"}