{"id":13598968,"url":"https://github.com/ymgyt/syndicationd","last_synced_at":"2025-07-19T04:37:03.183Z","repository":{"id":215380773,"uuid":"737900907","full_name":"ymgyt/syndicationd","owner":"ymgyt","description":"A TUI Feed Viewer","archived":false,"fork":false,"pushed_at":"2025-07-06T22:29:28.000Z","size":220813,"stargazers_count":125,"open_issues_count":10,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-08T23:17:38.794Z","etag":null,"topics":["github-notifications","ratatui","rss","tui"],"latest_commit_sha":null,"homepage":"https://docs.syndicationd.ymgyt.io","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ymgyt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-01-01T22:38:00.000Z","updated_at":"2025-06-22T13:28:57.000Z","dependencies_parsed_at":"2024-01-06T12:53:18.476Z","dependency_job_id":"a91eac7c-e5f5-4d42-a679-ed09d9ac1697","html_url":"https://github.com/ymgyt/syndicationd","commit_stats":null,"previous_names":["ymgyt/syndicationd"],"tags_count":69,"template":false,"template_full_name":null,"purl":"pkg:github/ymgyt/syndicationd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymgyt%2Fsyndicationd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymgyt%2Fsyndicationd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymgyt%2Fsyndicationd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymgyt%2Fsyndicationd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ymgyt","download_url":"https://codeload.github.com/ymgyt/syndicationd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymgyt%2Fsyndicationd/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265889163,"owners_count":23844539,"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":["github-notifications","ratatui","rss","tui"],"created_at":"2024-08-01T17:00:58.579Z","updated_at":"2025-07-19T04:37:03.164Z","avatar_url":"https://github.com/ymgyt.png","language":"Rust","funding_links":[],"categories":["💻 Apps"],"sub_categories":["🚀 Productivity and Utilities"],"readme":"\u003cdiv class=\"oranda-hide\"\u003e\n\n# Syndicationd\n\n\u003c/div\u003e\n\n[![CI][workflow-ci-badge]][workflow-ci-url]\n[![Release][workflow-release-badge]][workflow-release-url]\n[![Audit][workflow-audit-badge]][workflow-audit-url]\n\n[![Coverage][coverage-badge]][coverage-url]\n\n[crates-badge]: https://img.shields.io/crates/v/synd-term?style=for-the-badge\u0026logo=rust\n[crates-url]: https://crates.io/crates/synd-term\n[license-badge]: https://img.shields.io/badge/license-MIT%2FApache--2.0-blue?style=for-the-badge\n[workflow-ci-badge]: https://img.shields.io/github/actions/workflow/status/ymgyt/syndicationd/ci.yaml?style=for-the-badge\u0026logo=github\u0026label=CI\n[workflow-ci-url]: https://github.com/ymgyt/syndicationd/actions/workflows/ci.yaml\n[workflow-release-badge]: https://img.shields.io/github/actions/workflow/status/ymgyt/syndicationd/release.yml?style=for-the-badge\u0026logo=github\u0026label=Release\n[workflow-release-url]: https://github.com/ymgyt/syndicationd/actions/workflows/release.yml\n[workflow-audit-badge]: https://img.shields.io/github/actions/workflow/status/ymgyt/syndicationd/audit.yaml?style=for-the-badge\u0026logo=github\u0026label=Audit\n[workflow-audit-url]: https://github.com/ymgyt/syndicationd/actions/workflows/audit.yaml\n[coverage-badge]: https://img.shields.io/codecov/c/github/ymgyt/syndicationd?token=W1A93WSPEE\u0026style=for-the-badge\u0026logo=codecov\u0026color=brightgreen\n[coverage-url]: https://app.codecov.io/github/ymgyt/syndicationd\n[grafana-badge]: https://img.shields.io/badge/Grafana-Dashboard-orange?style=for-the-badge\u0026logo=grafana\n[grafana-url]: https://ymgyt.grafana.net/public-dashboards/863ebddd82c44ddd9a28a68eaac848ff?orgId=1\u0026refresh=1h\u0026from=now-1h\u0026to=now\n\n![Demo](https://raw.githubusercontent.com/ymgyt/syndicationd/main/etc/demo/demo.gif)\n\nSyndicationd is a project for simple feed management on the terminal, and the following components are beging developed\n\n* synd-term(`synd`): A TUI feed viewer based on [ratatui](https://github.com/ratatui-org/ratatui)\n* synd-api: A GraphQL api server utilizing [feed-rs](https://github.com/feed-rs/feed-rs) \n\n**Table of Contents:**\n\n- [Features](#features)\n- [Installation](#installation)\n- [Overview](#overview)\n- [Configuration](#configuration)\n- [Usage](#usage)\n  - [Authentication](#authentication)\n  - [Keymap](#keymap)\n  - [Subscribe Feed](#subscribe-feed)\n  - [Open Feed Entry](#open-feed-entry)\n  - [Export Feeds](#export-subscribed-feeds)\n  - [Import Feeds](#import-feeds)\n  - [GitHub Notifications](#github-notifications)\n  - [Theme](#theme)\n  - [Backend API](#backend-api)\n  - [Log](#log)\n  - [Clean](#remove-cache-and-logs)\n- [Development](#development)\n- [Project Goals](#project-goals)\n- [License](#license)\n\n## Features\n\n* Subscribe RSS/Atom feeds\n  * Open feed entries in your preferred text or web browser\n  * Filter feed entries based on category, keyword, and importance\n* Handle [GitHub notifications](https://github.com/notifications) (optional)\n  * Unsubscribe or Done a notification from the terminal\n  * Filter notifications based on reason, repository, and status\n* OpenTelemetry compatible\n  * Export traces, metrics, and logs using OTLP\n  * A Grafana dashboard is provided\n\n## Installation\n\n### nix\n\n```sh\nnix profile install github:ymgyt/syndicationd/synd-term-v0.3.2\n```\n\n### arch linux\n\n```sh\npacman -S syndicationd\n```\n\n### brew\n\n```sh\nbrew install ymgyt/homebrew-syndicationd/synd-term\n```\n\n### shell\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/ymgyt/syndicationd/releases/download/synd-term-v0.3.2\n```\n\n### cargo\n\n```sh\ncargo install synd-term --locked\n```\n\n### npm\n\n```sh\nnpm install @syndicationd/synd-term\n```\n\n### powershell\n\n```sh\npowershell -c \"irm https://github.com/ymgyt/syndicationd/releases/download/synd-term-v0.3.2\n```\n\n### docker\n\n```sh\ndocker run -it ghcr.io/ymgyt/synd-term\n```\n\n### pre-build binaries\n\nPre-built binaries are available in [GitHub releases](https://github.com/ymgyt/syndicationd/releases).\n\n\n### source\n\n```sh\ncargo install --git https://github.com/ymgyt/syndicationd/ synd-term\n```\n\n\u003e [!NOTE]\n\u003e `synd` requires [Nerd Fonts](https://www.nerdfonts.com/) to be installed on your system for rendering icons.\n\n## Overview\n\n![Overview](https://raw.githubusercontent.com/ymgyt/syndicationd/main/etc/dot/dist/overview.svg)\n\nThe subscribed feeds are stored in synd-api. synd-api periodically fetches the feeds to retrieve the latest entries.  \nWhen the user views the feed list in synd, it retrieves the latest entries from synd-api's cache.   \nThis project hosts the synd-api, but it can also be self-hosted.\n\n## Configuration\n\nSettings can be configured in the following ways(in order of priority)\n\n* Command line flag\n* Environment variables\n* Configuration file\n* Default value\n\nThe location of the configuration file can be specified using `--config` or the environment variable `SYND_CONFIG_FILE`.  \nBy default, `synd` will search the following locations depending on the platform\n\n| Platform | Locations |\n| ---      | ---       |\n| Linux    | `$XDG_CONFIG_HOME/syndicationd/config.toml`\u003cbr\u003e`$HOME/.config/syndicationd/config.toml` |\n| macOS    | `$HOME/Library/Application Support/syndicationd/config.toml` |\n|Windows   | `{FOLDERID_RoamingAppData}/syndicationd/config.toml` |\n\n`synd` does not automatically create configuration files.  \nWhen creating a configuration file, you can use the following command\n\n```sh\nsynd config init \u003e config.toml\n``` \n\n### Settings\n\n| Flag               | Environment variable     | Configuration file       | Default                             | Description                                         |\n|--------------------|--------------------------|--------------------------|-------------------------------------|-----------------------------------------------------|\n| `--config`         | `SYND_CONFIG_FILE`       | \\-                       | see [configuration](#configuration) | Configuration file path                             |\n| `--log`            | `SYND_LOG_FILE`          | `[log.path]`             | see `synd check`                    | Log file path                                       |\n| `--cache-dir`      | `SYND_CACHE_DIR`         | `[cache.directory]`      | see `synd check`                    | Cache directory                                     |\n| `--theme`          | `SYND_THEME`             | `[theme.name]`           | `ferra`                             | Theme name                                          |\n| `--endpoint`       | `SYND_ENDPOINT`          | `[api.endpoint]`         | `https://api.syndicationd.ymgyt.io` | synd-api endpoint                                   |\n| `--client-timeout` | `SYND_CLIENT_TIMEOUT`    | `[api.timeout]`          | `30s`                               | synd-api client timeout                             |\n| `--entries-limit`  | `SYND_ENTRIES_LIMIT`     | `[feed.entries_limit]`   | `200`                               | Feed entreis to fetch                               |\n| `--browser`        | `SYND_FEED_BROWSER`      | `[feed.browser.command]` | \\-                                  | Command to browse feed                              |\n| `--browser-args`   | `SYND_FEED_BROWSER_ARGS` | `[feed.browser.args]`    | `[]`                                | Command args to browse feed                         |\n| `--enable-gh`      | `SYND_ENABLE_GH`         | `[github.enable]`        | `false`                             | Enable github notification feature                  |\n| `--github-pat`     | `SYND_GH_PAT`            | `[github.pat]`           | \\-                                  | Github personal access token to fetch notifications |\n\n### Additional categories\n\nTo add a category , add the following content to the configuration file\n\n```toml\n[categories.rust]\nicon = { symbol = \"🦀\", color = { rgb = 0xF74C00 } }\naliases = [\"rs\"]\n```\n\n## Usage\n\n`synd` will start the TUI application.\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to show a complete list of options\u003c/summary\u003e\n\n```sh\nUsage: \n\nCommands:\n  clean   Clean cache and logs\n  check   Check application conditions\n  export  Export subscribed feeds\n  import  Import subscribed feeds\n  config  Manage configurations\n  help    Print this message or the help of the given subcommand(s)\n\nOptions:\n  -c, --config \u003cCONFIG\u003e        Configuration file path [env: SYND_CONFIG_FILE=]\n      --log \u003cLOG\u003e              Log file path [env: SYND_LOG_FILE=]\n      --cache-dir \u003cCACHE_DIR\u003e  Cache directory [env: SYND_CACHE_DIR=]\n      --theme \u003cTHEME\u003e          Color theme [env: SYND_THEME=] [possible values: ferra, solarized-dark, helix]\n  -h, --help                   Print help\n  -V, --version                Print version\n\nApi options:\n      --endpoint \u003cENDPOINT\u003e              `synd_api` endpoint [env: SYND_ENDPOINT=]\n      --client-timeout \u003cCLIENT_TIMEOUT\u003e  Client timeout(ex. 30s) [env: SYND_CLIENT_TIMEOUT=]\n\nFeed options:\n      --entries-limit \u003cENTRIES_LIMIT\u003e  Feed entries limit to fetch [env: SYND_ENTRIES_LIMIT=]\n      --browser \u003cBROWSER\u003e              Browser command to open feed entry [env: SYND_BROWSER=]\n      --browser-args \u003cBROWSER_ARGS\u003e    Args for launching the browser command [env: SYND_BROWSER_ARGS=]\n\nGitHub options:\n  -G, --enable-github-notification \u003cENABLE_GITHUB_NOTIFICATION\u003e\n          Enable GitHub notification feature [env: SYND_ENABLE_GH=] [aliases: enable-gh] [possible values: true, false]\n      --github-pat \u003cGITHUB_PAT\u003e\n          GitHub personal access token to fetch notifications [env: SYND_GH_PAT]\n\n```\n\n\u003c/details\u003e\n\n### Authentication\n\n![Authentication overview](https://raw.githubusercontent.com/ymgyt/syndicationd/main/etc/dot/dist/authentication.svg)\n\nSyndicationd maintains state (such as subscribed feeds) on the backend, and therefore requires authentication to make requests.  \nCurrently, GitHub and Google are supported as authorize server/id provider.   \nThe only scope required by syndicationd to authenticate users is the email address. please refer to the table below for details on the scopes for each provider.    \n\n| IdP/AuthServer | Scope                                                                                                            |\n| ---            | ---                                                                                                              |\n| GitHub         | [`user:email`](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps)             |\n| Google         | [`email`](https://developers.google.com/identity/gsi/web/guides/devices#obtain_a_user_code_and_verification_url) | \n\n\u003e [!IMPORTANT]\n\u003e **The user's email address is used only as an identifier after being hashed and never stored**.   \n\nfor more info, please refer to the [privacy policy](https://docs.syndicationd.ymgyt.io/synd-term/book/privacy_policy.html)  \n\nIf you'd like support for additional ID providers, please feel free to request it.\n\n### Keymap\n\n| Key     | Description                                   |\n| ---     | ---                                           |\n| `k/j`   | Move up/down                                  |\n| `gg`    | Go to first                                   |\n| `ge`    | Go to end                                     |\n| `Tab`   | Switch Tab                                    |\n| `Enter` | Open entry/feed with web browser              |\n| `Space` | Open entry with text browser(`$SYND_BROWSER`) |    \n| `a`     | Add feed subscription(on Feeds Tab)           |\n| `e`     | Edit subscribed feed(on Feeds Tab)            |\n| `d`     | Delete subscribed feed(on Feeds Tab)          |\n| `r`     | Reload entries/feeds                          |\n| `h/l`   | Change requirement filiter                    |\n| `c`     | Activate category filiter(Esc to deactivate)  |\n| `+`     | Activate all category(on Category filter)     |\n| `-`     | Deactivate all category(on Category filter)   |\n| `/`     | Activate keyword search(Esc to deactivate)    |\n| `q`     | Quit app                                      |\n\n#### GitHub Notification\n\n| Key     | Description                                   |\n| ---     | ---                                           |\n| `d`     | Mark as done                                  |\n| `D`     | Mark all as done                              |\n| `u`     | Unsubscribe                                   |\n| `f`     | Open notification filter(Esc to apply)        |\n\nfor more details, refer to [`keymap/default.rs`](https://github.com/ymgyt/syndicationd/blob/main/crates/synd_term/src/keymap/default.rs)\n\n### Subscribe feed\n\nTo subscribe a feed, type \"Tab\" to move to Feeds tab and then press \"a\".  \n`synd` uses [edit](https://docs.rs/edit/latest/edit/) to launch the user's editor(like a git commit).  \nThe feed to subscribe to should be entered in the format:  \n`Requirement` `Category` `URL`  \n\nWhen you close the editor, the subscription request is sent to the API.\n\n#### Requirement\n\n`Requirement` indicates the importance of the feed.  \nThis uses an analogy to [RFC2119](https://datatracker.ietf.org/doc/html/rfc2119) and can take one of the following values:\n\n* `MUST`: Most important, must be read.\n* `SHOULD`: Next in importance, should be read unless there is a special reason not to.\n* `MAY`: Lowest importance, may be read.\n\n#### Category\n\n`Category` represents the category of the feed. You can specify any value as a category. The values that `synd` recognizes as categories are defined in [`categories.toml`](./categories.toml). Default values and additional categories can be added from the configuration file.\n\n\n### Edit subscribed feed\n\nTo change the requirement or category of a feed you have already subscribed to, select the target feed in the Feeds tab and then press \"e\".\n\n### Unsubscribe feed\n\nTo unsubscribe from a feed, select the target feed and press \"d\".\n\n### Filter feeds/entries\n\nFeeds and entries can be filtered as follows.\n\n#### By requirement\n\nTo filter bases on the specified requirement, press \"h/l(Left/Right)\".  \nIf you set the filter to `MUST`, only those marked as MUST will be displayed. Setting it to SHOULD will display feeds and entries marked as MUST and SHOULD. If set to MAY, all feeds and entries will be displayed.\n\n#### By categories\n\nTo filter bases on categories, presess \"c\". This will display a label with keys to control the activation/deactivation of each category, allowing you to toggle the visibility of categories.  \nPressing \"-\" will deactivate all categories, and pressing \"+\" will activate all categories.  \n\nYou can exit the filter category mode by pressing the \"Esc\" key.  \nThe icons for categories can be specified in `categories.toml`\n\n### Open feed entry\n\nTo open a feed entry in a web browser, select the entry and press Enter.   \nTo view the entry in a text browser within the terminal, press the Space.   \nThe command that is triggered by pressing the Space can be specified using the `$SYND_BROWSER` environment variable, or through related flags or configuration files.   \nThe command is executed as `$SYND_BROWSER $SYND_BROWSER_ARGS \u003centry url\u003e`.\n\n### Export subscribed feeds\n\nTo export subscribed feeds, execute the `synd export` command.  \nYou can check the JSON schema of the data to be exported with `synd export --print-schema`\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to show a export json schema\u003c/summary\u003e\n\n```json\n{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Export\",\n  \"type\": \"object\",\n  \"required\": [\n    \"feeds\"\n  ],\n  \"properties\": {\n    \"feeds\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"$ref\": \"#/definitions/ExportedFeed\"\n      }\n    }\n  },\n  \"definitions\": {\n    \"ExportedFeed\": {\n      \"type\": \"object\",\n      \"required\": [\n        \"url\"\n      ],\n      \"properties\": {\n        \"title\": {\n          \"type\": [\n            \"string\",\n            \"null\"\n          ]\n        },\n        \"url\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n```\n\u003c/details\u003e\n\n### Import feeds\n\nYou can subscribe to multiple feeds at once using the `synd import` command.  \nThe input schema is the same as that of `synd export`. You can also check it with `synd import --print-schema`.  \n\n```sh\n# from stdin\necho '{\"feeds\": [ {\"url\": \"https://this-week-in-rust.org/atom.xml\", \"category\": \"rust\", \"requirement\": \"Must\" } ]}' \n| synd import -\n\n# read from file\nsynd export \u003e feeds.json\nsynd import feeds.json\n```\n\n### GitHub Notifications\n\n\u003cimg alt=\"github notification screent shot\" src=\"https://raw.githubusercontent.com/ymgyt/syndicationd/main/etc/demo/ss/github_notification_ss.png\" width=\"425\"/\u003e \n\nTo enable GitHub notifications feature, specify the `--enable-github-notification | -G` flag or set the environment variable `SYND_ENABLE_GH=true`.  \nWhen enabling the GitHub notifications feature, GitHub personal access token (PAT) is required. Specify the PAT using the `--github-pat` flag or the environment variable `SYND_GH_PAT`.  \n\n\u003e [!TIP]\n\u003e For GitHub notifications, unlike feeds, the synd-api is not used.\n\n#### PAT Scope\n\n##### Classic token\n\nThe `repo` scope is required. For more details, see [about github notifications](https://docs.github.com/en/rest/activity/notifications?apiVersion=2022-11-28#about-github-notifications).\n\n##### Fine grained access token\n\n\"Metadata\" repository permissions (read) and \"Notifications\" user permissions (read) are required.  \nFor more details, see [list notifications for the authenticated user](https://docs.github.com/en/rest/activity/notifications?apiVersion=2022-11-28#list-notifications-for-the-authenticated-user).  \nSince the Mark notification as done API does not support fine grained access token, classic token is required to use this feature.  \n\n\n### Log \n\nThe default log file path is based on [`ProjectDirs::data_dir()`](https://docs.rs/directories/latest/directories/struct.ProjectDirs.html#method.data_dir).  \nPlease refer to the `synd check` command for the output destination.  \n\nYou can modify the [log directives](https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives) using the environment variable `SYND_LOG`. (for example, `SYND_LOG=synd=debug`)\n\n### Theme\n\nThe theme can be changed using the `--theme` flag. Please refer to the help for the values that can be specified.\n\n### Backend api\n\nBy default, `synd` use `https://api.syndicationd.ymgyt.io` as the [backend api](./crates/synd_api)([hosted on my home Raspberry Pi](https://github.com/ymgyt/mynix/blob/main/homeserver/modules/syndicationd/default.nix)).  \nTo change the endpoint, specify the `--endpoint` flag\n\nThe hosted api is instrumented with OpenTelemetry. Basic signals(traces,metrics,logs) are published on the public [Grafana dashboard][grafana-url]  \nDashboards are managed with [terraform](https://github.com/ymgyt/syndicationd/tree/main/hosting/terraform/grafana)\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to show a public dashboard image\u003c/summary\u003e\n  \u003cimg alt=\"grafana dashboard\" src=\"https://raw.githubusercontent.com/ymgyt/syndicationd/main/etc/demo/grafana-dashboard.png\"\u003e\n\u003c/details\u003e\n\n### Remove cache and logs\n\nAuthentication credentials are cached. to remove them, execute `synd clean`.\n\n### Check application status\n\n`synd check [--format (human|json)]` return current application status.\n\n```sh\nsynd check\n\n Api Health: pass\nApi Version: 0.2.4\n     Config: /home/ferris/.config/syndicationd/config.toml\n      Cache: /home/ferris/.cache/syndicationd\n        Log: /home/ferris/.local/share/syndicationd/synd.log\n```\n\n```sh\n# open log file\nsynd check --format json | from json | get log | bat $in\n```\n\n## Development\n\nPlease refer to [CONTRIBUTING.md](/CONTRIBUTING.md) to get started with development.\n\n## Project Goals\n\n* **A terminal-first, self-hostable feed service**. Create a simple, self-hostable feed service for terminal users that does not involve curation, recommendations, or user behavior analysis.\n\n* **Longevity**. Maintain this project for as long as possible, with a minimum maintenance period of at least 5 years.\n\n\n## License\n\nThis project is available under the terms of either the [Apache 2.0 license](./LICENSE-APACHE) or the [MIT license](./LICENSE-MIT).\n\n## Feed tips\n\nSome tips about feed that I know.\n\n* Add [`openrss.org/`](https://openrss.org/) to the beginning of the URL to get its RSS feed. for example, for `https://example.ymgyt.io`, it would be `https://openrss.org/example.ymgyt.io`\n\n* You can retrieve various updates as feeds on GitHub.\n  * To obtain releases of a repository, specify `releases.atom`. for example, to obtain releases of syndicationd, specify `https://github.com/ymgyt/syndicationd/releases.atom`\n  * For tags, it's `https://github.com/ymgyt/syndicationd/tag.atom` \n\n* crates.io have introduced a couple of experimental [RSS feeds](https://blog.rust-lang.org/2024/07/29/crates-io-development-update.html#rss-feeds)\n\n* Adding `.rss` to the end of a Reddit URL allows you to retrieve the feed. for example, for `https://www.reddit.com/r/HelixEditor/`, it would be `https://www.reddit.com/r/HelixEditor.rss`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fymgyt%2Fsyndicationd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fymgyt%2Fsyndicationd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fymgyt%2Fsyndicationd/lists"}