[{"url":"https://api.github.com/repos/sparckles/Robyn/releases/344431271","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/344431271/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/344431271/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.88.0","id":344431271,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Uh5qn","tag_name":"v0.88.0","target_commitish":"main","name":"v0.88.0 - sessions, binary websockets & templating ergonomics","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-06-25T01:00:26Z","updated_at":"2026-06-25T01:01:15Z","published_at":"2026-06-25T01:01:15Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.88.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.88.0","body":"## Highlights\n\n- **First-party sessions** — signed-cookie sessions via `request.session` (#945, #1411)\n- **Binary WebSocket frames** — binary frames are forwarded to your message handler (#1148, #1416)\n- **`render()` templating shortcut** — render a local `templates/` folder without constructing `JinjaTemplate` by hand; engine-agnostic with Jinja2 as the default (#1223, #1418)\n- **Hot reload fixed for module launches** — `python -m ...` now relaunches correctly on file changes (#654, #1417)\n- **Batch of quick-win fixes** (#1415) — resolves #1099, #1147, #1273, #495, #470, #1192\n- **Docs** — single-page cheatsheet (#1062, #1414) and a bilingual (EN/ZH) templating refresh\n- **CI** — lint no longer builds the Rust extension (#1413)\n\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.87.0...v0.88.0"},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/342433479","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/342433479/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/342433479/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.87.0","id":342433479,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4UaR7H","tag_name":"v0.87.0","target_commitish":"main","name":"v0.87.0 - sub-routers, middleware chains & binary streaming","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-06-21T01:13:48Z","updated_at":"2026-06-21T01:14:15Z","published_at":"2026-06-21T01:14:15Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.87.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.87.0","body":"Sub-routers grow up, middleware can be chained, and streaming handles binary + async data correctly.\n\n## ✨ Features\n\n- **Modern SubRouter syntax** with nested-prefix fixes and cleanups (#1404)\n- **Async `authenticate()`** and automatic **SubRouter auth-handler inheritance** — sub-routers can configure their own auth or inherit the parent app's (#1407)\n- **Multiple middlewares per route** (middleware chains) (#1405)\n- **Consolidated OpenAPI/Swagger** fixes with **per-route documentation flags** (#1403)\n\n## 🐛 Fixes\n\n- **`StreamingResponse` now supports `bytes`** (binary downloads / `application/octet-stream`) and **async DB access inside generators**; generator errors now propagate to the logs instead of silently truncating the stream (#1412 — closes #1236, #1219)\n- Cast bare `before_request` returns and handle **OPTIONS under static mounts** (#1409 — fixes #793, #1130)\n\n## 📚 Docs\n\n- Document **catch-all / wildcard (`*path`) routes** (#1410)\n\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.86.0...v0.87.0\n","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/342433479/reactions","total_count":3,"+1":0,"-1":0,"laugh":0,"hooray":3,"confused":0,"heart":0,"rocket":0,"eyes":0}},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/340335957","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/340335957/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/340335957/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.86.0","id":340335957,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4USR1V","tag_name":"v0.86.0","target_commitish":"main","name":"v0.86.0 - smoother request & response ergonomics","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-06-16T20:08:13Z","updated_at":"2026-06-16T20:09:04Z","published_at":"2026-06-16T18:30:10Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.86.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.86.0","body":"A round of quality-of-life fixes and FastAPI-parity papercuts, consolidated in #1399.\n\n## Fixes & features\n- **`request.json()` now parses both `str` and `bytes` bodies** — previously a bytes body raised a raw error (#1335)\n- **Path-param warning no longer fires** when handlers read params via `request` / `request.path_params` (#1336)\n- **`Response(body=...)` alias** for the confusingly-named `description=` — both work, and `headers` is now optional (#1337)\n- **New request type aliases** `RequestMethod`, `RequestBody`, `RequestURL`, importable from `robyn` and `robyn.types` (#1077)\n\n## Docs\n- Documented the new type aliases and the `Response` `body=` alias (English + 中文)\n\nBig thanks to @ahmadmahmoody, whose fixes were consolidated (with authorship preserved) into this release. 🙏\n\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.85.0...v0.86.0\n","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/340335957/reactions","total_count":4,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":4,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/315485118","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/315485118/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/315485118/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.85.0","id":315485118,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Szeu-","tag_name":"v0.85.0","target_commitish":"main","name":"v0.85.0 - make robyn even faster in json payloads","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-04-26T14:46:44Z","updated_at":"2026-04-29T22:20:32Z","published_at":"2026-04-29T22:20:32Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.85.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.85.0","body":"## What's Changed\r\n* fix: share contextvars Context across before/handler/after hooks (#1380) by @sansyrox in https://github.com/sparckles/Robyn/pull/1382\r\n* fix: improve OpenAPI schema generation for complex types by @sansyrox in https://github.com/sparckles/Robyn/pull/1377\r\n* perf: skip Python Response wrapping for bare dict/list/str/bytes returns by @sansyrox in https://github.com/sparckles/Robyn/pull/1384\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.83.0...v0.84.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/315485118/reactions","total_count":7,"+1":7,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/308578734","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/308578734/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/308578734/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.83.0","id":308578734,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4SZImu","tag_name":"v0.83.0","target_commitish":"main","name":"v0.83.0 - introduce testing client","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-04-12T22:31:25Z","updated_at":"2026-04-13T22:30:36Z","published_at":"2026-04-13T22:30:36Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.83.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.83.0","body":"## What's Changed\r\n* docs: add dedicated static files page and fix file-uploads SEO by @sansyrox in https://github.com/sparckles/Robyn/pull/1358\r\n* docs: add comprehensive response return styles reference by @sansyrox in https://github.com/sparckles/Robyn/pull/1357\r\n* feat: forward WebSocket binary frames to Python message handler by @sansyrox in https://github.com/sparckles/Robyn/pull/1353\r\n* fix: replace panicking unwrap() calls with proper error handling in WebSocket code by @sansyrox in https://github.com/sparckles/Robyn/pull/1352\r\n* perf: avoid unnecessary response body clone in IntoPyObject by @sansyrox in https://github.com/sparckles/Robyn/pull/1351\r\n* fix(website): reduce excessive GitHub API requests from docs site by @sansyrox in https://github.com/sparckles/Robyn/pull/1360\r\n* fix(ci): remove Python 3.14 from linux-cross preview matrix by @sansyrox in https://github.com/sparckles/Robyn/pull/1362\r\n* fix: replace unused pydantic import with importlib.util.find_spec by @sansyrox in https://github.com/sparckles/Robyn/pull/1343\r\n* feat: add in-process TestClient for fast unit testing by @sansyrox in https://github.com/sparckles/Robyn/pull/1344\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.82.1...v0.83.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/308578734/reactions","total_count":4,"+1":4,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/302707192","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/302707192/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/302707192/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.82.1","id":302707192,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4SCvH4","tag_name":"v0.82.1","target_commitish":"main","name":"v0.82.1 - fix cors regression","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-03-27T00:24:50Z","updated_at":"2026-03-28T15:57:12Z","published_at":"2026-03-28T15:57:12Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.82.1","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.82.1","body":"## What's Changed\r\n* feat: speed up CI with caching, reduced matrix, and path filters by @sansyrox in https://github.com/sparckles/Robyn/pull/1338\r\n* feat(website): comprehensive SEO overhaul and blog scaffold by @sansyrox in https://github.com/sparckles/Robyn/pull/1340\r\n* fix: enable default autoescape for Jinja2 templates by @RinZ27 in https://github.com/sparckles/Robyn/pull/1321\r\n* chore: add Granian attribution to asyncio.rs by @sansyrox in https://github.com/sparckles/Robyn/pull/1342\r\n* fix: prevent CORS header duplication on middleware early-return responses by @sansyrox in https://github.com/sparckles/Robyn/pull/1347\r\n\r\n## New Contributors\r\n* @RinZ27 made their first contribution in https://github.com/sparckles/Robyn/pull/1321\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.82.0...v0.82.1","mentions_count":2},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/299777315","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/299777315/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/299777315/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.82.0","id":299777315,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4R3j0j","tag_name":"v0.82.0","target_commitish":"main","name":"v0.82.0 - make robyn 200% faster","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-03-21T01:32:23Z","updated_at":"2026-03-21T17:48:43Z","published_at":"2026-03-21T17:48:43Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.82.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.82.0","body":"## What's Changed\r\n* feat: make robyn 200% faster by @sansyrox in https://github.com/sparckles/Robyn/pull/1282\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.81.0...v0.82.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/299777315/reactions","total_count":4,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":4,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/296887464","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/296887464/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/296887464/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.81.0","id":296887464,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4RsiSo","tag_name":"v0.81.0","target_commitish":"main","name":"v0.81.0 - integrate pydantic","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-03-13T19:06:44Z","updated_at":"2026-03-13T21:42:32Z","published_at":"2026-03-13T21:42:32Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.81.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.81.0","body":"## What's Changed\r\n* feat: integrate pydantic by @sansyrox in https://github.com/sparckles/Robyn/pull/1325\r\n* fix: replace deprecated logger.warn(), use ValueError, fix docs syntax error (#1162) by @mango766 in https://github.com/sparckles/Robyn/pull/1329\r\n\r\n## New Contributors\r\n* @mango766 made their first contribution in https://github.com/sparckles/Robyn/pull/1329\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.80.0...v0.81.0","mentions_count":2},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/293739882","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/293739882/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/293739882/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.80.0","id":293739882,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Rgh1q","tag_name":"v0.80.0","target_commitish":"main","name":"v0.80.0 - easy access query params and deprecate old websockets","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-03-05T20:56:03Z","updated_at":"2026-03-06T00:21:48Z","published_at":"2026-03-06T00:21:48Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.80.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.80.0","body":"## What's Changed\r\n* fix: update next-mdx-remote to v6.0.0 to address CVE-2026-0969 by @sansyrox in https://github.com/sparckles/Robyn/pull/1312\r\n* fix: one final json handling bug by @sansyrox in https://github.com/sparckles/Robyn/pull/1313\r\n* chore: update critical dependencies by @sansyrox in https://github.com/sparckles/Robyn/pull/1310\r\n* chore: update README with an updated list of features by @sansyrox in https://github.com/sparckles/Robyn/pull/1316\r\n* feat: add JsonBody param for parsed JSON in callbacks and OpenAPI docs (#1095) by @sansyrox in https://github.com/sparckles/Robyn/pull/1311\r\n* feat(websocket): make max payload configurable via env/robyn.env and document usage by @sansyrox in https://github.com/sparckles/Robyn/pull/1318\r\n* feat: deprecate old websockets by @sansyrox in https://github.com/sparckles/Robyn/pull/1320\r\n* feat: add easy access query/path params with type coercion for HTTP and WebSocket handlers by @sansyrox in https://github.com/sparckles/Robyn/pull/1309\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.78.0...v0.80.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/293739882/reactions","total_count":4,"+1":4,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/289065446","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/289065446/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/289065446/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.79.0","id":289065446,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4ROsnm","tag_name":"v0.79.0","target_commitish":"main","name":"v0.79.0 - websocket bugs and json handling","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-02-22T00:23:49Z","updated_at":"2026-02-22T00:26:32Z","published_at":"2026-02-22T00:26:32Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.79.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.79.0","body":"## What's Changed\r\n* fix: update next-mdx-remote to v6.0.0 to address CVE-2026-0969 by @sansyrox in https://github.com/sparckles/Robyn/pull/1312\r\n* fix: one final json handling bug by @sansyrox in https://github.com/sparckles/Robyn/pull/1313\r\n* chore: update critical dependencies by @sansyrox in https://github.com/sparckles/Robyn/pull/1310\r\n* chore: update README with an updated list of features by @sansyrox in https://github.com/sparckles/Robyn/pull/1316\r\n* feat: add JsonBody param for parsed JSON in callbacks and OpenAPI docs (#1095) by @sansyrox in https://github.com/sparckles/Robyn/pull/1311\r\n* feat(websocket): make max payload configurable via env/robyn.env and document usage by @sansyrox in https://github.com/sparckles/Robyn/pull/1318\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.78.0...v0.79.0","mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/286402304","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/286402304/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/286402304/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.78.0","id":286402304,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4REicA","tag_name":"v0.78.0","target_commitish":"main","name":"v0.78.0 - implement a new @app.websocket syntax and some minor bug fixes","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-02-15T06:42:59Z","updated_at":"2026-02-15T06:57:06Z","published_at":"2026-02-15T06:57:06Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.78.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.78.0","body":"## What's Changed\r\n* fix: correct openapi path parameter generation for nested routes by @Taufik041 in https://github.com/sparckles/Robyn/pull/1272\r\n* docs: remove typed vs untyped distinction by @sansyrox in https://github.com/sparckles/Robyn/pull/1305\r\n* feat: add missing default headers by @sansyrox in https://github.com/sparckles/Robyn/pull/1306\r\n* fix: websockets by @sansyrox in https://github.com/sparckles/Robyn/pull/1303\r\n\r\n## New Contributors\r\n* @Taufik041 made their first contribution in https://github.com/sparckles/Robyn/pull/1272\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.77.0...v0.78.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/286402304/reactions","total_count":3,"+1":3,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":2},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/283955082","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/283955082/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/283955082/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.77.0","id":283955082,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Q7M-K","tag_name":"v0.77.0","target_commitish":"main","name":"v0.77.0 - fix json serialization and sse response","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-02-06T22:52:42Z","updated_at":"2026-02-07T01:31:52Z","published_at":"2026-02-07T01:31:52Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.77.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.77.0","body":"## What's Changed\r\n* fix: Fixes routing issues which causes bugs like authentication bypass... by @thePromger in https://github.com/sparckles/Robyn/pull/1265\r\n* fix: cookies by @sansyrox in https://github.com/sparckles/Robyn/pull/1292\r\n* [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in https://github.com/sparckles/Robyn/pull/1291\r\n* feat: add llms.txt by @sansyrox in https://github.com/sparckles/Robyn/pull/1294\r\n* fix: SSEResponse duplicate CORS headers issue by @sansyrox in https://github.com/sparckles/Robyn/pull/1287\r\n* fix: json serialisation by @sansyrox in https://github.com/sparckles/Robyn/pull/1301\r\n* fix: docs - advanced routing by @sansyrox in https://github.com/sparckles/Robyn/pull/1302\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.75.0...v0.77.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/283955082/reactions","total_count":3,"+1":3,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":3},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/279736298","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/279736298/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/279736298/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.76.0","id":279736298,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4QrG_q","tag_name":"v0.76.0","target_commitish":"main","name":"v0.76.0 - fixes cookies and routing issues","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-01-25T13:56:51Z","updated_at":"2026-01-25T14:04:24Z","published_at":"2026-01-25T14:04:24Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.76.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.76.0","body":"## What's Changed\r\n* fix: Fixes routing issues which causes bugs like authentication bypass... by @thePromger in https://github.com/sparckles/Robyn/pull/1265\r\n* fix: cookies by @sansyrox in https://github.com/sparckles/Robyn/pull/1292\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.75.0...v0.76.0","mentions_count":2},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/278792490","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/278792490/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/278792490/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.75.0","id":278792490,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Qngkq","tag_name":"v0.75.0","target_commitish":"main","name":"v0.75.0 - improve request parsing in json body","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-01-19T23:39:15Z","updated_at":"2026-01-21T21:27:42Z","published_at":"2026-01-21T21:27:42Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.75.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.75.0","body":"## What's Changed\r\n* chore: feat pypi release description by @sansyrox in https://github.com/sparckles/Robyn/pull/1281\r\n* feat: make request object available in after request by @sansyrox in https://github.com/sparckles/Robyn/pull/1283\r\n* fix: preserve JSON types in request parsing by @sansyrox in https://github.com/sparckles/Robyn/pull/1284\r\n* chore: fix typing docstrings by @sansyrox in https://github.com/sparckles/Robyn/pull/1285\r\n* fix: a build issue in the docs website by @sansyrox in https://github.com/sparckles/Robyn/pull/1289\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.74.0...v0.75.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/278792490/reactions","total_count":4,"+1":0,"-1":0,"laugh":0,"hooray":4,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/277582168","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/277582168/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/277582168/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.74.0","id":277582168,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Qi5FY","tag_name":"v0.74.0","target_commitish":"main","name":"v0.74.0 - Robyn now supports Python 3.14","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-01-13T22:34:09Z","updated_at":"2026-01-17T03:56:37Z","published_at":"2026-01-17T03:55:56Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.74.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.74.0","body":"## What's Changed\r\n* chore: support python 3.14 by @sansyrox in https://github.com/sparckles/Robyn/pull/1271\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.73.0...v0.74.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/277582168/reactions","total_count":6,"+1":0,"-1":0,"laugh":0,"hooray":4,"confused":0,"heart":0,"rocket":2,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/275730351","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/275730351/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/275730351/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.73.0","id":275730351,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Qb0-v","tag_name":"v0.73.0","target_commitish":"main","name":"v0.73.0 - fixes routing and apis served from same base route","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-01-10T15:44:14Z","updated_at":"2026-01-10T16:46:30Z","published_at":"2026-01-10T16:46:30Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.73.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.73.0","body":"## What's Changed\r\n* docs: add DeepWiki badge to README by @thePromger in https://github.com/sparckles/Robyn/pull/1248\r\n* Fix badges in the README by @sobolevn in https://github.com/sparckles/Robyn/pull/1264\r\n* fix: Fixes assert issue in websocket integration tests by @thePromger in https://github.com/sparckles/Robyn/pull/1261\r\n* fix: fixing routing, while files & api served from same base route by @thePromger in https://github.com/sparckles/Robyn/pull/1260\r\n\r\n## New Contributors\r\n* @sobolevn made their first contribution in https://github.com/sparckles/Robyn/pull/1264\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.72.2...v0.73.0","mentions_count":2},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/248793822","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/248793822/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/248793822/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.72.2","id":248793822,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4O1Ere","tag_name":"v0.72.2","target_commitish":"main","name":"v0.72.2 - fix breaking on unsupported methods","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-09-06T03:55:16Z","updated_at":"2025-09-20T15:10:34Z","published_at":"2025-09-20T15:10:34Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.72.2","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.72.2","body":"## What's Changed\r\n* Create Recurse ML rules by @ab-10 in https://github.com/sparckles/Robyn/pull/1214\r\n* fix: breaking on unsupported methods by @sansyrox in https://github.com/sparckles/Robyn/pull/1241\r\n\r\n## New Contributors\r\n* @ab-10 made their first contribution in https://github.com/sparckles/Robyn/pull/1214\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.72.1...v0.72.2","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/248793822/reactions","total_count":2,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":2,"eyes":0},"mentions_count":2},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/243613480","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/243613480/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/243613480/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.72.1","id":243613480,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4OhT8o","tag_name":"v0.72.1","target_commitish":"main","name":"v0.72.1 - update orjson to support every python version","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-08-30T00:19:06Z","updated_at":"2025-08-30T00:20:47Z","published_at":"2025-08-30T00:20:47Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.72.1","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.72.1","body":"## What's Changed\r\n* fix: update orjson dependency to version 3.11.0 by @thePromger in https://github.com/sparckles/Robyn/pull/1228\r\n* Refactoring and cleaning up codspeed ci by @thePromger in https://github.com/sparckles/Robyn/pull/1230\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.72.0...v0.72.1","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/243613480/reactions","total_count":3,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":3,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/234540207","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/234540207/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/234540207/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.72.0","id":234540207,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4N-syv","tag_name":"v0.72.0","target_commitish":"main","name":"v0.72.0 - add configurable timeout and keep alive","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-23T12:49:27Z","updated_at":"2025-07-23T12:49:34Z","published_at":"2025-07-23T12:20:02Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.72.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.72.0","body":"## What's Changed\r\n* feat: add timeout and keep alive by @sansyrox in https://github.com/sparckles/Robyn/pull/1220\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.71.4...v0.72.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/234540207/reactions","total_count":5,"+1":0,"-1":0,"laugh":0,"hooray":1,"confused":0,"heart":0,"rocket":4,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/233705352","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/233705352/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/233705352/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.71.4","id":233705352,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4N7g-I","tag_name":"v0.71.4","target_commitish":"main","name":"v0.71.4 - remove dead code and duplication","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-19T19:40:58Z","updated_at":"2025-07-19T19:42:50Z","published_at":"2025-07-19T19:42:50Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.71.4","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.71.4","body":"## What's Changed\r\n* fix: remove dead code and duplication by @sansyrox in https://github.com/sparckles/Robyn/pull/1215\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.71.3...v0.71.4","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/233705352/reactions","total_count":2,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":1,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/233262686","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/233262686/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/233262686/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.71.3","id":233262686,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4N505e","tag_name":"v0.71.3","target_commitish":"main","name":"v0.71.3 - fix duplicate routing in robyn app","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-17T14:28:45Z","updated_at":"2025-07-18T08:52:29Z","published_at":"2025-07-17T17:06:36Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.71.3","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.71.3","body":"## What's Changed\r\n* chore: update a typo in docs by @sansyrox in https://github.com/sparckles/Robyn/pull/1207\r\n* fix: route duplicate implementations by @sansyrox in https://github.com/sparckles/Robyn/pull/1208\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.71.2...v0.71.3","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/233262686/reactions","total_count":2,"+1":0,"-1":0,"laugh":0,"hooray":1,"confused":0,"heart":0,"rocket":1,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/231241000","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/231241000/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/231241000/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.71.2","id":231241000,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4NyHUo","tag_name":"v0.71.2","target_commitish":"main","name":"v0.71.2 - fix auth route conflict","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-09T16:52:56Z","updated_at":"2025-07-09T18:26:51Z","published_at":"2025-07-09T18:26:51Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.71.2","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.71.2","body":"## What's Changed\r\n* fix: auth route conflict by @VishnuSanal in https://github.com/sparckles/Robyn/pull/987\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.71.1...v0.71.2","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/231241000/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":1,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/230514953","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/230514953/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/230514953/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.71.1","id":230514953,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4NvWEJ","tag_name":"v0.71.1","target_commitish":"main","name":"v0.71.1 - make SSE PEP compliant and improve implementation ","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-07T14:53:56Z","updated_at":"2025-07-07T15:14:28Z","published_at":"2025-07-07T15:13:59Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.71.1","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.71.1","body":"## What's Changed\r\n* fix: make SSE PEP compliant and improve implementation by @sansyrox in https://github.com/sparckles/Robyn/pull/1202\r\n\r\n```python\r\n\"\"\"\r\nServer-Sent Events (SSE) Example for Robyn\r\n\r\nThis example demonstrates how to implement Server-Sent Events using Robyn. SSE allows real-time server-to-client\r\ncommunication over a single HTTP connection.\r\n\"\"\"\r\n\r\nimport asyncio\r\nimport time\r\n\r\nfrom robyn import Robyn, SSEMessage, SSEResponse\r\n\r\napp = Robyn(__file__)\r\n\r\n\r\n@app.get(\"/events\")\r\ndef stream_events(request):\r\n    \"\"\"Basic SSE endpoint that sends a message every second\"\"\"\r\n\r\n    def event_generator():\r\n        \"\"\"Generator function that yields SSE-formatted messages\"\"\"\r\n        for i in range(10):\r\n            yield SSEMessage(f\"Message {i} - {time.strftime('%H:%M:%S')}\", id=str(i))\r\n            time.sleep(1)\r\n\r\n        # Send a final message\r\n        yield SSEMessage(\"Stream ended\", event=\"end\")\r\n\r\n    return SSEResponse(event_generator())\r\n\r\n\r\n@app.get(\"/events/json\")\r\ndef stream_json_events(request):\r\n    \"\"\"SSE endpoint that sends JSON data\"\"\"\r\n    import json\r\n\r\n    def json_event_generator():\r\n        \"\"\"Generator that yields JSON data as SSE\"\"\"\r\n        for i in range(5):\r\n            data = {\"id\": i, \"message\": f\"JSON message {i}\", \"timestamp\": time.time(), \"type\": \"notification\"}\r\n            yield SSEMessage(json.dumps(data), event=\"notification\", id=str(i))\r\n            time.sleep(2)\r\n\r\n    return SSEResponse(json_event_generator())\r\n\r\n\r\n@app.get(\"/events/named\")\r\ndef stream_named_events(request):\r\n    \"\"\"SSE endpoint with named events\"\"\"\r\n\r\n    def named_event_generator():\r\n        \"\"\"Generator that yields named SSE events\"\"\"\r\n        events = [\r\n            (\"user_joined\", \"Alice joined the chat\"),\r\n            (\"message\", \"Hello everyone!\"),\r\n            (\"user_left\", \"Bob left the chat\"),\r\n            (\"message\", \"How is everyone doing?\"),\r\n            (\"user_joined\", \"Charlie joined the chat\"),\r\n        ]\r\n\r\n        for i, (event_type, message) in enumerate(events):\r\n            yield SSEMessage(message, event=event_type, id=str(i))\r\n            time.sleep(1.5)\r\n\r\n    return SSEResponse(named_event_generator())\r\n\r\n\r\n@app.get(\"/events/async\")\r\nasync def stream_async_events(request):\r\n    \"\"\"Async SSE endpoint demonstrating async generators\"\"\"\r\n\r\n    async def async_event_generator():\r\n        \"\"\"Async generator for SSE events\"\"\"\r\n        for i in range(8):\r\n            # Simulate async work\r\n            await asyncio.sleep(0.5)\r\n            yield SSEMessage(f\"Async message {i} - {time.strftime('%H:%M:%S')}\", event=\"async\", id=str(i))\r\n\r\n    return SSEResponse(async_event_generator())\r\n\r\n\r\n@app.get(\"/events/heartbeat\")\r\ndef stream_heartbeat(request):\r\n    \"\"\"SSE endpoint that sends heartbeat messages\"\"\"\r\n\r\n    def heartbeat_generator():\r\n        \"\"\"Generator that sends heartbeat pings\"\"\"\r\n        counter = 0\r\n        while counter < 20:  # Send 20 heartbeats\r\n            yield SSE_Message(f\"heartbeat {counter}\", event=\"heartbeat\", id=str(counter))\r\n            counter += 1\r\n            time.sleep(0.5)\r\n\r\n        yield SSEMessage(\"heartbeat ended\", event=\"end\")\r\n\r\n    return SSEResponse(heartbeat_generator())\r\n\r\n```\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.71.0...v0.71.1","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/230514953/reactions","total_count":4,"+1":2,"-1":0,"laugh":0,"hooray":1,"confused":0,"heart":0,"rocket":1,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/230186242","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/230186242/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/230186242/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.71.0","id":230186242,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4NuF0C","tag_name":"v0.71.0","target_commitish":"main","name":"v0.71.0 - add support for server sent events","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-07-05T11:05:45Z","updated_at":"2025-07-05T11:58:41Z","published_at":"2025-07-05T11:58:18Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.71.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.71.0","body":"## What's Changed\r\n* feat: add server sent events by @sansyrox in https://github.com/sparckles/Robyn/pull/1200\r\n\r\n```python\r\n\"\"\"\r\nServer-Sent Events (SSE) Example for Robyn\r\n\r\nThis example demonstrates how to implement Server-Sent Events using Robyn,\r\nsimilar to FastAPI's implementation. SSE allows real-time server-to-client\r\ncommunication over a single HTTP connection.\r\n\"\"\"\r\n\r\nimport asyncio\r\nimport time\r\n\r\nfrom robyn import Robyn, SSE_Message, SSE_Response\r\n\r\napp = Robyn(__file__)\r\n\r\n\r\n@app.get(\"/events\")\r\ndef stream_events(request):\r\n    \"\"\"Basic SSE endpoint that sends a message every second\"\"\"\r\n\r\n    def event_generator():\r\n        \"\"\"Generator function that yields SSE-formatted messages\"\"\"\r\n        for i in range(10):\r\n            yield SSE_Message(f\"Message {i} - {time.strftime('%H:%M:%S')}\", id=str(i))\r\n            time.sleep(1)\r\n\r\n        # Send a final message\r\n        yield SSE_Message(\"Stream ended\", event=\"end\")\r\n\r\n    return SSE_Response(event_generator())\r\n\r\n\r\n@app.get(\"/events/json\")\r\ndef stream_json_events(request):\r\n    \"\"\"SSE endpoint that sends JSON data\"\"\"\r\n    import json\r\n\r\n    def json_event_generator():\r\n        \"\"\"Generator that yields JSON data as SSE\"\"\"\r\n        for i in range(5):\r\n            data = {\"id\": i, \"message\": f\"JSON message {i}\", \"timestamp\": time.time(), \"type\": \"notification\"}\r\n            yield SSE_Message(json.dumps(data), event=\"notification\", id=str(i))\r\n            time.sleep(2)\r\n\r\n    return SSE_Response(json_event_generator())\r\n\r\n\r\n@app.get(\"/events/named\")\r\ndef stream_named_events(request):\r\n    \"\"\"SSE endpoint with named events\"\"\"\r\n\r\n    def named_event_generator():\r\n        \"\"\"Generator that yields named SSE events\"\"\"\r\n        events = [\r\n            (\"user_joined\", \"Alice joined the chat\"),\r\n            (\"message\", \"Hello everyone!\"),\r\n            (\"user_left\", \"Bob left the chat\"),\r\n            (\"message\", \"How is everyone doing?\"),\r\n            (\"user_joined\", \"Charlie joined the chat\"),\r\n        ]\r\n\r\n        for i, (event_type, message) in enumerate(events):\r\n            yield SSE_Message(message, event=event_type, id=str(i))\r\n            time.sleep(1.5)\r\n\r\n    return SSE_Response(named_event_generator())\r\n\r\n\r\n@app.get(\"/events/async\")\r\nasync def stream_async_events(request):\r\n    \"\"\"Async SSE endpoint demonstrating async generators\"\"\"\r\n\r\n    async def async_event_generator():\r\n        \"\"\"Async generator for SSE events\"\"\"\r\n        for i in range(8):\r\n            # Simulate async work\r\n            await asyncio.sleep(0.5)\r\n            yield SSE_Message(f\"Async message {i} - {time.strftime('%H:%M:%S')}\", event=\"async\", id=str(i))\r\n\r\n    return SSE_Response(async_event_generator())\r\n\r\n\r\n@app.get(\"/events/heartbeat\")\r\ndef stream_heartbeat(request):\r\n    \"\"\"SSE endpoint that sends heartbeat messages\"\"\"\r\n\r\n    def heartbeat_generator():\r\n        \"\"\"Generator that sends heartbeat pings\"\"\"\r\n        counter = 0\r\n        while counter < 20:  # Send 20 heartbeats\r\n            yield SSE_Message(f\"heartbeat {counter}\", event=\"heartbeat\", id=str(counter))\r\n            counter += 1\r\n            time.sleep(0.5)\r\n\r\n        yield SSE_Message(\"heartbeat ended\", event=\"end\")\r\n\r\n    return SSE_Response(heartbeat_generator())\r\n\r\n```\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.70.0...v0.71.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/230186242/reactions","total_count":9,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":6,"rocket":3,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/227628190","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/227628190/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/227628190/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.70.0","id":227628190,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4NkVSe","tag_name":"v0.70.0","target_commitish":"main","name":"v0.70.0 - Experimental AI Features (agents and mcp server)","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-06-25T08:26:48Z","updated_at":"2025-06-26T18:08:52Z","published_at":"2025-06-25T10:11:18Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.70.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.70.0","body":"## What's Changed\r\n\r\nFull write up https://sanskar.wtf/posts/the-future-of-robyn\r\n\r\n### Experimental AI Features\r\nFirst web framework with built-in AI agents and memory.\r\n\r\n```python\r\nfrom robyn import Robyn\r\nfrom robyn.ai import agent, memory\r\n\r\napp = Robyn(__file__)\r\n\r\n@app.post(\"/chat\")\r\nasync def chat(request):\r\n    mem = memory(provider=\"inmemory\", user_id=\"user\")\r\n    ai_agent = agent(runner=\"simple\", memory=mem)\r\n\r\n    result = await ai_agent.run(request.json().get(\"query\"))\r\n    return {\"response\": result[\"response\"]}\r\n```\r\n\r\n### MCP Support\r\nNative Model Context Protocol integration.\r\n\r\n```python\r\n# MCP Resources\r\n@app.mcp.resource(\"time://current\")\r\ndef current_time() -> str:\r\n    return f\"Current time: {datetime.now().isoformat()}\"\r\n\r\n\r\n@app.mcp.tool(\r\n    name=\"echo\",\r\n    description=\"Echo back text\",\r\n    input_schema={\"type\": \"object\", \"properties\": {\"text\": {\"type\": \"string\", \"description\": \"Text to echo\"}}, \"required\": [\"text\"]},\r\n)\r\ndef echo_tool(args):\r\n    return args.get(\"text\", \"\")\r\n\r\n\r\n# MCP Prompts\r\n@app.mcp.prompt(\r\n    name=\"explain_code\",\r\n    description=\"Generate code explanation prompt\",\r\n    arguments=[\r\n        {\"name\": \"code\", \"description\": \"Code to explain\", \"required\": True},\r\n        {\"name\": \"language\", \"description\": \"Programming language\", \"required\": False},\r\n    ],\r\n)\r\ndef explain_code_prompt(args):\r\n    code = args.get(\"code\", \"\")\r\n    language = args.get(\"language\", \"unknown\")\r\n\r\n    return f\"\"\"Please explain this {language} code:\r\n\r\n{language}\r\n{code}\r\nInclude:\r\n1. What it does\r\n2. How it works\r\n3. Key concepts used\r\n\"\"\"\r\n\r\n```\r\n\r\n\r\n## Note\r\nThese features are very much experimental. Checkout the `examples/` folder to see the new features in action.\r\n\r\nInstall: `pip install robyn==0.70.0`\r\n\r\n\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.69.0...v0.70.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/227628190/reactions","total_count":4,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":4,"eyes":0}},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/225466905","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/225466905/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/225466905/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.69.0","id":225466905,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4NcFoZ","tag_name":"v0.69.0","target_commitish":"main","name":"v0.69.0 - make robyn ~80% faster","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-06-18T11:30:08Z","updated_at":"2025-06-18T12:26:50Z","published_at":"2025-06-18T12:26:50Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.69.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.69.0","body":"## What's Changed\r\n* chore: optimize rust code by @sansyrox in https://github.com/sparckles/Robyn/pull/1178\r\n* feat: optimize robyn , performance boost by 80% by @sansyrox in https://github.com/sparckles/Robyn/pull/1180\r\n* feat: optimize robyn by @sansyrox in https://github.com/sparckles/Robyn/pull/1181\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.68.0...v0.69.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/225466905/reactions","total_count":17,"+1":4,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":10,"eyes":3},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/223911248","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/223911248/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/223911248/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.68.0","id":223911248,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4NWJ1Q","tag_name":"v0.68.0","target_commitish":"main","name":"v0.68.0 - add python3.13 support","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-06-09T04:32:30Z","updated_at":"2025-06-09T04:35:00Z","published_at":"2025-06-09T04:35:00Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.68.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.68.0","body":"## What's Changed\r\n* PyO3 Migration from v0.20.* to 0.24.* by @VishnuSanal in https://github.com/sparckles/Robyn/pull/1168\r\n* fix: robyn builds failing for python v3.13 by @VishnuSanal in https://github.com/sparckles/Robyn/pull/1006\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.67.0...v0.68.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/223911248/reactions","total_count":14,"+1":6,"-1":0,"laugh":0,"hooray":3,"confused":0,"heart":0,"rocket":5,"eyes":0},"mentions_count":1},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/223267926","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/223267926/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/223267926/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.67.0","id":223267926,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4NTsxW","tag_name":"v0.67.0","target_commitish":"main","name":"v0.67.0 - flexible CORS configuration","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-06-05T05:33:17Z","updated_at":"2025-06-05T05:47:19Z","published_at":"2025-06-05T05:47:19Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.67.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.67.0","body":"## What's Changed\r\n* fix #1138 - Add support for generic types such as List[Object] by @yzutyc in https://github.com/sparckles/Robyn/pull/1139\r\n* ci: fix Codspeed benchmark ci by @k4976 in https://github.com/sparckles/Robyn/pull/1169\r\n* chore: fix typos by @hasansezertasan in https://github.com/sparckles/Robyn/pull/1166\r\n* Flexible CORS Configuration Support by @Charlie-BU in https://github.com/sparckles/Robyn/pull/1159\r\n\r\n## New Contributors\r\n* @yzutyc made their first contribution in https://github.com/sparckles/Robyn/pull/1139\r\n* @hasansezertasan made their first contribution in https://github.com/sparckles/Robyn/pull/1166\r\n* @Charlie-BU made their first contribution in https://github.com/sparckles/Robyn/pull/1159\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.66.2...v0.67.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/223267926/reactions","total_count":3,"+1":3,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"mentions_count":4},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/215283877","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/215283877/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/215283877/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.66.2","id":215283877,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4M1Pil","tag_name":"v0.66.2","target_commitish":"main","name":"v0.66.2","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-04-27T13:00:36Z","updated_at":"2025-04-28T20:03:12Z","published_at":"2025-04-28T20:03:12Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.66.2","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.66.2","body":"## What's Changed\r\n* add BaseRobyn class by @dave42w in https://github.com/sparckles/Robyn/pull/1100\r\n* docs: first version of chinese docs by @sansyrox in https://github.com/sparckles/Robyn/pull/1102\r\n* Reduce imports, minimize variables, and unify code style by @Jonney in https://github.com/sparckles/Robyn/pull/1123\r\n* dev_server should wait until the subprocess is complete by @Jonney in https://github.com/sparckles/Robyn/pull/1127\r\n* docs: fix typo in 'organisation' by @erees-embarkvet in https://github.com/sparckles/Robyn/pull/1135\r\n* fix: Fixed syntax error in mdx file. by @pythonhubdev in https://github.com/sparckles/Robyn/pull/1133\r\n* fix: fix the docs search by @sansyrox in https://github.com/sparckles/Robyn/pull/1144\r\n* ci: Fixing artifact conflict issue in ci by @k4976 in https://github.com/sparckles/Robyn/pull/1153\r\n* ci: Upgrading deprecated actions in workflow by @k4976 in https://github.com/sparckles/Robyn/pull/1156\r\n\r\n## New Contributors\r\n* @Jonney made their first contribution in https://github.com/sparckles/Robyn/pull/1123\r\n* @erees-embarkvet made their first contribution in https://github.com/sparckles/Robyn/pull/1135\r\n* @pythonhubdev made their first contribution in https://github.com/sparckles/Robyn/pull/1133\r\n* @k4976 made their first contribution in https://github.com/sparckles/Robyn/pull/1153\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.65.0...v0.66.2","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/215283877/reactions","total_count":5,"+1":2,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":3,"eyes":0},"mentions_count":6},{"url":"https://api.github.com/repos/sparckles/Robyn/releases/193408488","assets_url":"https://api.github.com/repos/sparckles/Robyn/releases/193408488/assets","upload_url":"https://uploads.github.com/repos/sparckles/Robyn/releases/193408488/assets{?name,label}","html_url":"https://github.com/sparckles/Robyn/releases/tag/v0.65.0","id":193408488,"author":{"login":"sansyrox","id":29942790,"node_id":"MDQ6VXNlcjI5OTQyNzkw","avatar_url":"https://avatars.githubusercontent.com/u/29942790?v=4","gravatar_id":"","url":"https://api.github.com/users/sansyrox","html_url":"https://github.com/sansyrox","followers_url":"https://api.github.com/users/sansyrox/followers","following_url":"https://api.github.com/users/sansyrox/following{/other_user}","gists_url":"https://api.github.com/users/sansyrox/gists{/gist_id}","starred_url":"https://api.github.com/users/sansyrox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sansyrox/subscriptions","organizations_url":"https://api.github.com/users/sansyrox/orgs","repos_url":"https://api.github.com/users/sansyrox/repos","events_url":"https://api.github.com/users/sansyrox/events{/privacy}","received_events_url":"https://api.github.com/users/sansyrox/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOFolcFs4Lhy3o","tag_name":"v0.65.0","target_commitish":"main","name":"v0.65.0 - BREAKING 🚨  - deprecate views and some other updates","draft":false,"immutable":false,"prerelease":false,"created_at":"2025-01-07T01:44:33Z","updated_at":"2025-01-07T02:41:41Z","published_at":"2025-01-07T02:25:22Z","assets":[],"tarball_url":"https://api.github.com/repos/sparckles/Robyn/tarball/v0.65.0","zipball_url":"https://api.github.com/repos/sparckles/Robyn/zipball/v0.65.0","body":"## What's Changed\r\n* docs: fix a typo in the custom exceptions documentation by @sansyrox in https://github.com/sparckles/Robyn/pull/1055\r\n* add_route refactoring by @dave42w in https://github.com/sparckles/Robyn/pull/1060\r\n* Add missing function return types (mostly None) to reloader.py by @dave42w in https://github.com/sparckles/Robyn/pull/1058\r\n* remove redundant else statement in ws.py by @dave42w in https://github.com/sparckles/Robyn/pull/1052\r\n* chore: temporary kludge to make websocket test past on ci by @dave42w in https://github.com/sparckles/Robyn/pull/1070\r\n* chore: drop python 3.8 support by @sansyrox in https://github.com/sparckles/Robyn/pull/1079\r\n* chore: suppress clippy warnings by @sansyrox in https://github.com/sparckles/Robyn/pull/1086\r\n* fix: correction of \"Closed\" to \"closed\" in temporary ws test fix by @dave42w in https://github.com/sparckles/Robyn/pull/1078\r\n* ci: update macos to 13 by @sansyrox in https://github.com/sparckles/Robyn/pull/1088\r\n* chore: deprecate views by @sansyrox in https://github.com/sparckles/Robyn/pull/1096\r\n* refactor: openApi made lazy.  by @dave42w in https://github.com/sparckles/Robyn/pull/1066\r\n\r\n\r\n**Full Changelog**: https://github.com/sparckles/Robyn/compare/v0.64.2...v0.65.0","reactions":{"url":"https://api.github.com/repos/sparckles/Robyn/releases/193408488/reactions","total_count":4,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":4,"eyes":0},"mentions_count":2}]