{"id":13425100,"url":"https://github.com/dewey/feedbridge","last_synced_at":"2026-01-12T14:36:10.072Z","repository":{"id":57582036,"uuid":"145039655","full_name":"dewey/feedbridge","owner":"dewey","description":"Plugin based RSS feed generator for sites that don't offer any. Serves RSS, Atom and JSON Feeds. ","archived":false,"fork":false,"pushed_at":"2021-05-12T21:17:49.000Z","size":2493,"stargazers_count":88,"open_issues_count":7,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-15T19:36:57.608Z","etag":null,"topics":["atom-feed","jsonfeed-generator","rss","rss-generator","scraping","webscraping"],"latest_commit_sha":null,"homepage":"https://feedbridge.notmyhostna.me","language":"Go","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/dewey.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}},"created_at":"2018-08-16T21:12:32.000Z","updated_at":"2025-02-05T10:22:02.000Z","dependencies_parsed_at":"2022-09-26T18:51:53.219Z","dependency_job_id":null,"html_url":"https://github.com/dewey/feedbridge","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/dewey/feedbridge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dewey%2Ffeedbridge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dewey%2Ffeedbridge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dewey%2Ffeedbridge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dewey%2Ffeedbridge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dewey","download_url":"https://codeload.github.com/dewey/feedbridge/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dewey%2Ffeedbridge/sbom","scorecard":{"id":338633,"data":{"date":"2025-08-11","repo":{"name":"github.com/dewey/feedbridge","commit":"ee9fbbcc430654770c3ea26fa0bdea49bd044243"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":6,"reason":"4 out of the last 5 releases have a total of 4 signed artifacts.","details":["Warn: release artifact 0.1.16 not signed: https://api.github.com/repos/dewey/feedbridge/releases/42870411","Info: signed release artifact: checksums.txt.sig: https://github.com/dewey/feedbridge/releases/tag/0.1.12","Info: signed release artifact: checksums.txt.sig: https://github.com/dewey/feedbridge/releases/tag/0.1.11","Info: signed release artifact: checksums.txt.sig: https://github.com/dewey/feedbridge/releases/tag/0.1.8","Info: signed release artifact: checksums.txt.sig: https://github.com/dewey/feedbridge/releases/tag/0.1.7","Warn: release artifact 0.1.16 does not have provenance: https://api.github.com/repos/dewey/feedbridge/releases/42870411","Warn: release artifact 0.1.12 does not have provenance: https://api.github.com/repos/dewey/feedbridge/releases/18589433","Warn: release artifact 0.1.11 does not have provenance: https://api.github.com/repos/dewey/feedbridge/releases/18589216","Warn: release artifact 0.1.8 does not have provenance: https://api.github.com/repos/dewey/feedbridge/releases/12683615","Warn: release artifact 0.1.7 does not have provenance: https://api.github.com/repos/dewey/feedbridge/releases/12682605"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:18: pin your Docker image by updating alpine:latest to alpine:latest@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Warn: goCommand not pinned by hash: Dockerfile:12-15","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of   1 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"21 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3770","Warn: Project is vulnerable to: GO-2022-0322 / GHSA-cg3q-j54f-5p7p","Warn: Project is vulnerable to: GO-2022-0236 / GHSA-h86h-8ppg-mxmh","Warn: Project is vulnerable to: GO-2021-0238 / GHSA-83g2-8m93-v3w7","Warn: Project is vulnerable to: GO-2022-0288","Warn: Project is vulnerable to: GO-2022-0969 / GHSA-69cg-p879-7622","Warn: Project is vulnerable to: GO-2022-1144 / GHSA-xrjj-mj9h-534m","Warn: Project is vulnerable to: GO-2023-1571 / GHSA-vvpx-j8f3-3w6h","Warn: Project is vulnerable to: GO-2023-1988 / GHSA-2wrh-6pvc-2jm9","Warn: Project is vulnerable to: GO-2023-2102 / GHSA-4374-p667-p6c8","Warn: Project is vulnerable to: GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2021-0078 / GHSA-5p4h-3377-7w67","Warn: Project is vulnerable to: GO-2022-0193 / GHSA-fcf9-6fv2-fc5v","Warn: Project is vulnerable to: GO-2022-0192 / GHSA-2wp2-chmh-r934","Warn: Project is vulnerable to: GO-2022-0197 / GHSA-4r78-hx75-jjj2 / GHSA-mv93-wvcp-7m7r","Warn: Project is vulnerable to: GO-2020-0014 / GHSA-vfw5-hrgq-h5wf","Warn: Project is vulnerable to: GO-2022-0536 / GHSA-39qc-96h7-956f / GHSA-hgr8-6h9x-f7q9"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T05:16:59.732Z","repository_id":57582036,"created_at":"2025-08-18T05:16:59.732Z","updated_at":"2025-08-18T05:16:59.732Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["atom-feed","jsonfeed-generator","rss","rss-generator","scraping","webscraping"],"created_at":"2024-07-31T00:01:04.638Z","updated_at":"2026-01-12T14:36:10.042Z","avatar_url":"https://github.com/dewey.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003cimg src=\"https://i.imgur.com/0j5LG0t.png\" alt=\"feedbridge gopher\" width=\"100\"\u003e\n\n# Feedbridge\n\n[![Build Status](https://travis-ci.com/dewey/feedbridge.svg?branch=master)](https://travis-ci.com/dewey/feedbridge)\n[![GoDoc](https://godoc.org/github.com/dewey/feedbridge?status.svg)](https://godoc.org/github.com/dewey/feedbridge) \n[![Go Report Card](https://goreportcard.com/badge/github.com/dewey/feedbridge)](https://goreportcard.com/report/github.com/dewey/feedbridge)\n[![Maintainability](https://api.codeclimate.com/v1/badges/50d72195e5d1f42d21b1/maintainability)](https://codeclimate.com/github/dewey/feedbridge/maintainability)\n[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/dewey/feedbridge/LICENSE)\n[![Badges](https://img.shields.io/badge/badges-all%20of%20them-brightgreen.svg)](https://github.com/dewey/feedbridge)\n\nIs a tool (Hosted version / Demo: [feedbridge.notmyhostna.me](https://feedbridge.notmyhostna.me)) to provide RSS feeds for sites that don't have one, or only offer a feed of headlines. For each site—or kind of site—you want to generate a feed for you'll have to implement a plugin with a custom scraping strategy. Feedbridge doesn't persist old items so if it's not on the site you are scraping any more it won't be in the feed. Pretty similar to how most feeds these days work that only have the latest items in there. It publishes Atom, RSS 2.0, and JSON Feed Version 1 conform feeds.\n\nThere are a bunch of web apps doing something similar, some of them you can even drag and drop selectors to create a feed. That didn't work well for the site I was trying it for so I decided to built this. (Also it was fun doing so).\n\n## API\n\n**GET /feed/list**\n\nReturns a list of available plugins.\n\n**GET /feed/{plugin}/{format}**\n\nReturns the feed based on a given plugin and output format. That's the URL you should use in your feed reader.\n\n- `plugin`: The name of the plugin as returned by `String()`\n- `format`: The format the feed should be returned in, can be `rss`, `atom` or `json`. By default it's RSS.\n\n**POST /feed/{plugin}/refresh** (_Authentication required_)\n\nRoute to trigger a refresh for a given plugins, this runs a single scrape of the given plugin. \n\n**GET /metrics**\n\nReturns the exported Prometheus metrics.\n\n**API Authentication**\n\nIs done through a query parameter (`auth_token`), it's configured via the `API_TOKEN` environment variable.\n\n## Configuration and Operation\n\n### Environment\n\nThe following environment variables are available, they all have sensible defaults and don't need to be set explicity.\n\n- `REFRESH_INTERVAL`: The interval in which feeds get rescraped in minutes (Default: 15)\n- `API_TOKEN`: A user defined token that is used to protect sensitive API routes (Default: `changeme`)\n- `ENVIRONMENT`: Environment can be `prod` or `develop`. `develop` sets the loglevel to `info` (Default: `develop`)\n- `PORT`: Port that Feedbridge is running on (Default: `8080`)\n\nThere are two available storage backends right now. An in-memory and a disk backed implementation. Depending on which one you choose\nthere are additional options you can set.\n\n- `STORAGE_BACKEND`: Set to `memory` to keep everything in-memory or `persistent` to persist the cache to disk. (Default: `memory`)\n\n**In Memory**\n\n- `CACHE_EXPIRATION`: The expiration time of the cache in minutes (Default: 30)\n- `CACHE_EXPIRED_PURGE`: The interval at which the expired cache elements will be purged in minutes (Default: 60)\n\n**Persistent**\n\n- `STORAGE_PATH`: Set the storage location of the cache on disk. (Default: `./feedbridge-data`)\n\n\n### Run with Docker\n\nYou can change all these options in the included docker-compose files and use `docker-compose -f docker-compose.yml up -d` to run the project. There are\ntwo sample docker compose files that already have the settings for the two available backends set.\n\n### Monitoring\n\nAs the project already exports Prometheus metrics you can use Grafana to get more information about how many things are being scraped and how fast requests are served. You can import the included `grafana-dashboard.json` in Grafana.\n\n## Status\n\nThis is a work in progress and pretty rough right now. The API might change and things get moved around.\n\n## Acknowledgements \u0026 Credits\n\nIt's using the neat [gorilla/feeds](https://github.com/gorilla/feeds) library to generate standard conform Atom, RSS 2.0 and JSON Feeds. The Gopher was sourced from [github.com/egonelbre](https://github.com/egonelbre/gophers), the RSS icon is coming from Wikipedia and was added by me. Thanks!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdewey%2Ffeedbridge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdewey%2Ffeedbridge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdewey%2Ffeedbridge/lists"}