{"id":23594362,"url":"https://github.com/bhj/libseymour","last_synced_at":"2026-02-28T04:04:17.315Z","repository":{"id":269775694,"uuid":"908425754","full_name":"bhj/libseymour","owner":"bhj","description":"Interact with RSS/Atom feed aggregators via the Google Reader/GReader API","archived":false,"fork":false,"pushed_at":"2025-09-29T00:22:39.000Z","size":166,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-23T05:44:00.418Z","etag":null,"topics":["no-dependencies","no-deps","rss","rss-aggregator","rss-client","rss-feed","rss-lib","rss-library","rss-reader","typescript","typescript-library","zero-dependencies","zero-dependency"],"latest_commit_sha":null,"homepage":"https://bhj.github.io/libseymour/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bhj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["bhj"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2024-12-26T03:45:05.000Z","updated_at":"2025-09-29T00:22:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"1765c735-9d62-42a4-a140-7e1c299efa49","html_url":"https://github.com/bhj/libseymour","commit_stats":null,"previous_names":["bhj/libseymour"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bhj/libseymour","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhj%2Flibseymour","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhj%2Flibseymour/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhj%2Flibseymour/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhj%2Flibseymour/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bhj","download_url":"https://codeload.github.com/bhj/libseymour/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhj%2Flibseymour/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29924719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["no-dependencies","no-deps","rss","rss-aggregator","rss-client","rss-feed","rss-lib","rss-library","rss-reader","typescript","typescript-library","zero-dependencies","zero-dependency"],"created_at":"2024-12-27T09:17:44.094Z","updated_at":"2026-02-28T04:04:17.310Z","avatar_url":"https://github.com/bhj.png","language":"TypeScript","funding_links":["https://github.com/sponsors/bhj"],"categories":[],"sub_categories":[],"readme":"# libseymour\n\nAlthough Google Reader was discontinued in 2013, its API (also known as the GReader API) remains a de facto standard for interoperability among RSS/Atom feed aggregators and clients.\n\n**libseymour** is a TypeScript library that aims to make interacting with the API easier, document it, and encourage the development of more web-based RSS clients. [See the full documentation](https://bhj.github.io/libseymour/modules.html).\n\n- Abstracts the API to simple promise-based getters and setters\n- Automatically handles POST tokens (used for mutation requests)\n- Automatically converts timestamps contained in strings to numbers\n- Provides inline documentation via TypeScript\n- ESM package with zero dependencies\n\n## Getting Started\n\n ```sh\n $ npm i libseymour\n ```\n\n```ts\n import Reader from 'libseymour'\n \n const api = new Reader({ url: 'https://www.example.com/api/greader' })\n ```\n\n## Documentation\n \n[See the full documentation](https://bhj.github.io/libseymour/modules.html).\n \n## Terminology\n\n- **Feed**: an RSS/Atom URL\n- **Item**: an individual article/post\n- **Stream**: a list of items\n- **Tag**: a generic term used by this library, referring to either:\n  - a user-created tag (typically a \"category\" or \"folder\" when applied to a *feed*, or a \"label\" when applied to an *item*)\n  - a state (`all`, `read`, or `starred`)\n\n## Stream IDs\n\nStreams are lists of *items* based on some criteria, such as items from a particular *feed* or having a specific *tag*. The Google Reader API refers to these using *Stream IDs*, which can take the following forms:\n\n| Stream ID | Description |\n|-----------|-------------|\n| `feed/\u003cfeed url\u003e` | Items belonging to a specific feed, where `\u003cfeed url\u003e` is a full RSS/Atom feed URL. Example: `feed/http://www.example.com/feed` |\n| `user/-/label/\u003cname\u003e` | Items having a specific user-created tag, where `\u003cname\u003e` is the tag’s name. Example: `user/-/label/news`\u003cbr\u003e\u003cbr\u003eWith *feeds*, tags are often referred to as \"categories\" or \"folders\".\u003cbr\u003eWith *items*, tags often correspond to  \"labels\". |\n| `user/-/state/com.google/\u003cstate\u003e` | Items in a specific state. Possible states include `all`, `read`, and `starred`. Example:  `user/-/state/com.google/starred` |\n\n## Aggregators\n\nThese self-hosted RSS/Atom feed aggregators support the GReader/Google Reader API:\n\n- [FreshRSS](https://freshrss.org/)\n- [Miniflux](https://miniflux.app)\n- [Tiny Tiny RSS](https://tt-rss.org)\n\n## Acknowledgements and Further Reading\n\n- Will Honey's [original](https://github.com/willhoney7/Google-Reader-Library) Google Reader Library\n- FreshRSS's [GReader API](https://freshrss.github.io/FreshRSS/en/developers/06_GoogleReader_API.html)\n- The Verge: [Who killed Google Reader?](https://www.theverge.com/23778253/google-reader-death-2013-rss-social)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhj%2Flibseymour","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbhj%2Flibseymour","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhj%2Flibseymour/lists"}