{"id":23647867,"url":"https://github.com/rdk31/newsfrwdr","last_synced_at":"2025-08-31T23:32:21.090Z","repository":{"id":51567276,"uuid":"414244368","full_name":"rdk31/newsfrwdr","owner":"rdk31","description":"A RSS forwarder","archived":false,"fork":false,"pushed_at":"2023-10-08T21:55:15.000Z","size":420,"stargazers_count":9,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2023-10-08T22:29:36.481Z","etag":null,"topics":["forwarding","rss","rust","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/rdk31.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2021-10-06T14:25:53.000Z","updated_at":"2024-04-23T12:57:13.584Z","dependencies_parsed_at":"2024-04-23T12:57:05.113Z","dependency_job_id":"4e5c573a-03e4-4601-a5ec-31c7fe1f64d2","html_url":"https://github.com/rdk31/newsfrwdr","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdk31%2Fnewsfrwdr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdk31%2Fnewsfrwdr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdk31%2Fnewsfrwdr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdk31%2Fnewsfrwdr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rdk31","download_url":"https://codeload.github.com/rdk31/newsfrwdr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231639040,"owners_count":18404265,"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":["forwarding","rss","rust","self-hosted"],"created_at":"2024-12-28T14:49:03.060Z","updated_at":"2024-12-28T14:49:03.710Z","avatar_url":"https://github.com/rdk31.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# newsfrwdr\n\nChecks inputs for new entries and forwards them to outputs (based on name/tag). For now, the only inputs it supports are rss feeds.\n\nInspired by: [rss-forwarder](https://github.com/morphy2k/rss-forwarder)\n\n## Supported outputs\n\n- [x] custom command\n- [x] discord webhook\n- [x] discord bot\n- [x] slack webhook\n- [ ] telegram bot\n\n## Usage\n\n### Docker\n\n- `docker run -d -v \"/path/to/config.toml:/config/config.toml\" ghcr.io/rdk31/newsfrwdr:master`\n\n### Command line\n\n```\nUsage: newsfrwdr [OPTIONS]\n\nOptional arguments:\n  -h, --help           print help message\n  -c, --config CONFIG  alternative path to config.toml\n```\n\n## Configuration\n\n### Example configuration:\n\n```toml\n[inputs.rust-blog]\nurl = \"https://blog.rust-lang.org/feed.xml\"\n\n[inputs.github-blog]\nurl = \"https://github.blog/all.atom\"\ntags = [\"it\"]\n\n[[outputs.default]]   # default output\ntype = \"discord_webhook\"\nurl = \"https://discord.com/api/webhooks/abcd...\"\n\n[[outputs.rust-blog]] # name output\ntype = \"discord_bot\"\ntoken = \"token\"\nuser_id = 123456789\n\n[[outputs.it]]        # tag output\ntype = \"discord_webhook\"\nurl = \"https://discord.com/api/webhooks/ijkl...\"\n\n[[outputs.it]]        # forward the same tag to another channel\ntype = \"custom\"\ncommand = \"notify-send\"\n\n[[outputs.github-blog]]\ntype = \"slack\"\nurl = \"https://hooks.slack.com/services/...\"\n```\n\n### Inputs\n\n| Field         |   Type   | Required |   Default   | Description            |\n| ------------- | :------: | :------: | :---------: | ---------------------- |\n| key           |  string  |   yes    |      -      | input name             |\n| `url`         |  string  |   yes    |      -      | url to the feed        |\n| `interval`    |  string  |    no    |    \"30m\"    | feed refresh interval  |\n| `retry_limit` |   int    |    no    |     10      | feed fetch retry limit |\n| `tags`        | [string] |    no    | [\"default\"] | array of tags          |\n\n### Outputs\n\n#### `discord_webhook` type\n\n| Field  |  Type  | Required | Default | Description                  |\n| ------ | :----: | :------: | :-----: | ---------------------------- |\n| key    | string |   yes    |    -    | input name or tag to forward |\n| `type` | string |   yes    |    -    | output type                  |\n| `url`  | string |   yes    |    -    | discord webhook url          |\n\n#### `discord_bot` type\n\n| Field     |  Type  | Required | Default | Description                  |\n| --------- | :----: | :------: | :-----: | ---------------------------- |\n| key       | string |   yes    |    -    | input name or tag to forward |\n| `type`    | string |   yes    |    -    | output type                  |\n| `token`   | string |   yes    |    -    | discord bot token            |\n| `user_id` |  u64   |   yes    |    -    | user id to push entries to   |\n\n#### `slack` type\n\n| Field  |  Type  | Required | Default | Description                  |\n| ------ | :----: | :------: | :-----: | ---------------------------- |\n| key    | string |   yes    |    -    | input name or tag to forward |\n| `type` | string |   yes    |    -    | output type                  |\n| `url`  | string |   yes    |    -    | slack webhook url            |\n\n#### `custom` type\n\nSerializes entries to this json structure:\n\n```json\n{\n  \"title\": \"title\",\n  \"description\": \"description\",\n  \"author\": \"null or string\",\n  \"url\": \"url\",\n  \"timestamp\": \"ISO 8601 string\"\n}\n```\n\n| Field       |   Type   | Required | Default | Description                                                                                |\n| ----------- | :------: | :------: | :-----: | ------------------------------------------------------------------------------------------ |\n| key         |  string  |   yes    |    -    | input name or tag to forward                                                               |\n| `type`      |  string  |   yes    |    -    | output type                                                                                |\n| `command`   |  string  |   yes    |    -    | command to run                                                                             |\n| `arguments` | [string] |    no    |   []    | command arguments                                                                          |\n| `use_stdin` |   bool   |    no    |  false  | - false - add the message to the arguments array \u003cbr /\u003e - true - push the message to stdin |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdk31%2Fnewsfrwdr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frdk31%2Fnewsfrwdr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdk31%2Fnewsfrwdr/lists"}