puma 6.4.1 → 7.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +407 -8
  3. data/README.md +109 -49
  4. data/docs/deployment.md +58 -23
  5. data/docs/fork_worker.md +11 -1
  6. data/docs/java_options.md +54 -0
  7. data/docs/jungle/README.md +1 -1
  8. data/docs/kubernetes.md +11 -16
  9. data/docs/plugins.md +6 -2
  10. data/docs/restart.md +2 -2
  11. data/docs/signals.md +21 -21
  12. data/docs/stats.md +11 -5
  13. data/docs/systemd.md +14 -5
  14. data/ext/puma_http11/extconf.rb +20 -32
  15. data/ext/puma_http11/mini_ssl.c +29 -9
  16. data/ext/puma_http11/org/jruby/puma/Http11.java +40 -9
  17. data/ext/puma_http11/puma_http11.c +125 -118
  18. data/lib/puma/app/status.rb +11 -3
  19. data/lib/puma/binder.rb +21 -11
  20. data/lib/puma/cli.rb +10 -8
  21. data/lib/puma/client.rb +183 -83
  22. data/lib/puma/cluster/worker.rb +24 -21
  23. data/lib/puma/cluster/worker_handle.rb +38 -8
  24. data/lib/puma/cluster.rb +73 -47
  25. data/lib/puma/cluster_accept_loop_delay.rb +91 -0
  26. data/lib/puma/commonlogger.rb +3 -3
  27. data/lib/puma/configuration.rb +131 -60
  28. data/lib/puma/const.rb +31 -12
  29. data/lib/puma/control_cli.rb +10 -6
  30. data/lib/puma/detect.rb +2 -0
  31. data/lib/puma/dsl.rb +411 -121
  32. data/lib/puma/error_logger.rb +7 -5
  33. data/lib/puma/events.rb +25 -10
  34. data/lib/puma/io_buffer.rb +8 -4
  35. data/lib/puma/jruby_restart.rb +0 -16
  36. data/lib/puma/launcher/bundle_pruner.rb +1 -1
  37. data/lib/puma/launcher.rb +73 -55
  38. data/lib/puma/log_writer.rb +9 -9
  39. data/lib/puma/minissl/context_builder.rb +1 -0
  40. data/lib/puma/minissl.rb +1 -1
  41. data/lib/puma/null_io.rb +26 -0
  42. data/lib/puma/plugin/systemd.rb +3 -3
  43. data/lib/puma/rack/urlmap.rb +1 -1
  44. data/lib/puma/reactor.rb +19 -13
  45. data/lib/puma/request.rb +71 -39
  46. data/lib/puma/runner.rb +15 -17
  47. data/lib/puma/sd_notify.rb +1 -4
  48. data/lib/puma/server.rb +134 -73
  49. data/lib/puma/single.rb +7 -4
  50. data/lib/puma/state_file.rb +3 -2
  51. data/lib/puma/thread_pool.rb +57 -80
  52. data/lib/puma/util.rb +0 -7
  53. data/lib/puma.rb +10 -0
  54. data/lib/rack/handler/puma.rb +10 -7
  55. data/tools/Dockerfile +15 -5
  56. metadata +14 -15
  57. data/ext/puma_http11/ext_help.h +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f531bed7745c6a17915748abb3495f7154ee5fb096b4aa251f03651db80966a
4
- data.tar.gz: 718e043e5c9e007c188fc6f172c0e72bb617235b9db176f80706285c5810991a
3
+ metadata.gz: eef4284ed113815501c9e01586a0a0fcd8d2f20e23376598e176effb4b6146a0
4
+ data.tar.gz: 83699a936ba02fbc03c2b2b10306d949f0525713d4a0cc3bbee44ecca6d71664
5
5
  SHA512:
6
- metadata.gz: 89269a8cb4620dfb35f8cb82cbb0efcbef4b69c5b084ef03b360ee65b1b0e867c4877b2b59841e0221476d45a248a3f38f358a681db5f801a37870d32a07b968
7
- data.tar.gz: d67e3d07fe9cf439c3dc8483ae1625839ea97dbe087800274cd66a76e0eeb26f83173424ce72ad476b9272ab87287f8fd7d525a35e475b2555a92f6f65ebc3f9
6
+ metadata.gz: a3ae91d6a0b359f450801765ed5cecb8f84204b115609ef41594812597f82211ba28c556ca5139a7bfc2ec9e68b6187a0fec481c228a0aeb40ca0ec25c57d29d
7
+ data.tar.gz: 289b4a1da3eaa061df1a0f7f8d7b5fce12d74e211a23fae0e7b7eae24fab85692b6636ed687ef8f4b833f7ff5ad975f3c17575f1061e1a4dc30ba517125b1788
data/History.md CHANGED
@@ -1,3 +1,237 @@
1
+ ## 7.2.1 / 2026-05-27
2
+
3
+ * Bugfixes
4
+ * Limit and anchor PROXY protocol v1 parsing to prevent abuse via crafted inputs ([#3947])
5
+ * Parse PROXY protocol only once per connection to prevent injection on keep-alive requests ([#3947])
6
+
7
+ ## 7.2.0 / 2026-01-20
8
+
9
+ * Features
10
+ * Add workers `:auto` ([#3827])
11
+ * Make it possible to restrict control server commands to stats ([#3787])
12
+
13
+ * Bugfixes
14
+ * Don't break if `WEB_CONCURRENCY` is set to a blank string ([#3837])
15
+ * Don't share server between worker 0 and descendants on refork ([#3602])
16
+ * Fix phase check race condition in `Puma::Cluster#check_workers` ([#3690])
17
+ * Fix advertising of CLI config before config files are loaded ([#3823])
18
+
19
+ * Performance
20
+ * 17% faster HTTP parsing through pre-interning env keys ([#3825])
21
+ * Implement `dsize` and `dcompact` functions for `Puma::HttpParser`, which makes Puma's C-extension GC-compactible ([#3828])
22
+
23
+ * Refactor
24
+ * Remove `NoMethodError` rescue in `Reactor#select_loop` ([#3831])
25
+ * Various cleanups in the C extension ([#3814])
26
+ * Monomorphize `handle_request` return ([#3802])
27
+
28
+ * Docs
29
+ * Change link to `docs/deployment.md` in `README.md` ([#3848])
30
+ * Fix formatting for each signal description in signals.md ([#3813])
31
+ * Update deployment and Kubernetes docs with Puma configuration tips ([#3807])
32
+ * Rename master to main ([#3809], [#3808], [#3800])
33
+ * Fix some minor typos in the docs ([#3804])
34
+ * Add `GOVERNANCE.md`, `MAINTAINERS` ([#3826])
35
+ * Remove Code Climate badge ([#3820])
36
+ * Add @joshuay03 to the maintainer list
37
+
38
+ * CI
39
+ * Use Minitest 6 where applicable ([#3859])
40
+ * Many test suite improvements and flake fixes ([#3861], [#3863], [#3860], [#3852], [#3857], [#3856], [#3845], [#3843], [#3842], [#3841], [#3822], [#3817], [#3764])
41
+
42
+ ## 7.1.0 / 2025-10-16
43
+
44
+ * Features
45
+ * Introduce `after_worker_shutdown` hook ([#3707])
46
+ * Reintroduce keepalive "fast inline" behavior. Provides faster (8x on JRuby & 1.4x on Ruby) pipeline processing ([#3794])
47
+
48
+ * Bugfixes
49
+ * Skip reading zero bytes when request body is buffered ([#3795])
50
+ * Fix `PUMA_LOG_CONFIG=1` logging twice with prune_bundler enabled ([#3778])
51
+ * Fix prune_bundler not showing in `PUMA_LOG_CONFIG=1` output ([#3779])
52
+ * Guard ThreadPool method call, which may be nil during shutdown ([#3791], [#3790])
53
+ * Set `Thread.current.puma_server` in Thread init code, not every request ([#3774])
54
+ * Fix race condition while deleting pidfile ([#3657])
55
+
56
+ ## 7.0.4 / 2025-09-23
57
+
58
+ * Bugfixes
59
+ * Fix SSL_shutdown error handling ([#3703])
60
+ * Strip whitespace from the beginnings of request header values. ([#3742])
61
+
62
+ * Performance
63
+ * puma_http11.c: Use interned UTF-8 strings for hash keys ([#3754])
64
+ * Move sleep cluster logic to its own class ([#3746], [#3740])
65
+
66
+ ## 7.0.3 / 2025-09-13
67
+
68
+ * Performance
69
+ * server.rb - process_client - add ka to todo if readable & complete ([#3748])
70
+
71
+ * Bugfixes
72
+ * Convert PUMA_PERSISTENT_TIMEOUT to an Integer ([#3749])
73
+
74
+ ## 7.0.2 / 2025-09-08
75
+
76
+ * Bugfixes
77
+ * bug: control_cli.rb - Fixup `pumactl` code to load puma.rb for `deprecate_method_change` ([#3736], [#3734])
78
+ * Replace sleep spin lock with condition variable ([#3729])
79
+ * Fix Puma not booting if queue_requests disabled ([#3731])
80
+
81
+ ## 7.0.1 / 2025-09-06
82
+
83
+ * Bugfixes
84
+ * Add backward compatibility aliases for Events class methods ([#3725])
85
+
86
+ ## 7.0.0 / 2025-09-03
87
+
88
+ * Breaking changes
89
+ * Set default `max_keep_alive` to 999 ([#3719])
90
+ * Increase `persistent_timeout` default to 65 seconds ([#3378])
91
+ * Raise an ArgumentError if no block given to hooks ([#3377])
92
+ * Don't set env['HTTP_VERSION'] for Rack > 3.1 ([#3711], [#3576])
93
+ * Runner.rb - remove `ruby_engine` method, deprecated Nov-2024 ([#3701])
94
+ * Config `preload_app!` is now the default for clustered mode ([#3297])
95
+ * Config instance must be `clamp`-d before reading any values ([#3297])
96
+ * Response headers set to lowercase ([#3704])
97
+ * Update minimum Ruby version to 3.0 ([#3698])
98
+ * Rename callback hooks ([#3438])
99
+
100
+ | Old hook name| New hook name|
101
+ |----------|----------|
102
+ | on_worker_boot | before_worker_boot |
103
+ | on_worker_shutdown | before_worker_shutdown |
104
+ | on_restart | before_restart |
105
+ | on_booted | after_booted |
106
+ | on_stopped | after_stopped |
107
+ | on_refork | before_refork |
108
+ | on_thread_start | before_thread_start |
109
+ | on_thread_exit | before_thread_exit |
110
+ | on_worker_fork | before_worker_fork |
111
+
112
+ * Features
113
+ * Fix long tail response problem with keepalive connections ([#3678]) (Previously released in 7.0.0.pre1, this was a high effort change)
114
+ * Introduce support for fiber-per-request. ([#3101])
115
+ * Add support for `rack.response_finished` ([#3681])
116
+ * Feature/support custom logger with request logs ([#3140])
117
+
118
+ * Bugfixes
119
+ * Fix error_logger inproperly logging `env[QUERY_STRING]` ([#3713], [#3625])
120
+ * Fix handling of invalid Transfer-Encoding header errors ([#3702])
121
+ * Fix socket leak on monitor wakeup `NoMethodError` in `Reactor#select_loop` ([#3696], [#3695])
122
+ * CI: puma_socket.rb fixup socket/request writes ([#3684])
123
+ * Warn when RUBY_MN_THREADS env var is set ([#3721])
124
+ * Improve the DSL `preload_app!` doc ([#3712])
125
+ * Fix the ability to focus individual tests ([#3705])
126
+ * Set env['rack.hijack'] to client.method(:full_hijack) ([#3073])
127
+
128
+ * Performance
129
+ * server.rb - initialize ivars `@reactor` and `@env_set_http_version` ([#3714])
130
+
131
+ * Refactor
132
+ * Simplify `Puma::DSL#process_hook` logic ([#3710])
133
+ * Dry up deprecation warnings and fix deprecation warnings when running CI. ([#3709], [#3708])
134
+ * Ensure and enforce that configs are loaded before options are accessed ([#3616])
135
+
136
+ ## 7.0.0.pre1 / 2025-07-31
137
+
138
+ * Changed
139
+ * Fix long tail response problem with keepalive connections ([#3678])
140
+
141
+ ## 6.6.1 / 2025-07-30
142
+
143
+ * Bugfixes
144
+ * Accept `to_path` to be `nil` on request bodies ([#3635])
145
+ * Fix single runner stats before the server start ([#3572])
146
+ * Fix incomplete worker boot state on refork ([#3601])
147
+ * Improve HttpParserError messages for better debugging ([#3586])
148
+ * Fix refork logs to distinguish from phased restarts ([#3598])
149
+ * Fix `rack.after_reply` so it doesn't interrupt chain on error ([#3680])
150
+
151
+ ## 6.6.0 / 2025-01-29
152
+
153
+ * Features
154
+ * Option to turn off SIGUSR2 trapping ([#3570], [#3567])
155
+ * Shorten `ThreadPool` trimmer and reaper thread names ([#3383])
156
+ * Add after_refork hook ([#3386])
157
+ * Add busy threads stat ([#3517])
158
+ * Add a debug log before running each type of hook ([#3375])
159
+ * Allow alternative schemes in Binder ([#3348], [#3302])
160
+ * Avoid spawning `Threadpool#trim` thread if pool size is fixed ([#3384])
161
+
162
+ * Bugfixes
163
+ * Change `HttpParserError` to be subclass of `StandardError` ([#3590], [#3552])
164
+ * added test cases
165
+ * fix update phased restart symlink folder
166
+
167
+ * Performance
168
+ * Only ping worker 0 during phased restart if using fork worker ([#3568])
169
+
170
+ * Refactor
171
+ * Fix multi-delimiter split to get status app token ([#3505])
172
+ * Change ping to use const ([#3595])
173
+ * Fixup use of Puma::Const::PipeRequest constants ([#3565])
174
+ * Update DSL hook processing logic to be consistent ([#3376])
175
+
176
+ ## 6.5.0 / 2024-11-23
177
+
178
+ * Features
179
+ * Print RUBY_DESCRIPTION when Puma starts ([#3407])
180
+ * Set the worker process count automatically when using WEB_CONCURRENCY=auto ([#3439], [#3437])
181
+ * Mark as ractor-safe ([#3486], [#3422])
182
+ * Add option `enable_keep_alive`. `true` mimics existing behavior, but now can use `false` to disable keepalive to reduce queue tail latency ([#3496])
183
+ * Add parameters to Puma methods to allow CI to change ENV in isolation ([#3485])
184
+ * Add `ssl_ciphersuites` option for TLSv1.3 ciphers ([#3359], [#3343])
185
+ * You can now use `--threads 5` or `threads 5` to config max/min threads with a single number (used to need to say `5:5`) ([#3309])
186
+ * Option to turn off systemd plugin ([#3425], [#3424])
187
+ * Add `on_stopped` hook ([#3411], [#3380])
188
+
189
+ * Bugfixes
190
+ * Handle blank environment variables when loading config ([#3539])
191
+ * lib/rack/handler/puma.rb - fix for rackup v1.0.1, adjust Gemfile ([#3532], [#3531])
192
+ * null_io.rb - add `external_encoding`, `set_encoding`, `binmode`, `binmode?` ([#3214])
193
+ * Implement NullIO#seek and #pos to mimic IO ([#3468])
194
+ * add support in rack handler & fix regression in binder for linux abstract namespace sockets ([#3508])
195
+ * Use actual thread local for `Puma::Server.current`. ([#3360])
196
+ * client.rb - fix request chunked body handling ([#3338], [#3337])
197
+ * Properly handle two requests seen in the initial buffer ([#3332])
198
+ * Fix response repeated status line when request is invalid or errors are raised ([#3308], [#3307])
199
+ * Fix child processes not being reaped when `Process.detach` used ([#3314], [#3313])
200
+
201
+ * JRuby
202
+ * Make HTTP length constants configurable ([#3518])
203
+ * Fixup jruby_restart.rb & launcher.rb to work with ARM64 macOS JRuby ([#3467])
204
+
205
+ * Performance
206
+ * Avoid checking if all workers reached timeout unless idle timeout is configured ([#3341])
207
+ * Request body - increase read size to 64 kB ([#3548])
208
+ * single mode skip wait_for_less_busy_worker ([#3325])
209
+
210
+ * Refactor
211
+ * A ton of CI/test improvements by @MSP-Greg, as usual.
212
+ * Add ThreadPool#stats and adjust Server#stats to use it ([#3527])
213
+ * normalize whitespace in worker stats string ([#3513])
214
+ * rack/handler/puma.rb - ssl - use `start_with?`, add test ([#3510])
215
+ * extconf.rb - add logging for OpenSSL versions ([#3370])
216
+ * Lazily require `Puma::Rack::Builder` ([#3340])
217
+ * Refactor: Constantize worker pipe request types ([#3318])
218
+
219
+ * Docs
220
+ * stats.md improvements ([#3514])
221
+ * control_cli.rb: Harmonize help message with bin/puma ([#3434])
222
+ * dsl.rb: Clarify a callback's argument ([#3435])
223
+ * lib/rack/handler/puma.rb - relocate and fixup module comment ([#3495])
224
+
225
+ ## 6.4.3 / 2024-09-19
226
+
227
+ * Security
228
+ * Discards any headers using underscores if the non-underscore version also exists. Without this, an attacker could overwrite values set by intermediate proxies (e.g. X-Forwarded-For). ([CVE-2024-45614](https://github.com/puma/puma/security/advisories/GHSA-9hf4-67fc-4vf4)/GHSA-9hf4-67fc-4vf4)
229
+
230
+ ## 6.4.2 / 2024-01-08
231
+
232
+ * Security
233
+ * Limit the size of chunk extensions. Without this limit, an attacker could cause unbounded resource (CPU, network bandwidth) consumption. ([GHSA-c2f4-cvqm-65w2](https://github.com/puma/puma/security/advisories/GHSA-c2f4-cvqm-65w2))
234
+
1
235
  ## 6.4.1 / 2024-01-03
2
236
 
3
237
  * Bugfixes
@@ -79,7 +313,7 @@
79
313
 
80
314
  * Features
81
315
  * Ability to supply a custom logger ([#2770], [#2511])
82
- * Warn when clustered-only hooks are defined in single mode ([#3089])
316
+ * Warn when cluster mode-only hooks are defined in single mode ([#3089])
83
317
  * Adds the on_booted event ([#2709])
84
318
 
85
319
  * Bugfixes
@@ -168,6 +402,19 @@
168
402
  * Ruby 3.2 will have native IO#wait_* methods, don't require io/wait ([#2903])
169
403
  * Various internal API refactorings ([#2942], [#2921], [#2922], [#2955])
170
404
 
405
+ ## 5.6.9 / 2024-09-19
406
+
407
+ * Security
408
+ * Discards any headers using underscores if the non-underscore version also exists. Without this, an attacker could overwrite values set by intermediate proxies (e.g. X-Forwarded-For). ([CVE-2024-45614](https://github.com/puma/puma/security/advisories/GHSA-9hf4-67fc-4vf4)/GHSA-9hf4-67fc-4vf4)
409
+ * JRuby
410
+ * Must use at least Java >= 9 to compile. You can no longer build from source on Java 8.
411
+
412
+
413
+ ## 5.6.8 / 2024-01-08
414
+
415
+ * Security
416
+ * Limit the size of chunk extensions. Without this limit, an attacker could cause unbounded resource (CPU, network bandwidth) consumption. ([GHSA-c2f4-cvqm-65w2](https://github.com/puma/puma/security/advisories/GHSA-c2f4-cvqm-65w2))
417
+
171
418
  ## 5.6.7 / 2023-08-18
172
419
 
173
420
  * Security
@@ -661,7 +908,7 @@ Each patchlevel release contains a separate security fix. We recommend simply up
661
908
  * Fix Java 8 support ([#1773])
662
909
  * Fix error `uninitialized constant Puma::Cluster` ([#1731])
663
910
  * Fix `not_token` being able to be set to true ([#1803])
664
- * Fix "Hang on SIGTERM with ruby 2.6 in clustered mode" (PR [#1741], [#1674], [#1720], [#1730], [#1755])
911
+ * Fix "Hang on SIGTERM with ruby 2.6 in cluster mode" (PR [#1741], [#1674], [#1720], [#1730], [#1755])
665
912
 
666
913
  ## 3.12.1 / 2019-03-19
667
914
 
@@ -1072,7 +1319,7 @@ Each patchlevel release contains a separate security fix. We recommend simply up
1072
1319
  * 4 minor features:
1073
1320
 
1074
1321
  * Listen to unix socket with provided backlog if any
1075
- * Improves the clustered stats to report worker stats
1322
+ * Improves the cluster mode stats to report worker stats
1076
1323
  * Pass the env to the lowlevel_error handler. Fixes [#854]
1077
1324
  * Treat path-like hosts as unix sockets. Fixes [#824]
1078
1325
 
@@ -1799,7 +2046,7 @@ The "clearly I don't have enough tests for the config" release.
1799
2046
 
1800
2047
  * 3 doc changes:
1801
2048
  * Add note about on_worker_boot hook
1802
- * Add some documentation for Clustered mode
2049
+ * Add some documentation for Cluster mode
1803
2050
  * Added quotes to /etc/puma.conf
1804
2051
 
1805
2052
  ## 2.0.1 / 2013-04-30
@@ -2053,6 +2300,158 @@ be added back in a future date when a java Puma::MiniSSL is added.
2053
2300
  * Bugfixes
2054
2301
  * Your bugfix goes here <Most recent on the top, like GitHub> (#Github Number)
2055
2302
 
2303
+ [#3947]:https://github.com/puma/puma/pull/3947 "PR by Nate Berkopec, merged 2026-05-26"
2304
+ [#3863]:https://github.com/puma/puma/pull/3863 "PR by Nate Berkopec, merged 2026-01-20"
2305
+ [#3861]:https://github.com/puma/puma/pull/3861 "PR by MSP-Greg, merged 2026-01-20"
2306
+ [#3860]:https://github.com/puma/puma/pull/3860 "PR by MSP-Greg, merged 2026-01-16"
2307
+ [#3859]:https://github.com/puma/puma/pull/3859 "PR by MSP-Greg, merged 2026-01-16"
2308
+ [#3857]:https://github.com/puma/puma/pull/3857 "PR by Aaron Patterson, merged 2026-01-12"
2309
+ [#3856]:https://github.com/puma/puma/pull/3856 "PR by MSP-Greg, merged 2026-01-12"
2310
+ [#3852]:https://github.com/puma/puma/pull/3852 "PR by Miłosz Bieniek, merged 2026-01-14"
2311
+ [#3848]:https://github.com/puma/puma/pull/3848 "PR by Miłosz Bieniek, merged 2025-12-27"
2312
+ [#3845]:https://github.com/puma/puma/pull/3845 "PR by MSP-Greg, merged 2025-12-19"
2313
+ [#3843]:https://github.com/puma/puma/pull/3843 "PR by MSP-Greg, merged 2025-12-18"
2314
+ [#3842]:https://github.com/puma/puma/pull/3842 "PR by MSP-Greg, merged 2025-12-18"
2315
+ [#3841]:https://github.com/puma/puma/pull/3841 "PR by MSP-Greg, merged 2025-12-18"
2316
+ [#3837]:https://github.com/puma/puma/pull/3837 "PR by John Bachir, merged 2026-01-09"
2317
+ [#3833]:https://github.com/puma/puma/pull/3833 "PR by Patrik Ragnarsson, merged 2025-11-25"
2318
+ [#3831]:https://github.com/puma/puma/pull/3831 "PR by Joshua Young, merged 2025-11-25"
2319
+ [#3828]:https://github.com/puma/puma/pull/3828 "PR by Jean Boussier, merged 2025-11-21"
2320
+ [#3827]:https://github.com/puma/puma/pull/3827 "PR by Nate Berkopec, merged 2026-01-20"
2321
+ [#3826]:https://github.com/puma/puma/pull/3826 "PR by Nate Berkopec, merged 2026-01-20"
2322
+ [#3825]:https://github.com/puma/puma/pull/3825 "PR by Jean Boussier, merged 2025-11-19"
2323
+ [#3823]:https://github.com/puma/puma/pull/3823 "PR by Joshua Young, merged 2025-11-18"
2324
+ [#3822]:https://github.com/puma/puma/pull/3822 "PR by Nate Berkopec, merged 2025-11-17"
2325
+ [#3820]:https://github.com/puma/puma/pull/3820 "PR by Nate Berkopec, merged 2025-11-19"
2326
+ [#3817]:https://github.com/puma/puma/pull/3817 "PR by Nate Berkopec, merged 2025-11-17"
2327
+ [#3814]:https://github.com/puma/puma/pull/3814 "PR by Jean Boussier, merged 2025-11-17"
2328
+ [#3813]:https://github.com/puma/puma/pull/3813 "PR by Masafumi Koba, merged 2025-11-17"
2329
+ [#3809]:https://github.com/puma/puma/pull/3809 "PR by Patrik Ragnarsson, merged 2025-10-26"
2330
+ [#3808]:https://github.com/puma/puma/pull/3808 "PR by Nymuxyzo, merged 2025-10-26"
2331
+ [#3807]:https://github.com/puma/puma/pull/3807 "PR by Nate Berkopec, merged 2025-10-28"
2332
+ [#3804]:https://github.com/puma/puma/pull/3804 "PR by Joe Rafaniello, merged 2025-10-21"
2333
+ [#3802]:https://github.com/puma/puma/pull/3802 "PR by Richard Schneeman, merged 2025-10-20"
2334
+ [#3800]:https://github.com/puma/puma/pull/3800 "PR by MSP-Greg, merged 2025-10-19"
2335
+ [#3787]:https://github.com/puma/puma/pull/3787 "PR by Stan Hu, merged 2025-10-17"
2336
+ [#3764]:https://github.com/puma/puma/pull/3764 "PR by MSP-Greg, merged 2025-10-17"
2337
+ [#3690]:https://github.com/puma/puma/pull/3690 "PR by Joshua Young, merged 2025-11-18"
2338
+ [#3602]:https://github.com/puma/puma/pull/3602 "PR by Joshua Young, merged 2025-11-28"
2339
+
2340
+ [#3707]:https://github.com/puma/puma/pull/3707 "PR by @nerdrew, merged 2025-10-02"
2341
+ [#3794]:https://github.com/puma/puma/pull/3794 "PR by @schneems, merged 2025-10-16"
2342
+ [#3795]:https://github.com/puma/puma/pull/3795 "PR by @MSP-Greg, merged 2025-10-16"
2343
+ [#3778]:https://github.com/puma/puma/pull/3778 "PR by @joshuay03, merged 2025-10-16"
2344
+ [#3779]:https://github.com/puma/puma/pull/3779 "PR by @joshuay03, merged 2025-10-16"
2345
+ [#3791]:https://github.com/puma/puma/pull/3791 "PR by @MSP-Greg, merged 2025-10-09"
2346
+ [#3790]:https://github.com/puma/puma/issues/3790 "Issue by @eric-wtfoxtrot, closed 2025-10-09"
2347
+ [#3774]:https://github.com/puma/puma/pull/3774 "PR by @MSP-Greg, merged 2025-10-16"
2348
+ [#3657]:https://github.com/puma/puma/pull/3657 "PR by @marksmith, merged 2025-10-16"
2349
+ [#3703]:https://github.com/puma/puma/pull/3703 "PR by @marshall-lee, merged 2025-09-20"
2350
+ [#3742]:https://github.com/puma/puma/pull/3742 "PR by @kenballus, merged 2025-09-18"
2351
+ [#3754]:https://github.com/puma/puma/pull/3754 "PR by @byroot, merged 2025-09-18"
2352
+ [#3746]:https://github.com/puma/puma/pull/3746 "PR by @schneems, merged 2025-09-18"
2353
+ [#3740]:https://github.com/puma/puma/issues/3740 "Issue by @joshuay03, closed 2025-09-18"
2354
+ [#3748]:https://github.com/puma/puma/pull/3748 "PR by @MSP-Greg, merged 2025-09-14"
2355
+ [#3749]:https://github.com/puma/puma/pull/3749 "PR by @schneems, merged 2025-09-14"
2356
+ [#3736]:https://github.com/puma/puma/pull/3736 "PR by @MSP-Greg, merged 2025-09-08"
2357
+ [#3734]:https://github.com/puma/puma/issues/3734 "Issue by @espen, closed 2025-09-08"
2358
+ [#3729]:https://github.com/puma/puma/pull/3729 "PR by @bensheldon, merged 2025-09-08"
2359
+ [#3731]:https://github.com/puma/puma/pull/3731 "PR by @stanhu, merged 2025-09-06"
2360
+ [#3725]:https://github.com/puma/puma/pull/3725 "PR by @tannakartikey, merged 2025-09-05"
2361
+ [#3719]:https://github.com/puma/puma/pull/3719 "PR by @schneems, merged 2025-09-03"
2362
+ [#3378]:https://github.com/puma/puma/pull/3378 "PR by @shayonj, merged 2025-08-19"
2363
+ [#3377]:https://github.com/puma/puma/pull/3377 "PR by @joshuay03, merged 2025-08-12"
2364
+ [#3711]:https://github.com/puma/puma/pull/3711 "PR by @MSP-Greg, merged 2025-08-28"
2365
+ [#3576]:https://github.com/puma/puma/issues/3576 "Issue by @pdalberti, closed 2025-08-28"
2366
+ [#3701]:https://github.com/puma/puma/pull/3701 "PR by @MSP-Greg, merged 2025-08-26"
2367
+ [#3297]:https://github.com/puma/puma/pull/3297 "PR by @joshuay03, merged 2025-08-26"
2368
+ [#3704]:https://github.com/puma/puma/pull/3704 "PR by @schneems, merged 2025-08-25"
2369
+ [#3698]:https://github.com/puma/puma/pull/3698 "PR by @schneems, merged 2025-08-21"
2370
+ [#3438]:https://github.com/puma/puma/pull/3438 "PR by @tannakartikey, merged 2025-08-25"
2371
+ [#3678]:https://github.com/puma/puma/pull/3678 "PR by @MSP-Greg, merged 2025-07-31"
2372
+ [#3101]:https://github.com/puma/puma/pull/3101 "PR by @ioquatix, merged 2025-08-25"
2373
+ [#3681]:https://github.com/puma/puma/pull/3681 "PR by @byroot, merged 2025-08-15"
2374
+ [#3140]:https://github.com/puma/puma/pull/3140 "PR by @phyzical, merged 2025-08-12"
2375
+ [#3713]:https://github.com/puma/puma/pull/3713 "PR by @MSP-Greg, merged 2025-08-29"
2376
+ [#3625]:https://github.com/puma/puma/pull/3625 "PR by @bhooshiek-narendiran, closed 2025-08-29"
2377
+ [#3702]:https://github.com/puma/puma/pull/3702 "PR by @marshall-lee, merged 2025-08-25"
2378
+ [#3696]:https://github.com/puma/puma/pull/3696 "PR by @joshuay03, merged 2025-08-22"
2379
+ [#3695]:https://github.com/puma/puma/issues/3695 "Issue by @joshuay03, closed 2025-08-22"
2380
+ [#3684]:https://github.com/puma/puma/pull/3684 "PR by @MSP-Greg, merged 2025-08-02"
2381
+ [#3721]:https://github.com/puma/puma/pull/3721 "PR by @schneems, merged 2025-09-03"
2382
+ [#3712]:https://github.com/puma/puma/pull/3712 "PR by @joshuay03, merged 2025-08-28"
2383
+ [#3705]:https://github.com/puma/puma/pull/3705 "PR by @schneems, merged 2025-08-25"
2384
+ [#3073]:https://github.com/puma/puma/pull/3073 "PR by @MSP-Greg, merged 2025-08-12"
2385
+ [#3714]:https://github.com/puma/puma/pull/3714 "PR by @MSP-Greg, merged 2025-08-29"
2386
+ [#3710]:https://github.com/puma/puma/pull/3710 "PR by @joshuay03, merged 2025-08-28"
2387
+ [#3709]:https://github.com/puma/puma/pull/3709 "PR by @MSP-Greg, merged 2025-08-28"
2388
+ [#3708]:https://github.com/puma/puma/issues/3708 "Issue by @schneems, closed 2025-08-28"
2389
+ [#3616]:https://github.com/puma/puma/pull/3616 "PR by @joshuay03, merged 2025-08-25"
2390
+ [#3635]:https://github.com/puma/puma/pull/3635 "PR by @LevitatingBusinessMan, merged 2025-05-08"
2391
+ [#3572]:https://github.com/puma/puma/pull/3572 "PR by @barthez, merged 2025-02-06"
2392
+ [#3601]:https://github.com/puma/puma/pull/3601 "PR by @joshuay03, merged 2025-01-31"
2393
+ [#3586]:https://github.com/puma/puma/pull/3586 "PR by @MSP-Greg, merged 2025-02-03"
2394
+ [#3598]:https://github.com/puma/puma/pull/3598 "PR by @joshuay03, merged 2025-01-31"
2395
+ [#3680]:https://github.com/puma/puma/pull/3680 "PR by @byroot, merged 2025-07-31"
2396
+ [#3570]:https://github.com/puma/puma/pull/3570 "PR by @mohamedhafez, merged 2024-12-30"
2397
+ [#3567]:https://github.com/puma/puma/issues/3567 "Issue by @mohamedhafez, closed 2024-12-30"
2398
+ [#3383]:https://github.com/puma/puma/pull/3383 "PR by @joshuay03, merged 2024-11-29"
2399
+ [#3386]:https://github.com/puma/puma/pull/3386 "PR by @Drakula2k, merged 2024-11-27"
2400
+ [#3517]:https://github.com/puma/puma/pull/3517 "PR by @jjb, merged 2024-11-26"
2401
+ [#3375]:https://github.com/puma/puma/pull/3375 "PR by @joshuay03, merged 2024-11-23"
2402
+ [#3348]:https://github.com/puma/puma/pull/3348 "PR by @tomurb, merged 2024-11-23"
2403
+ [#3302]:https://github.com/puma/puma/issues/3302 "Issue by @benburkert, closed 2024-11-23"
2404
+ [#3384]:https://github.com/puma/puma/pull/3384 "PR by @joshuay03, merged 2024-11-23"
2405
+ [#3590]:https://github.com/puma/puma/pull/3590 "PR by @MSP-Greg, merged 2025-01-01"
2406
+ [#3552]:https://github.com/puma/puma/issues/3552 "Issue by @utay, closed 2025-01-01"
2407
+ [#3568]:https://github.com/puma/puma/pull/3568 "PR by @joshuay03, merged 2024-12-11"
2408
+ [#3505]:https://github.com/puma/puma/pull/3505 "PR by @AnthonyClark, merged 2025-01-27"
2409
+ [#3595]:https://github.com/puma/puma/pull/3595 "PR by @nateberkopec, merged 2025-01-07"
2410
+ [#3565]:https://github.com/puma/puma/pull/3565 "PR by @MSP-Greg, merged 2024-11-28"
2411
+ [#3376]:https://github.com/puma/puma/pull/3376 "PR by @joshuay03, merged 2024-11-23"
2412
+ [#3407]:https://github.com/puma/puma/pull/3407 "PR by @JacobEvelyn, merged 2024-11-05"
2413
+ [#3439]:https://github.com/puma/puma/pull/3439 "PR by @codergeek121, merged 2024-11-04"
2414
+ [#3437]:https://github.com/puma/puma/issues/3437 "Issue by @rafaelfranca, closed 2024-11-04"
2415
+ [#3486]:https://github.com/puma/puma/pull/3486 "PR by @mohamedhafez, merged 2024-09-26"
2416
+ [#3422]:https://github.com/puma/puma/issues/3422 "Issue by @mohamedhafez, closed 2024-09-26"
2417
+ [#3496]:https://github.com/puma/puma/pull/3496 "PR by @slizco, merged 2024-09-26"
2418
+ [#3485]:https://github.com/puma/puma/pull/3485 "PR by @MSP-Greg, merged 2024-09-21"
2419
+ [#3359]:https://github.com/puma/puma/pull/3359 "PR by @willayton, merged 2024-04-11"
2420
+ [#3343]:https://github.com/puma/puma/issues/3343 "Issue by @willayton, closed 2024-04-11"
2421
+ [#3309]:https://github.com/puma/puma/pull/3309 "PR by @byroot, merged 2024-01-09"
2422
+ [#3425]:https://github.com/puma/puma/pull/3425 "PR by @mohamedhafez, merged 2024-07-14"
2423
+ [#3424]:https://github.com/puma/puma/issues/3424 "Issue by @mohamedhafez, closed 2024-07-14"
2424
+ [#3411]:https://github.com/puma/puma/pull/3411 "PR by @OuYangJinTing, merged 2024-06-15"
2425
+ [#3380]:https://github.com/puma/puma/pull/3380 "PR by @emilyst, closed 2024-06-15"
2426
+ [#3539]:https://github.com/puma/puma/pull/3539 "PR by @caius, merged 2024-11-20"
2427
+ [#3532]:https://github.com/puma/puma/pull/3532 "PR by @MSP-Greg, merged 2024-10-24"
2428
+ [#3531]:https://github.com/puma/puma/issues/3531 "Issue by @tagliala, closed 2024-10-24"
2429
+ [#3214]:https://github.com/puma/puma/pull/3214 "PR by @MSP-Greg, merged 2024-10-15"
2430
+ [#3468]:https://github.com/puma/puma/pull/3468 "PR by @foca, merged 2024-10-04"
2431
+ [#3508]:https://github.com/puma/puma/pull/3508 "PR by @MayCXC, merged 2024-10-02"
2432
+ [#3360]:https://github.com/puma/puma/pull/3360 "PR by @ioquatix, merged 2024-04-24"
2433
+ [#3338]:https://github.com/puma/puma/pull/3338 "PR by @MSP-Greg, merged 2024-04-11"
2434
+ [#3337]:https://github.com/puma/puma/issues/3337 "Issue by @skliew, closed 2024-04-11"
2435
+ [#3332]:https://github.com/puma/puma/pull/3332 "PR by @evanphx, merged 2024-02-18"
2436
+ [#3308]:https://github.com/puma/puma/pull/3308 "PR by @MSP-Greg, merged 2024-01-31"
2437
+ [#3307]:https://github.com/puma/puma/issues/3307 "Issue by @nateberkopec, closed 2024-01-31"
2438
+ [#3314]:https://github.com/puma/puma/pull/3314 "PR by @stanhu, merged 2024-01-26"
2439
+ [#3313]:https://github.com/puma/puma/issues/3313 "Issue by @stanhu, closed 2024-01-26"
2440
+ [#3518]:https://github.com/puma/puma/pull/3518 "PR by @roque86, merged 2024-11-15"
2441
+ [#3467]:https://github.com/puma/puma/pull/3467 "PR by @MSP-Greg, merged 2024-09-21"
2442
+ [#3341]:https://github.com/puma/puma/pull/3341 "PR by @joshuay03, merged 2024-03-11"
2443
+ [#3548]:https://github.com/puma/puma/pull/3548 "PR by @MSP-Greg, merged 2024-11-21"
2444
+ [#3325]:https://github.com/puma/puma/pull/3325 "PR by @OuYangJinTing, merged 2024-10-22"
2445
+ [#3527]:https://github.com/puma/puma/pull/3527 "PR by @MSP-Greg, merged 2024-10-26"
2446
+ [#3513]:https://github.com/puma/puma/pull/3513 "PR by @jjb, merged 2024-10-11"
2447
+ [#3510]:https://github.com/puma/puma/pull/3510 "PR by @MSP-Greg, merged 2024-10-03"
2448
+ [#3370]:https://github.com/puma/puma/pull/3370 "PR by @MSP-Greg, merged 2024-04-15"
2449
+ [#3340]:https://github.com/puma/puma/pull/3340 "PR by @joshuay03, merged 2024-03-10"
2450
+ [#3318]:https://github.com/puma/puma/pull/3318 "PR by @joshuay03, merged 2024-01-15"
2451
+ [#3514]:https://github.com/puma/puma/pull/3514 "PR by @jjb, merged 2024-10-11"
2452
+ [#3434]:https://github.com/puma/puma/pull/3434 "PR by @olleolleolle, merged 2024-09-19"
2453
+ [#3435]:https://github.com/puma/puma/pull/3435 "PR by @olleolleolle, merged 2024-09-19"
2454
+ [#3495]:https://github.com/puma/puma/pull/3495 "PR by @MSP-Greg, merged 2024-09-19"
2056
2455
  [#3256]:https://github.com/puma/puma/pull/3256 "PR by @MSP-Greg, merged 2023-10-16"
2057
2456
  [#3235]:https://github.com/puma/puma/pull/3235 "PR by @joshuay03, merged 2023-10-03"
2058
2457
  [#3228]:https://github.com/puma/puma/issues/3228 "Issue by @davidalejandroaguilar, closed 2023-10-03"
@@ -2592,16 +2991,16 @@ be added back in a future date when a java Puma::MiniSSL is added.
2592
2991
  [#1022]:https://github.com/puma/puma/issues/1022 "Issue by @AKovtunov, closed 2017-08-16"
2593
2992
  [#958]:https://github.com/puma/puma/issues/958 "Issue by @lalitlogical, closed 2016-04-23"
2594
2993
  [#782]:https://github.com/puma/puma/issues/782 "Issue by @Tonkpils, closed 2016-07-19"
2595
- [#1010]:https://github.com/puma/puma/issues/1010 "Issue by @mneumark, closed 2016-07-19"
2994
+ [#1010]:https://github.com/puma/puma/issues/1010 "Issue by @mirineumark, closed 2016-07-19"
2596
2995
  [#959]:https://github.com/puma/puma/issues/959 "Issue by @mwpastore, closed 2016-04-22"
2597
- [#840]:https://github.com/puma/puma/issues/840 "Issue by @maxkwallace, closed 2016-04-07"
2996
+ [#840]:https://github.com/puma/puma/issues/840 "Issue by @marisawallace, closed 2016-04-07"
2598
2997
  [#1007]:https://github.com/puma/puma/pull/1007 "PR by @willnet, merged 2016-06-24"
2599
2998
  [#1014]:https://github.com/puma/puma/pull/1014 "PR by @szymon-jez, merged 2016-07-11"
2600
2999
  [#1015]:https://github.com/puma/puma/pull/1015 "PR by @bf4, merged 2016-07-19"
2601
3000
  [#1017]:https://github.com/puma/puma/pull/1017 "PR by @jorihardman, merged 2016-07-19"
2602
3001
  [#954]:https://github.com/puma/puma/pull/954 "PR by @jf, merged 2016-04-12"
2603
3002
  [#955]:https://github.com/puma/puma/pull/955 "PR by @jf, merged 2016-04-22"
2604
- [#956]:https://github.com/puma/puma/pull/956 "PR by @maxkwallace, merged 2016-04-12"
3003
+ [#956]:https://github.com/puma/puma/pull/956 "PR by @marisawallace, merged 2016-04-12"
2605
3004
  [#960]:https://github.com/puma/puma/pull/960 "PR by @kmayer, merged 2016-04-15"
2606
3005
  [#969]:https://github.com/puma/puma/pull/969 "PR by @frankwong15, merged 2016-05-10"
2607
3006
  [#970]:https://github.com/puma/puma/pull/970 "PR by @willnet, merged 2016-04-26"
@@ -2662,7 +3061,7 @@ be added back in a future date when a java Puma::MiniSSL is added.
2662
3061
  [#845]:https://github.com/puma/puma/pull/845 "PR by @deepj, merged 2016-01-28"
2663
3062
  [#846]:https://github.com/puma/puma/pull/846 "PR by @sriedel, merged 2016-01-15"
2664
3063
  [#850]:https://github.com/puma/puma/pull/850 "PR by @deepj, merged 2016-01-15"
2665
- [#853]:https://github.com/puma/puma/pull/853 "PR by @Jeffrey6052, merged 2016-01-28"
3064
+ [#853]:https://github.com/puma/puma/pull/853 "PR by @xuqiyong666, merged 2016-01-28"
2666
3065
  [#857]:https://github.com/puma/puma/pull/857 "PR by @osheroff, merged 2016-01-15"
2667
3066
  [#858]:https://github.com/puma/puma/pull/858 "PR by @mlarraz, merged 2016-01-28"
2668
3067
  [#860]:https://github.com/puma/puma/pull/860 "PR by @osheroff, merged 2016-01-15"