{"id":22547073,"url":"https://github.com/kiwilan/feedrender","last_synced_at":"2025-10-15T14:18:48.392Z","repository":{"id":190396750,"uuid":"682473940","full_name":"kiwilan/feedrender","owner":"kiwilan","description":"API to render HTML from RSS feed. Built for podcast feeds, powered by unjs/h3.","archived":false,"fork":false,"pushed_at":"2025-01-27T20:32:08.000Z","size":399,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-27T21:34:28.210Z","etag":null,"topics":["feed","h3","podcast","renderer","rss","typescript"],"latest_commit_sha":null,"homepage":"https://feedrender.kiwilan.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kiwilan.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},"funding":{"github":"kiwilan"}},"created_at":"2023-08-24T08:46:52.000Z","updated_at":"2025-01-27T20:32:05.000Z","dependencies_parsed_at":"2023-11-20T13:44:45.645Z","dependency_job_id":"7c8a5c61-f0b0-4268-a5f1-bf94969c19a8","html_url":"https://github.com/kiwilan/feedrender","commit_stats":null,"previous_names":["kiwilan/feed-renderer","kiwilan/feedrender"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiwilan%2Ffeedrender","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiwilan%2Ffeedrender/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiwilan%2Ffeedrender/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiwilan%2Ffeedrender/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiwilan","download_url":"https://codeload.github.com/kiwilan/feedrender/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245999597,"owners_count":20707568,"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":["feed","h3","podcast","renderer","rss","typescript"],"created_at":"2024-12-07T15:10:01.004Z","updated_at":"2025-10-15T14:18:48.387Z","avatar_url":"https://github.com/kiwilan.png","language":"TypeScript","funding_links":["https://github.com/sponsors/kiwilan"],"categories":[],"sub_categories":[],"readme":"# Feedrender\n\n![Banner with microphone picture in background and Feedrender title](https://raw.githubusercontent.com/kiwilan/feedrender/main/docs/banner.jpg)\n\n[![version][version-src]][version-href]\n[![h3][h3-version-src]][h3-version-href]\n[![node][node-version-src]][node-version-href]\n[![Codecov][codecov-src]][codecov-href]\n[![License][license-src]][license-href]\n[![tests][tests-src]][tests-href]\n\nAPI to render HTML from RSS feed. Built for podcast feeds, powered by [unjs/h3][h3-version-href].\n\n## About\n\nSome podcast services offer a RSS feed with HTML render if RSS feed is requested from a browser. These services (Acast, Ausha) are not open source and not free. This project is an attempt to create an open source alternative.\n\n## Features\n\n- 🌻 Render RSS feed as HTML on `/api/render` endpoint\n  - 🔧 Option to return XML feed\n  - 🗂️ Option to return JSON response with HTML as string\n  - ✅ If crawler is not a browser, return original XML feed\n- 🗄️ Return a JSON response with RSS feed parsed as objects on `/api/json` endpoint\n- 🗒️ Return a XML response with RSS feed on `/api/xml` endpoint\n\n### Roadmap\n\n- [x] Render RSS feed\n- [ ] Add option for apple podcast banner\n- [ ] Add color customization\n- [ ] Add feeds options for subscribe button\n- [ ] Add registering and token\n- [ ] Add cache\n- [ ] Better error handling\n- [ ] Add tests\n- [ ] Better locale support\n- [ ] Add CORS support\n\n## Docker\n\nYou can use `docker compose` to run the application.\n\nCreate `.env` file\n\n```bash\ncp .env.example .env\n```\n\n- `PORT`: internal port of the container (default `3000`)\n- `HOST`: host of the application\n- `HTTPS`: false (`true` or `false`)\n- `ENV`: environment (`development`, `production`, `test`)\n- `APP_PORT`: external port of the container (default `3000`)\n\nDocker compose will use the `.env` file to set environment variables.\n\n```bash\ndocker compose down\ndocker compose up --build -d\n```\n\n## Usage\n\nFeedrender API offers some endpoints to execute different tasks.\n\n### Render\n\nTo render RSS feed, you can use the `/render` endpoint.\n\n```bash\n/api/render\n```\n\nDefault behavior is to return HTML as page. You can use query parameters to change the response.\n\nQuery parameters\n\n| Name     | Required | Type           | Default     | Description                                                                                             |\n| -------- | -------- | -------------- | ----------- | ------------------------------------------------------------------------------------------------------- |\n| `url`    | true     | `string`       | `undefined` | URL of RSS feed, allow base64 URL                                                                       |\n| `format` | false    | `html`, `json` | `html`      | Type of response, default `html` will render HTML page, `json` will give JSON response with HTML string |\n\n\u003e [!WARNING]\\\n\u003e If crawler is not a browser, response will be original XML feed.\n\nExample: \u003chttps://feedrender.kiwilan.app/api/render?url=http://zqsd.fr/zqsd.xml\u003e\n\n### JSON\n\nTo parse RSS feed, you can use the `/json` endpoint.\n\n```bash\n/api/json\n```\n\nReturn a JSON response with `Podcast` object represent RSS feed.\n\nQuery parameters\n\n| Name  | Required | Type     | Default     | Description                       |\n| ----- | -------- | -------- | ----------- | --------------------------------- |\n| `url` | true     | `string` | `undefined` | URL of RSS feed, allow base64 URL |\n\nExample: \u003chttps://feedrender.kiwilan.app/api/json?url=http://zqsd.fr/zqsd.xml\u003e\n\n### XML\n\nTo parse show XML from RSS feed, you can use the `/xml` endpoint.\n\n\u003e [!NOTE]\\\n\u003e Could be useful for RSS feed with only HTML render.\n\n```bash\n/api/xml\n```\n\nReturn a JSON response with `Podcast` object represent RSS feed.\n\nQuery parameters\n\n| Name  | Required | Type     | Default     | Description                       |\n| ----- | -------- | -------- | ----------- | --------------------------------- |\n| `url` | true     | `string` | `undefined` | URL of RSS feed, allow base64 URL |\n\nExample: \u003chttps://feedrender.kiwilan.app/api/xml?url=http://zqsd.fr/zqsd.xml\u003e\n\n## Tests\n\nRun tests\n\n```bash\npnpm test\n```\n\n## Credits\n\n- [`unjs`](https://github.com/unjs): for `unjs/h3` and `unjs/ofetch`\n- [`fast-xml-parser`](https://github.com/NaturalIntelligence/fast-xml-parser): for XML parsing\n- [`vue`](https://github.com/vuejs/core): for render functions used to render HTML\n\n## License\n\n[BSD 2-Clause](LICENSE)\n\n[version-src]: https://img.shields.io/badge/dynamic/json?label=version\u0026query=version\u0026url=https://raw.githubusercontent.com/kiwilan/feedrender/main/package.json\u0026colorA=18181B\u0026colorB=F0DB4F\n[version-href]: https://github.com/kiwilan/feedrender/releases\n\n[h3-version-src]: https://img.shields.io/badge/dynamic/json?label=h3\u0026query=dependencies['h3']\u0026url=https://raw.githubusercontent.com/kiwilan/feedrender/main/package.json\u0026colorA=18181B\u0026colorB=F0DB4F\n[h3-version-href]: https://github.com/unjs/h3\n[codecov-src]: https://img.shields.io/codecov/c/gh/kiwilan/feedrender/main?style=flat\u0026colorA=18181B\u0026colorB=F0DB4F\n[codecov-href]: https://codecov.io/gh/kiwilan/feedrender\n[license-src]: https://img.shields.io/github/license/kiwilan/feedrender.svg?style=flat\u0026colorA=18181B\u0026colorB=F0DB4F\n[license-href]: https://github.com/kiwilan/feedrender/blob/main/LICENSE\n[node-version-src]: https://img.shields.io/static/v1?label=Node.js\u0026message=v16\u0026style=flat\u0026colorA=18181B\u0026colorB=F0DB4F\n[node-version-href]: https://nodejs.org/en/\n[tests-src]: https://img.shields.io/github/actions/workflow/status/kiwilan/feedrender/run-tests.yml?branch=main\u0026label=tests\u0026style=flat\u0026colorA=18181B\n[tests-href]: https://github.com/kiwilan/feedrender/actions/workflows/run-tests.yml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiwilan%2Ffeedrender","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiwilan%2Ffeedrender","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiwilan%2Ffeedrender/lists"}