{"id":15636223,"url":"https://github.com/passy/rss-markdown-proxy","last_synced_at":"2025-08-11T07:08:09.958Z","repository":{"id":66088580,"uuid":"47708710","full_name":"passy/rss-markdown-proxy","owner":"passy","description":"A reverse proxy for rendering Markdown within RSS feeds","archived":false,"fork":false,"pushed_at":"2019-07-04T14:53:28.000Z","size":43,"stargazers_count":18,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-30T05:34:01.240Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/passy.png","metadata":{"files":{"readme":"README.markdown","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,"publiccode":null,"codemeta":null}},"created_at":"2015-12-09T17:51:54.000Z","updated_at":"2023-08-05T02:21:32.000Z","dependencies_parsed_at":"2023-02-22T06:00:42.773Z","dependency_job_id":null,"html_url":"https://github.com/passy/rss-markdown-proxy","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/passy/rss-markdown-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Frss-markdown-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Frss-markdown-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Frss-markdown-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Frss-markdown-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/passy","download_url":"https://codeload.github.com/passy/rss-markdown-proxy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Frss-markdown-proxy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269844098,"owners_count":24484132,"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","status":"online","status_checked_at":"2025-08-11T02:00:10.019Z","response_time":75,"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":[],"created_at":"2024-10-03T11:01:59.321Z","updated_at":"2025-08-11T07:08:09.912Z","avatar_url":"https://github.com/passy.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rss-markdown-proxy\n[![Build Status](https://travis-ci.org/passy/rss-markdown-proxy.svg)](https://travis-ci.org/passy/rss-markdown-proxy)\n\n\u003e A reverse proxy rendering Markdown to HTML within RSS feeds for podcast\n\u003e shownotes.\n\n## Why?\n\nAs my co-host [@monchote](https://github.com/monchote) on\n[Strictly Untyped](https://twitter.com/strictlyuntyped) has found out,\nSoundCloud does not allow embedding HTML in their RSS feeds because\nspammers could take advantage of this. This is, however, pretty crap\nif you want to use it for show notes and embed some links.\n\nThis is a simple reverse proxy you can pipe any RSS feed through\nto render the `\u003cdescription\u003e` and `\u003citunes:summary\u003e` fields to HTML, allowing\nyou to author them in Markdown.\n\n## Setup\n\n```\n$ git clone http://github.com/passy/rss-markdown-proxy\n$ cd rss-markdown-proxy\n$ stack setup\n$ stack install\n```\n\n## Usage\n\nThis package comes with two binaries: `rss-markdown-proxy` and\n`rss-markdown-proxy-server`. The former is a stand-alone CLI tool version\nof the latter.\n\n### `rss-markdown-proxy-server`\n\nThis starts a web server for a given URL and serves the transformed feed at\n`/feed.rss`. Responses are cached for 5 minutes. Open an issue if you believe\nthat this should be configurable. It binds to \"0.0.0.0\". Again, open an issue or\nPR if that bothers you.\n\nExample usage:\n\n```bash\n$ rss-markdown-proxy-server -p 3000 \"https://feeds.soundcloud.com/users/soundcloud:users:189413584/sounds.rss\"\n$ curl http://localhost:3000/\n```\n\n### `rss-markdown-proxy`\n\nThis tool can be used to transform local or remote feeds one-off or as part\nos a scheduled job.\n\nLocal file:\n\n```bash\n# From the filesystem\n$ rss-markdown-proxy test/fixtures/sounds.rss\n# From STDIN\n$ rss-markdown-proxy \u003c test/fixtures/sounds.rss\n# From URL\n$ rss-markdown-proxy -u \"https://feeds.soundcloud.com/users/soundcloud:users:189413584/sounds.rss\"\n```\n\n## Metrics\n\nLike stats? So do I! If you compile with the `metrics` flag, you get a built-in\nmetrics server. Only with `rss-markdown-proxy-server`, though, as it doesn't\nmake a whole lot of sense for short-lived programs.\n\n```\n$ stack build --flag=rss-markdown-proxy:metrics\n```\n\nThe metrics server runs on port 3001 by default but you can change it through\nthe `--metrics-port` / `-m` flags. The server binds to localhost and you\nprobably don't want to expose this directly to the internet. Either\nreverse-proxy it with some authentication or SSH tunnel to it.\n\n## Security Considerations\n\nThe proxy is built to only serve a single URL. You could easily change it\nto proxy arbitrary RSS feeds, but I strongly advise against that setup.\nXML is a horrible mess and a lot of the code runs in IO. I have no idea\nwhether or not this is vulnerable to the\n[Billion laughs](https://en.wikipedia.org/wiki/Billion_laughs) attack\nso I'd rather be safe then sorry by limiting this to trusted sources.\n\n## Dockerizificationism :whale:\n\nIf you want to use Docker to deploy this somewhere, here are some steps\nwhich might be useful. You need a recent version of Docker that supports\nthe `ARG` command if you want to build an image yourself. There\nare (semi-)automatic builds available on\n[Docker Hub](https://hub.docker.com/r/passy/rss-markdown-proxy/).\n\n*Run image*\n\n```\ndocker pull rss-markdown-proxy:v0.2.0.0\ndocker run --rm -p 3000:3000 rss-markdown-proxy:v0.2.0.0 \"https://feeds.soundcloud.com/users/soundcloud:users:189413584/sounds.rss\"\n```\n\n*Build a new image*\n\n```\ndocker build --build-arg version=$(git describe --tags --always) -t rss-markdown-proxy .\n```\n\n*Release an image*\n\nCheck the version that's spat out above.\n\n```\ndocker tag \u003cimage_id\u003e passy/rss-markdown-proxy:\u003cversion_tag\u003e\ndocker push passy/rss-markdown-proxy:\u003cversion_tag\u003e\n```\n\n## Example\n\nInput snippet:\n\n```xml\n\u003citunes:summary\u003eFor their first real episode, Ramón and Passy talk about some of the latest news in tech and address the elephant in the room: Android vs iOS from a DX (Developer Experience) perspective.\n\n## Follow-Up\n\n* Talking about podcasts on podcasts: https://overcast.fm/+EtBoIE-HU/7:21\n\n## Other Topics\n\n* Apple open sourcing Swift: https://github.com/apple/swift\n* Dropbox shutting down Mailbox + Carousel: https://blogs.dropbox.com/dropbox/2015/12/saying-goodbye-to-carousel-and-mailbox/\n* Apple's new gorgeous iPhone battery case: http://www.apple.com/shop/product/MGQM2LL/A/iphone-6s-smart-battery-case-white\n* Apple May Replace 3.5mm Headphone Jack on iPhone 7 With All-in-One Lightning Connector: http://www.macrumors.com/2015/11/27/iphone-7-no-3-5mm-headphone-jack-lightning/\n* Google Play Store will soon display if an app contains ads: http://www.techtimes.com/articles/108538/20151120/google-play-store-will-soon-warn-users-if-apps-have-ads.htm\n\n## Links\n\n* Android Needs A Simulator by Jake Wharton: http://jakewharton.com/android-needs-a-simulator/\n\n## About\n\n* Ramón Argüello: https://twitter.com/monchote\n* Pascal Hartig: https://twitter.com/passy\n* Strictly Untyped: https://twitter.com/strictlyuntyped\n\u003c/itunes:summary\u003e\n```\n\nOutput snippet:\n\n```xml\n\u003citunes:summary\u003e\n  \u003c![CDATA[\n  \u003cp\u003eFor their first real episode, Ramón and Passy talk about some of the latest\n  news in tech and address the elephant in the room: Android vs iOS from a DX\n  (Developer Experience) perspective.\u003c/p\u003e \u003ch2\u003eFollow-Up\u003c/h2\u003e \u003cul\u003e \u003cli\u003e\n  \u003cp\u003eTalking about podcasts on podcasts: https://overcast.fm/+EtBoIE-HU/7:21\u003c/p\u003e\n  \u003c/li\u003e \u003c/ul\u003e\u003ch2\u003eOther Topics\u003c/h2\u003e\u003cul\u003e\u003cli\u003eApple open sourcing Swift:\n  https://github.com/apple/swift\u003c/li\u003e\u003cli\u003eDropbox shutting down Mailbox +\n  Carousel:\n  https://blogs.dropbox.com/dropbox/2015/12/saying-goodbye-to-carousel-and-mailbox/\u003c/li\u003e\u003cli\u003eApple's\n  new gorgeous iPhone battery case:\n  http://www.apple.com/shop/product/MGQM2LL/A/iphone-6s-smart-battery-case-white\u003c/li\u003e\u003cli\u003eApple\n  May Replace 3.5mm Headphone Jack on iPhone 7 With All-in-One Lightning\n  Connector:\n  http://www.macrumors.com/2015/11/27/iphone-7-no-3-5mm-headphone-jack-lightning/\u003c/li\u003e\u003cli\u003eGoogle\n  Play Store will soon display if an app contains ads:\n  http://www.techtimes.com/articles/108538/20151120/google-play-store-will-soon-warn-users-if-apps-have-ads.htm\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003eLinks\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eAndroid\n  Needs A Simulator by Jake Wharton:\n  http://jakewharton.com/android-needs-a-simulator/\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2\u003eAbout\u003c/h2\u003e\u003cul\u003e\u003cli\u003eRamón\n  Argüello: https://twitter.com/monchote\u003c/li\u003e\u003cli\u003ePascal Hartig:\n  https://twitter.com/passy\u003c/li\u003e\u003cli\u003eStrictly Untyped:\n  https://twitter.com/strictlyuntyped\u003c/li\u003e\u003c/ul\u003e]]\u003e\n\u003c/itunes:summary\u003e\n```\n\n## License\n\nBSD-3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassy%2Frss-markdown-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpassy%2Frss-markdown-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassy%2Frss-markdown-proxy/lists"}