What ruby-grape/grape shipped
Generated by FoxPlug from public activity — not affiliated with Ruby-grape.
Week of September 14, 2026
What shipped
- Released v4.0.1 with performance improvements and bug fixes. Release
- Registries for formatters, parsers, params builders, validators and versioners are now replaced on registration instead of written into. Pull request #2976
- Every endpoint's Rack stack now runs through a single shared lambda instead of allocating a fresh one per endpoint. Pull request #2974
- Static values collections are now held as-is instead of wrapped in a lambda to avoid unnecessary per-request calls. Pull request #2975
- Removed two unused match caches per route that Mustermann was never asked to use. Pull request #2973
- Request paths no longer resolve params that were not asked for. Pull request #2972
- README examples and claims were corrected to match actual Grape behavior across roughly 40 passages. Pull request #2971
- Ruby requirement raised to 3.3.1 to avoid anonymous parameter forwarding issues in blocks. Pull request #2966
- Responses are now linted once per API under lint! instead of on every request. Pull request #2960
- Lazy configuration value tree collapsed into a single path-based Value for remountable APIs. Pull request #2950
Why it matters
This release focused on performance optimizations reducing unnecessary allocations and lookups on every request, correctness fixes for edge cases in params handling and error responses, and documentation improvements ensuring the README accurately reflects how Grape works.
Changelog entry
- Replace registries on registration instead of writing into them [#2976] Pull request #2976
- Hold static values collections as-is instead of behind a lambda [#2975] Pull request #2975
- Run every endpoint's Rack stack through one shared lambda [#2974] Pull request #2974
- Copy query params only when params builder hands them back [#2977] Pull request #2977
- Stop allocating two unused match caches per route [#2973] Pull request #2973
- Stop request path from resolving params it was not asked for [#2972] Pull request #2972
- Correct README where examples and claims do not match Grape [#2971] Pull request #2971
- Correct README passages on given and routes admitting dots [#2969] Pull request #2969
- Label redirect body with API's content type [#2968] Pull request #2968
- Hand a Proc passed as last middleware argument to the middleware [#2967] Pull request #2967
- Require Ruby 3.3.1 [#2966] Pull request #2966
- Correct two README examples whose response did not match request [#2965] Pull request #2965
- Let go of mount instances that refresh replaces [#2964] Pull request #2964
- Stop recording a setting read as a setup step [#2963] Pull request #2963
- Correct README on param versioning and unsupported request bodies [#2961] Pull request #2961
- Send content type for api_format the API does not declare [#2959] Pull request #2959
- Reject non-Hash elements in Array params with blocks [#2957] Pull request #2957
- Reject what variant collection types cannot coerce [#2955] Pull request #2955
- Keep String error message's status when route names failure entity [#2953] Pull request #2953
- Answer HEAD request for unmatched path without body [#2958] Pull request #2958
Grape v4.0.1 ships with significant performance improvements: fewer allocations per request, smarter registry handling, and optimized path matching. Plus comprehensive README corrections ensuring examples match actual behavior.
Grape v4.0.1 is out with meaningful performance work: shared Rack lambda per endpoint, optimized registry writes, removed unused match caches, and faster path-versioned requests. We also corrected roughly 40 README passages to match actual behavior, improving the experience for developers discovering and using the framework.