puma 6.4.0 → 7.1.0

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +385 -19
  3. data/README.md +95 -42
  4. data/docs/fork_worker.md +11 -1
  5. data/docs/java_options.md +54 -0
  6. data/docs/kubernetes.md +9 -7
  7. data/docs/plugins.md +4 -0
  8. data/docs/restart.md +3 -2
  9. data/docs/signals.md +11 -11
  10. data/docs/stats.md +10 -4
  11. data/docs/systemd.md +13 -6
  12. data/ext/puma_http11/extconf.rb +22 -30
  13. data/ext/puma_http11/mini_ssl.c +34 -10
  14. data/ext/puma_http11/org/jruby/puma/Http11.java +40 -9
  15. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +2 -1
  16. data/ext/puma_http11/puma_http11.c +26 -11
  17. data/lib/puma/app/status.rb +1 -1
  18. data/lib/puma/binder.rb +21 -11
  19. data/lib/puma/cli.rb +10 -8
  20. data/lib/puma/client.rb +156 -72
  21. data/lib/puma/cluster/worker.rb +16 -14
  22. data/lib/puma/cluster/worker_handle.rb +38 -8
  23. data/lib/puma/cluster.rb +128 -42
  24. data/lib/puma/cluster_accept_loop_delay.rb +91 -0
  25. data/lib/puma/commonlogger.rb +3 -3
  26. data/lib/puma/configuration.rb +125 -63
  27. data/lib/puma/const.rb +29 -11
  28. data/lib/puma/control_cli.rb +10 -6
  29. data/lib/puma/detect.rb +5 -4
  30. data/lib/puma/dsl.rb +412 -119
  31. data/lib/puma/error_logger.rb +7 -5
  32. data/lib/puma/events.rb +25 -10
  33. data/lib/puma/io_buffer.rb +8 -4
  34. data/lib/puma/jruby_restart.rb +0 -16
  35. data/lib/puma/launcher/bundle_pruner.rb +1 -1
  36. data/lib/puma/launcher.rb +71 -54
  37. data/lib/puma/log_writer.rb +9 -9
  38. data/lib/puma/minissl/context_builder.rb +3 -0
  39. data/lib/puma/minissl.rb +6 -1
  40. data/lib/puma/null_io.rb +42 -2
  41. data/lib/puma/plugin/systemd.rb +3 -3
  42. data/lib/puma/rack/urlmap.rb +1 -1
  43. data/lib/puma/reactor.rb +19 -4
  44. data/lib/puma/request.rb +62 -32
  45. data/lib/puma/runner.rb +15 -17
  46. data/lib/puma/sd_notify.rb +1 -4
  47. data/lib/puma/server.rb +151 -69
  48. data/lib/puma/single.rb +5 -2
  49. data/lib/puma/state_file.rb +5 -4
  50. data/lib/puma/thread_pool.rb +57 -80
  51. data/lib/puma/util.rb +0 -7
  52. data/lib/puma.rb +10 -0
  53. data/lib/rack/handler/puma.rb +10 -7
  54. data/tools/Dockerfile +5 -3
  55. metadata +13 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e58946300296f4d215a5859fcadb101b4fcec6d9012b38fd0af10c5fdb3ce0c2
4
- data.tar.gz: 397fa109025cbc87d7466be97ed91e44789d522db2c4b89d1ef5f4e40db9f772
3
+ metadata.gz: cb282989c2e0ee20b007c5b0cdf231caf106816210101572346098f6863502c7
4
+ data.tar.gz: f4217f8221a64fcd6f5bf2c2249ed8dc6d512ba167e93ef4273b0accb574d26d
5
5
  SHA512:
6
- metadata.gz: a0c6a4e6c10522de9a9c7d5eed57d5205a6d4acfe18e9d7c310044d5793a2a67a266c3b69f8ed4c5385559149dc858dbcf1b4307c86459b9723ea49303de5685
7
- data.tar.gz: cf7a60331c499a1387414ca2d6955edbc239242a62ea06941bf912714ee4dcb9295a5a1bd9c3561fd396c54a2e04e5a0aa2194ef17b37accb78e049e4cb1ca6b
6
+ metadata.gz: 2070bae758f22fc8b0784c6b426a7177d65e9039fd2d1969d1241e8f101e46a04afdc5f93f5b6646eb0d9fb15fd6b47f87fb0cee478c3c58e840d3ae852b754a
7
+ data.tar.gz: 6d35fd83049a36ec8017fb859899fddd0305b90977a14f707f551b1e802d822100bf10126ce43598bf23bbf17deb581135955f61028ee56d0ba3e161718f9d79
data/History.md CHANGED
@@ -1,8 +1,225 @@
1
+ ## 7.1.0 / 2025-10-16
2
+
3
+ * Features
4
+ * Introduce `after_worker_shutdown` hook ([#3707])
5
+ * Reintroduce keepalive "fast inline" behavior. Provides faster (8x on JRuby & 1.4x on Ruby) pipeline processing ([#3794])
6
+
7
+ * Bugfixes
8
+ * Skip reading zero bytes when request body is buffered ([#3795])
9
+ * Fix `PUMA_LOG_CONFIG=1` logging twice with prune_bundler enabled ([#3778])
10
+ * Fix prune_bundler not showing in `PUMA_LOG_CONFIG=1` output ([#3779])
11
+ * Guard ThreadPool method call, which may be nil during shutdown ([#3791], [#3790])
12
+ * Set `Thread.current.puma_server` in Thread init code, not every request ([#3774])
13
+ * Fix race condition while deleting pidfile ([#3657])
14
+
15
+ ## 7.0.4 / 2025-09-23
16
+
17
+ * Bugfixes
18
+ * Fix SSL_shutdown error handling ([#3703])
19
+ * Strip whitespace from the beginnings of request header values. ([#3742])
20
+
21
+ * Performance
22
+ * puma_http11.c: Use interned UTF-8 strings for hash keys ([#3754])
23
+ * Move sleep cluster logic to its own class ([#3746], [#3740])
24
+
25
+ ## 7.0.3 / 2025-09-13
26
+
27
+ * Performance
28
+ * server.rb - process_client - add ka to todo if readable & complete ([#3748])
29
+
30
+ * Bugfixes
31
+ * Convert PUMA_PERSISTENT_TIMEOUT to an Integer ([#3749])
32
+
33
+ ## 7.0.2 / 2025-09-08
34
+
35
+ * Bugfixes
36
+ * bug: control_cli.rb - Fixup `pumactl` code to load puma.rb for `deprecate_method_change` ([#3736], [#3734])
37
+ * Replace sleep spin lock with condition variable ([#3729])
38
+ * Fix Puma not booting if queue_requests disabled ([#3731])
39
+
40
+ ## 7.0.1 / 2025-09-06
41
+
42
+ * Bugfixes
43
+ * Add backward compatibility aliases for Events class methods ([#3725])
44
+
45
+ ## 7.0.0 / 2025-09-03
46
+
47
+ * Breaking changes
48
+ * Set default `max_keep_alive` to 999 ([#3719])
49
+ * Increase `persistent_timeout` default to 65 seconds ([#3378])
50
+ * Raise an ArgumentError if no block given to hooks ([#3377])
51
+ * Don't set env['HTTP_VERSION'] for Rack > 3.1 ([#3711], [#3576])
52
+ * Runner.rb - remove `ruby_engine` method, deprecated Nov-2024 ([#3701])
53
+ * Config `preload_app!` is now the default for clustered mode ([#3297])
54
+ * Config instance must be `clamp`-d before reading any values ([#3297])
55
+ * Response headers set to lowercase ([#3704])
56
+ * Update minimum Ruby version to 3.0 ([#3698])
57
+ * Rename callback hooks ([#3438])
58
+
59
+ | Old hook name| New hook name|
60
+ |----------|----------|
61
+ | on_worker_boot | before_worker_boot |
62
+ | on_worker_shutdown | before_worker_shutdown |
63
+ | on_restart | before_restart |
64
+ | on_booted | after_booted |
65
+ | on_stopped | after_stopped |
66
+ | on_refork | before_refork |
67
+ | on_thread_start | before_thread_start |
68
+ | on_thread_exit | before_thread_exit |
69
+ | on_worker_fork | before_worker_fork |
70
+
71
+ * Features
72
+ * Fix long tail response problem with keepalive connections ([#3678]) (Previously released in 7.0.0.pre1, this was a high effort change)
73
+ * Introduce support for fiber-per-request. ([#3101])
74
+ * Add support for `rack.response_finished` ([#3681])
75
+ * Feature/support custom logger with request logs ([#3140])
76
+
77
+ * Bugfixes
78
+ * Fix error_logger inproperly logging `env[QUERY_STRING]` ([#3713], [#3625])
79
+ * Fix handling of invalid Transfer-Encoding header errors ([#3702])
80
+ * Fix socket leak on monitor wakeup `NoMethodError` in `Reactor#select_loop` ([#3696], [#3695])
81
+ * CI: puma_socket.rb fixup socket/request writes ([#3684])
82
+ * Warn when RUBY_MN_THREADS env var is set ([#3721])
83
+ * Improve the DSL `preload_app!` doc ([#3712])
84
+ * Fix the ability to focus individual tests ([#3705])
85
+ * Set env['rack.hijack'] to client.method(:full_hijack) ([#3073])
86
+
87
+ * Performance
88
+ * server.rb - initialize ivars `@reactor` and `@env_set_http_version` ([#3714])
89
+
90
+ * Refactor
91
+ * Simplify `Puma::DSL#process_hook` logic ([#3710])
92
+ * Dry up deprecation warnings and fix deprecation warnings when running CI. ([#3709], [#3708])
93
+ * Ensure and enforce that configs are loaded before options are accessed ([#3616])
94
+
95
+ ## 7.0.0.pre1 / 2025-07-31
96
+
97
+ * Changed
98
+ * Fix long tail response problem with keepalive connections ([#3678])
99
+
100
+ ## 6.6.1 / 2025-07-30
101
+
102
+ * Bugfixes
103
+ * Accept `to_path` to be `nil` on request bodies ([#3635])
104
+ * Fix single runner stats before the server start ([#3572])
105
+ * Fix incomplete worker boot state on refork ([#3601])
106
+ * Improve HttpParserError messages for better debugging ([#3586])
107
+ * Fix refork logs to distinguish from phased restarts ([#3598])
108
+ * Fix `rack.after_reply` so it doesn't interrupt chain on error ([#3680])
109
+
110
+ ## 6.6.0 / 2025-01-29
111
+
112
+ * Features
113
+ * Option to turn off SIGUSR2 trapping ([#3570], [#3567])
114
+ * Shorten `ThreadPool` trimmer and reaper thread names ([#3383])
115
+ * Add after_refork hook ([#3386])
116
+ * Add busy threads stat ([#3517])
117
+ * Add a debug log before running each type of hook ([#3375])
118
+ * Allow alternative schemes in Binder ([#3348], [#3302])
119
+ * Avoid spawning `Threadpool#trim` thread if pool size is fixed ([#3384])
120
+
121
+ * Bugfixes
122
+ * Change `HttpParserError` to be subclass of `StandardError` ([#3590], [#3552])
123
+ * added test cases
124
+ * fix update phased restart symlink folder
125
+
126
+ * Performance
127
+ * Only ping worker 0 during phased restart if using fork worker ([#3568])
128
+
129
+ * Refactor
130
+ * Fix multi-delimiter split to get status app token ([#3505])
131
+ * Change ping to use const ([#3595])
132
+ * Fixup use of Puma::Const::PipeRequest constants ([#3565])
133
+ * Update DSL hook processing logic to be consistent ([#3376])
134
+
135
+ ## 6.5.0 / 2024-11-23
136
+
137
+ * Features
138
+ * Print RUBY_DESCRIPTION when Puma starts ([#3407])
139
+ * Set the worker process count automatically when using WEB_CONCURRENCY=auto ([#3439], [#3437])
140
+ * Mark as ractor-safe ([#3486], [#3422])
141
+ * Add option `enable_keep_alive`. `true` mimics existing behavior, but now can use `false` to disable keepalive to reduce queue tail latency ([#3496])
142
+ * Add parameters to Puma methods to allow CI to change ENV in isolation ([#3485])
143
+ * Add `ssl_ciphersuites` option for TLSv1.3 ciphers ([#3359], [#3343])
144
+ * 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])
145
+ * Option to turn off systemd plugin ([#3425], [#3424])
146
+ * Add `on_stopped` hook ([#3411], [#3380])
147
+
148
+ * Bugfixes
149
+ * Handle blank environment variables when loading config ([#3539])
150
+ * lib/rack/handler/puma.rb - fix for rackup v1.0.1, adjust Gemfile ([#3532], [#3531])
151
+ * null_io.rb - add `external_encoding`, `set_encoding`, `binmode`, `binmode?` ([#3214])
152
+ * Implement NullIO#seek and #pos to mimic IO ([#3468])
153
+ * add support in rack handler & fix regression in binder for linux abstract namespace sockets ([#3508])
154
+ * Use actual thread local for `Puma::Server.current`. ([#3360])
155
+ * client.rb - fix request chunked body handling ([#3338], [#3337])
156
+ * Properly handle two requests seen in the initial buffer ([#3332])
157
+ * Fix response repeated status line when request is invalid or errors are raised ([#3308], [#3307])
158
+ * Fix child processes not being reaped when `Process.detach` used ([#3314], [#3313])
159
+
160
+ * JRuby
161
+ * Make HTTP length constants configurable ([#3518])
162
+ * Fixup jruby_restart.rb & launcher.rb to work with ARM64 macOS JRuby ([#3467])
163
+
164
+ * Performance
165
+ * Avoid checking if all workers reached timeout unless idle timeout is configured ([#3341])
166
+ * Request body - increase read size to 64 kB ([#3548])
167
+ * single mode skip wait_for_less_busy_worker ([#3325])
168
+
169
+ * Refactor
170
+ * A ton of CI/test improvements by @MSP-Greg, as usual.
171
+ * Add ThreadPool#stats and adjust Server#stats to use it ([#3527])
172
+ * normalize whitespace in worker stats string ([#3513])
173
+ * rack/handler/puma.rb - ssl - use `start_with?`, add test ([#3510])
174
+ * extconf.rb - add logging for OpenSSL versions ([#3370])
175
+ * Lazily require `Puma::Rack::Builder` ([#3340])
176
+ * Refactor: Constantize worker pipe request types ([#3318])
177
+
178
+ * Docs
179
+ * stats.md improvements ([#3514])
180
+ * control_cli.rb: Harmonize help message with bin/puma ([#3434])
181
+ * dsl.rb: Clarify a callback's argument ([#3435])
182
+ * lib/rack/handler/puma.rb - relocate and fixup module comment ([#3495])
183
+
184
+ ## 6.4.3 / 2024-09-19
185
+
186
+ * Security
187
+ * 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)
188
+
189
+ ## 6.4.2 / 2024-01-08
190
+
191
+ * Security
192
+ * 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))
193
+
194
+ ## 6.4.1 / 2024-01-03
195
+
196
+ * Bugfixes
197
+ * DSL#warn_if_in_single_mode - fixup when workers set via CLI ([#3256])
198
+ * Fix `idle-timeout` not working in cluster mode ([#3235], [#3228], [#3282], [#3283])
199
+ * Fix worker 0 timing out during phased restart ([#3225], [#2786])
200
+ * context_builder.rb - require openssl if verify_mode != 'none' ([#3179])
201
+ * Make puma cluster process suitable as PID 1 ([#3255])
202
+ * Improve Puma::NullIO consistency with real IO ([#3276])
203
+ * extconf.rb - fixup to detect openssl info in Ruby build ([#3271], [#3266])
204
+ * MiniSSL.java - set serialVersionUID, fix RaiseException deprecation ([#3270])
205
+ * dsl.rb - fix warn_if_in_single_mode when WEB_CONCURRENCY is set ([#3265], [#3264])
206
+
207
+ * Maintenance
208
+ * LOTS of test refactoring to make tests more stable and easier to write - thanks to @MSP-Greg!
209
+ * Fix bug in tests re: TestPuma::HOST4 ([#3254])
210
+ * Dockerfile for minimal repros: use Ruby 3.2, expect bundler installed ([#3245])
211
+ * fix define_method calls, use Symbol parameter instead of String ([#3293])
212
+
213
+ * Docs
214
+ * README.md - add the puma-acme plugin ([#3301])
215
+ * Remove `--keep-file-descriptors` flag from systemd docs ([#3248])
216
+ * Note symlink mechanism in restart documentation for hot restart ([#3298])
217
+
1
218
  ## 6.4.0 / 2023-09-21
2
219
 
3
220
  * Features
4
221
  * on_thread_exit hook ([#2920])
5
- * on_thread_start_hook ([#3195])
222
+ * on_thread_start_hook ([#3195])
6
223
  * Shutdown on idle ([#3209], [#2580])
7
224
  * New error message when control server port taken ([#3204])
8
225
 
@@ -12,13 +229,13 @@
12
229
 
13
230
  * Bugfixes
14
231
  * Bring the cert_pem: parameter into parity with the cert: parameter to ssl_bind. ([#3174])
15
- * Fix using control server with IPv6 host ([#3181])
232
+ * Fix using control server with IPv6 host ([#3181])
16
233
  * control_cli.rb - add require_relative 'log_writer' ([#3187])
17
234
  * Fix cases where fallback Rack response wasn't sent to the client ([#3094])
18
-
235
+
19
236
  ## 6.3.1 / 2023-08-18
20
237
 
21
- * Security
238
+ * Security
22
239
  * Address HTTP request smuggling vulnerabilities with zero-length Content Length header and trailer fields ([GHSA-68xg-gqqm-vgj8](https://github.com/puma/puma/security/advisories/GHSA-68xg-gqqm-vgj8))
23
240
 
24
241
  ## 6.3.0 / 2023-05-31
@@ -55,7 +272,7 @@
55
272
 
56
273
  * Features
57
274
  * Ability to supply a custom logger ([#2770], [#2511])
58
- * Warn when clustered-only hooks are defined in single mode ([#3089])
275
+ * Warn when cluster mode-only hooks are defined in single mode ([#3089])
59
276
  * Adds the on_booted event ([#2709])
60
277
 
61
278
  * Bugfixes
@@ -92,12 +309,12 @@
92
309
  * Refactor const.rb - freeze ([#3016])
93
310
 
94
311
  ## 6.0.1 / 2022-12-20
95
-
312
+
96
313
  * Bugfixes
97
314
  * Handle waking up a closed selector in Reactor#add ([#3005])
98
315
  * Fixup response processing, enumerable bodies ([#3004], [#3000])
99
316
  * Correctly close app body for all code paths ([#3002], [#2999])
100
- * Refactor
317
+ * Refactor
101
318
  * Add IOBuffer to Client, remove from ThreadPool thread instances ([#3013])
102
319
 
103
320
  ## 6.0.0 / 2022-10-14
@@ -126,12 +343,12 @@
126
343
  * Allow header values to be arrays (Rack 3) ([#2936], [#2931])
127
344
  * Export Puma/Ruby versions in /stats ([#2875])
128
345
  * Allow configuring request uri max length & request path max length ([#2840])
129
- * Add a couple of public accessors ([#2774])
346
+ * Add a couple of public accessors ([#2774])
130
347
  * Log entire backtrace when worker start fails ([#2891])
131
348
  * [jruby] Enable TLSv1.3 support ([#2886])
132
349
  * [jruby] support setting TLS protocols + rename ssl_cipher_list ([#2899])
133
350
  * [jruby] Support a truststore option ([#2849], [#2904], [#2884])
134
-
351
+
135
352
  * Bugfixes
136
353
  * Load the configuration before passing it to the binder ([#2897])
137
354
  * Do not raise error raised on HTTP methods we don't recognize or support, like CONNECT ([#2932], [#1441])
@@ -144,9 +361,22 @@
144
361
  * Ruby 3.2 will have native IO#wait_* methods, don't require io/wait ([#2903])
145
362
  * Various internal API refactorings ([#2942], [#2921], [#2922], [#2955])
146
363
 
364
+ ## 5.6.9 / 2024-09-19
365
+
366
+ * Security
367
+ * 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)
368
+ * JRuby
369
+ * Must use at least Java >= 9 to compile. You can no longer build from source on Java 8.
370
+
371
+
372
+ ## 5.6.8 / 2024-01-08
373
+
374
+ * Security
375
+ * 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))
376
+
147
377
  ## 5.6.7 / 2023-08-18
148
378
 
149
- * Security
379
+ * Security
150
380
  * Address HTTP request smuggling vulnerabilities with zero-length Content Length header and trailer fields ([GHSA-68xg-gqqm-vgj8](https://github.com/puma/puma/security/advisories/GHSA-68xg-gqqm-vgj8))
151
381
 
152
382
  ## 5.6.6 / 2023-06-21
@@ -637,7 +867,7 @@ Each patchlevel release contains a separate security fix. We recommend simply up
637
867
  * Fix Java 8 support ([#1773])
638
868
  * Fix error `uninitialized constant Puma::Cluster` ([#1731])
639
869
  * Fix `not_token` being able to be set to true ([#1803])
640
- * Fix "Hang on SIGTERM with ruby 2.6 in clustered mode" (PR [#1741], [#1674], [#1720], [#1730], [#1755])
870
+ * Fix "Hang on SIGTERM with ruby 2.6 in cluster mode" (PR [#1741], [#1674], [#1720], [#1730], [#1755])
641
871
 
642
872
  ## 3.12.1 / 2019-03-19
643
873
 
@@ -1048,7 +1278,7 @@ Each patchlevel release contains a separate security fix. We recommend simply up
1048
1278
  * 4 minor features:
1049
1279
 
1050
1280
  * Listen to unix socket with provided backlog if any
1051
- * Improves the clustered stats to report worker stats
1281
+ * Improves the cluster mode stats to report worker stats
1052
1282
  * Pass the env to the lowlevel_error handler. Fixes [#854]
1053
1283
  * Treat path-like hosts as unix sockets. Fixes [#824]
1054
1284
 
@@ -1775,7 +2005,7 @@ The "clearly I don't have enough tests for the config" release.
1775
2005
 
1776
2006
  * 3 doc changes:
1777
2007
  * Add note about on_worker_boot hook
1778
- * Add some documentation for Clustered mode
2008
+ * Add some documentation for Cluster mode
1779
2009
  * Added quotes to /etc/puma.conf
1780
2010
 
1781
2011
  ## 2.0.1 / 2013-04-30
@@ -2029,6 +2259,142 @@ be added back in a future date when a java Puma::MiniSSL is added.
2029
2259
  * Bugfixes
2030
2260
  * Your bugfix goes here <Most recent on the top, like GitHub> (#Github Number)
2031
2261
 
2262
+ [#3707]:https://github.com/puma/puma/pull/3707 "PR by @nerdrew, merged 2025-10-02"
2263
+ [#3794]:https://github.com/puma/puma/pull/3794 "PR by @schneems, merged 2025-10-16"
2264
+ [#3795]:https://github.com/puma/puma/pull/3795 "PR by @MSP-Greg, merged 2025-10-16"
2265
+ [#3778]:https://github.com/puma/puma/pull/3778 "PR by @joshuay03, merged 2025-10-16"
2266
+ [#3779]:https://github.com/puma/puma/pull/3779 "PR by @joshuay03, merged 2025-10-16"
2267
+ [#3791]:https://github.com/puma/puma/pull/3791 "PR by @MSP-Greg, merged 2025-10-09"
2268
+ [#3790]:https://github.com/puma/puma/issues/3790 "Issue by @eric-wtfoxtrot, closed 2025-10-09"
2269
+ [#3774]:https://github.com/puma/puma/pull/3774 "PR by @MSP-Greg, merged 2025-10-16"
2270
+ [#3657]:https://github.com/puma/puma/pull/3657 "PR by @marksmith, merged 2025-10-16"
2271
+ [#3703]:https://github.com/puma/puma/pull/3703 "PR by @marshall-lee, merged 2025-09-20"
2272
+ [#3742]:https://github.com/puma/puma/pull/3742 "PR by @kenballus, merged 2025-09-18"
2273
+ [#3754]:https://github.com/puma/puma/pull/3754 "PR by @byroot, merged 2025-09-18"
2274
+ [#3746]:https://github.com/puma/puma/pull/3746 "PR by @schneems, merged 2025-09-18"
2275
+ [#3740]:https://github.com/puma/puma/issues/3740 "Issue by @joshuay03, closed 2025-09-18"
2276
+ [#3748]:https://github.com/puma/puma/pull/3748 "PR by @MSP-Greg, merged 2025-09-14"
2277
+ [#3749]:https://github.com/puma/puma/pull/3749 "PR by @schneems, merged 2025-09-14"
2278
+ [#3736]:https://github.com/puma/puma/pull/3736 "PR by @MSP-Greg, merged 2025-09-08"
2279
+ [#3734]:https://github.com/puma/puma/issues/3734 "Issue by @espen, closed 2025-09-08"
2280
+ [#3729]:https://github.com/puma/puma/pull/3729 "PR by @bensheldon, merged 2025-09-08"
2281
+ [#3731]:https://github.com/puma/puma/pull/3731 "PR by @stanhu, merged 2025-09-06"
2282
+ [#3725]:https://github.com/puma/puma/pull/3725 "PR by @tannakartikey, merged 2025-09-05"
2283
+ [#3719]:https://github.com/puma/puma/pull/3719 "PR by @schneems, merged 2025-09-03"
2284
+ [#3378]:https://github.com/puma/puma/pull/3378 "PR by @shayonj, merged 2025-08-19"
2285
+ [#3377]:https://github.com/puma/puma/pull/3377 "PR by @joshuay03, merged 2025-08-12"
2286
+ [#3711]:https://github.com/puma/puma/pull/3711 "PR by @MSP-Greg, merged 2025-08-28"
2287
+ [#3576]:https://github.com/puma/puma/issues/3576 "Issue by @pdalberti, closed 2025-08-28"
2288
+ [#3701]:https://github.com/puma/puma/pull/3701 "PR by @MSP-Greg, merged 2025-08-26"
2289
+ [#3297]:https://github.com/puma/puma/pull/3297 "PR by @joshuay03, merged 2025-08-26"
2290
+ [#3704]:https://github.com/puma/puma/pull/3704 "PR by @schneems, merged 2025-08-25"
2291
+ [#3698]:https://github.com/puma/puma/pull/3698 "PR by @schneems, merged 2025-08-21"
2292
+ [#3438]:https://github.com/puma/puma/pull/3438 "PR by @tannakartikey, merged 2025-08-25"
2293
+ [#3678]:https://github.com/puma/puma/pull/3678 "PR by @MSP-Greg, merged 2025-07-31"
2294
+ [#3101]:https://github.com/puma/puma/pull/3101 "PR by @ioquatix, merged 2025-08-25"
2295
+ [#3681]:https://github.com/puma/puma/pull/3681 "PR by @byroot, merged 2025-08-15"
2296
+ [#3140]:https://github.com/puma/puma/pull/3140 "PR by @phyzical, merged 2025-08-12"
2297
+ [#3713]:https://github.com/puma/puma/pull/3713 "PR by @MSP-Greg, merged 2025-08-29"
2298
+ [#3625]:https://github.com/puma/puma/pull/3625 "PR by @bhooshiek-narendiran, closed 2025-08-29"
2299
+ [#3702]:https://github.com/puma/puma/pull/3702 "PR by @marshall-lee, merged 2025-08-25"
2300
+ [#3696]:https://github.com/puma/puma/pull/3696 "PR by @joshuay03, merged 2025-08-22"
2301
+ [#3695]:https://github.com/puma/puma/issues/3695 "Issue by @joshuay03, closed 2025-08-22"
2302
+ [#3684]:https://github.com/puma/puma/pull/3684 "PR by @MSP-Greg, merged 2025-08-02"
2303
+ [#3721]:https://github.com/puma/puma/pull/3721 "PR by @schneems, merged 2025-09-03"
2304
+ [#3712]:https://github.com/puma/puma/pull/3712 "PR by @joshuay03, merged 2025-08-28"
2305
+ [#3705]:https://github.com/puma/puma/pull/3705 "PR by @schneems, merged 2025-08-25"
2306
+ [#3073]:https://github.com/puma/puma/pull/3073 "PR by @MSP-Greg, merged 2025-08-12"
2307
+ [#3714]:https://github.com/puma/puma/pull/3714 "PR by @MSP-Greg, merged 2025-08-29"
2308
+ [#3710]:https://github.com/puma/puma/pull/3710 "PR by @joshuay03, merged 2025-08-28"
2309
+ [#3709]:https://github.com/puma/puma/pull/3709 "PR by @MSP-Greg, merged 2025-08-28"
2310
+ [#3708]:https://github.com/puma/puma/issues/3708 "Issue by @schneems, closed 2025-08-28"
2311
+ [#3616]:https://github.com/puma/puma/pull/3616 "PR by @joshuay03, merged 2025-08-25"
2312
+ [#3635]:https://github.com/puma/puma/pull/3635 "PR by @LevitatingBusinessMan, merged 2025-05-08"
2313
+ [#3572]:https://github.com/puma/puma/pull/3572 "PR by @barthez, merged 2025-02-06"
2314
+ [#3601]:https://github.com/puma/puma/pull/3601 "PR by @joshuay03, merged 2025-01-31"
2315
+ [#3586]:https://github.com/puma/puma/pull/3586 "PR by @MSP-Greg, merged 2025-02-03"
2316
+ [#3598]:https://github.com/puma/puma/pull/3598 "PR by @joshuay03, merged 2025-01-31"
2317
+ [#3680]:https://github.com/puma/puma/pull/3680 "PR by @byroot, merged 2025-07-31"
2318
+ [#3570]:https://github.com/puma/puma/pull/3570 "PR by @mohamedhafez, merged 2024-12-30"
2319
+ [#3567]:https://github.com/puma/puma/issues/3567 "Issue by @mohamedhafez, closed 2024-12-30"
2320
+ [#3383]:https://github.com/puma/puma/pull/3383 "PR by @joshuay03, merged 2024-11-29"
2321
+ [#3386]:https://github.com/puma/puma/pull/3386 "PR by @Drakula2k, merged 2024-11-27"
2322
+ [#3517]:https://github.com/puma/puma/pull/3517 "PR by @jjb, merged 2024-11-26"
2323
+ [#3375]:https://github.com/puma/puma/pull/3375 "PR by @joshuay03, merged 2024-11-23"
2324
+ [#3348]:https://github.com/puma/puma/pull/3348 "PR by @tomurb, merged 2024-11-23"
2325
+ [#3302]:https://github.com/puma/puma/issues/3302 "Issue by @benburkert, closed 2024-11-23"
2326
+ [#3384]:https://github.com/puma/puma/pull/3384 "PR by @joshuay03, merged 2024-11-23"
2327
+ [#3590]:https://github.com/puma/puma/pull/3590 "PR by @MSP-Greg, merged 2025-01-01"
2328
+ [#3552]:https://github.com/puma/puma/issues/3552 "Issue by @utay, closed 2025-01-01"
2329
+ [#3568]:https://github.com/puma/puma/pull/3568 "PR by @joshuay03, merged 2024-12-11"
2330
+ [#3505]:https://github.com/puma/puma/pull/3505 "PR by @AnthonyClark, merged 2025-01-27"
2331
+ [#3595]:https://github.com/puma/puma/pull/3595 "PR by @nateberkopec, merged 2025-01-07"
2332
+ [#3565]:https://github.com/puma/puma/pull/3565 "PR by @MSP-Greg, merged 2024-11-28"
2333
+ [#3376]:https://github.com/puma/puma/pull/3376 "PR by @joshuay03, merged 2024-11-23"
2334
+ [#3407]:https://github.com/puma/puma/pull/3407 "PR by @JacobEvelyn, merged 2024-11-05"
2335
+ [#3439]:https://github.com/puma/puma/pull/3439 "PR by @codergeek121, merged 2024-11-04"
2336
+ [#3437]:https://github.com/puma/puma/issues/3437 "Issue by @rafaelfranca, closed 2024-11-04"
2337
+ [#3486]:https://github.com/puma/puma/pull/3486 "PR by @mohamedhafez, merged 2024-09-26"
2338
+ [#3422]:https://github.com/puma/puma/issues/3422 "Issue by @mohamedhafez, closed 2024-09-26"
2339
+ [#3496]:https://github.com/puma/puma/pull/3496 "PR by @slizco, merged 2024-09-26"
2340
+ [#3485]:https://github.com/puma/puma/pull/3485 "PR by @MSP-Greg, merged 2024-09-21"
2341
+ [#3359]:https://github.com/puma/puma/pull/3359 "PR by @willayton, merged 2024-04-11"
2342
+ [#3343]:https://github.com/puma/puma/issues/3343 "Issue by @willayton, closed 2024-04-11"
2343
+ [#3309]:https://github.com/puma/puma/pull/3309 "PR by @byroot, merged 2024-01-09"
2344
+ [#3425]:https://github.com/puma/puma/pull/3425 "PR by @mohamedhafez, merged 2024-07-14"
2345
+ [#3424]:https://github.com/puma/puma/issues/3424 "Issue by @mohamedhafez, closed 2024-07-14"
2346
+ [#3411]:https://github.com/puma/puma/pull/3411 "PR by @OuYangJinTing, merged 2024-06-15"
2347
+ [#3380]:https://github.com/puma/puma/pull/3380 "PR by @emilyst, closed 2024-06-15"
2348
+ [#3539]:https://github.com/puma/puma/pull/3539 "PR by @caius, merged 2024-11-20"
2349
+ [#3532]:https://github.com/puma/puma/pull/3532 "PR by @MSP-Greg, merged 2024-10-24"
2350
+ [#3531]:https://github.com/puma/puma/issues/3531 "Issue by @tagliala, closed 2024-10-24"
2351
+ [#3214]:https://github.com/puma/puma/pull/3214 "PR by @MSP-Greg, merged 2024-10-15"
2352
+ [#3468]:https://github.com/puma/puma/pull/3468 "PR by @foca, merged 2024-10-04"
2353
+ [#3508]:https://github.com/puma/puma/pull/3508 "PR by @MayCXC, merged 2024-10-02"
2354
+ [#3360]:https://github.com/puma/puma/pull/3360 "PR by @ioquatix, merged 2024-04-24"
2355
+ [#3338]:https://github.com/puma/puma/pull/3338 "PR by @MSP-Greg, merged 2024-04-11"
2356
+ [#3337]:https://github.com/puma/puma/issues/3337 "Issue by @skliew, closed 2024-04-11"
2357
+ [#3332]:https://github.com/puma/puma/pull/3332 "PR by @evanphx, merged 2024-02-18"
2358
+ [#3308]:https://github.com/puma/puma/pull/3308 "PR by @MSP-Greg, merged 2024-01-31"
2359
+ [#3307]:https://github.com/puma/puma/issues/3307 "Issue by @nateberkopec, closed 2024-01-31"
2360
+ [#3314]:https://github.com/puma/puma/pull/3314 "PR by @stanhu, merged 2024-01-26"
2361
+ [#3313]:https://github.com/puma/puma/issues/3313 "Issue by @stanhu, closed 2024-01-26"
2362
+ [#3518]:https://github.com/puma/puma/pull/3518 "PR by @roque86, merged 2024-11-15"
2363
+ [#3467]:https://github.com/puma/puma/pull/3467 "PR by @MSP-Greg, merged 2024-09-21"
2364
+ [#3341]:https://github.com/puma/puma/pull/3341 "PR by @joshuay03, merged 2024-03-11"
2365
+ [#3548]:https://github.com/puma/puma/pull/3548 "PR by @MSP-Greg, merged 2024-11-21"
2366
+ [#3325]:https://github.com/puma/puma/pull/3325 "PR by @OuYangJinTing, merged 2024-10-22"
2367
+ [#3527]:https://github.com/puma/puma/pull/3527 "PR by @MSP-Greg, merged 2024-10-26"
2368
+ [#3513]:https://github.com/puma/puma/pull/3513 "PR by @jjb, merged 2024-10-11"
2369
+ [#3510]:https://github.com/puma/puma/pull/3510 "PR by @MSP-Greg, merged 2024-10-03"
2370
+ [#3370]:https://github.com/puma/puma/pull/3370 "PR by @MSP-Greg, merged 2024-04-15"
2371
+ [#3340]:https://github.com/puma/puma/pull/3340 "PR by @joshuay03, merged 2024-03-10"
2372
+ [#3318]:https://github.com/puma/puma/pull/3318 "PR by @joshuay03, merged 2024-01-15"
2373
+ [#3514]:https://github.com/puma/puma/pull/3514 "PR by @jjb, merged 2024-10-11"
2374
+ [#3434]:https://github.com/puma/puma/pull/3434 "PR by @olleolleolle, merged 2024-09-19"
2375
+ [#3435]:https://github.com/puma/puma/pull/3435 "PR by @olleolleolle, merged 2024-09-19"
2376
+ [#3495]:https://github.com/puma/puma/pull/3495 "PR by @MSP-Greg, merged 2024-09-19"
2377
+ [#3256]:https://github.com/puma/puma/pull/3256 "PR by @MSP-Greg, merged 2023-10-16"
2378
+ [#3235]:https://github.com/puma/puma/pull/3235 "PR by @joshuay03, merged 2023-10-03"
2379
+ [#3228]:https://github.com/puma/puma/issues/3228 "Issue by @davidalejandroaguilar, closed 2023-10-03"
2380
+ [#3282]:https://github.com/puma/puma/issues/3282 "Issue by @bensheldon, closed 2024-01-02"
2381
+ [#3283]:https://github.com/puma/puma/pull/3283 "PR by @joshuay03, merged 2024-01-02"
2382
+ [#3225]:https://github.com/puma/puma/pull/3225 "PR by @joshuay03, merged 2023-09-27"
2383
+ [#2786]:https://github.com/puma/puma/issues/2786 "Issue by @vitiokss, closed 2023-09-27"
2384
+ [#3179]:https://github.com/puma/puma/pull/3179 "PR by @MSP-Greg, merged 2023-09-26"
2385
+ [#3255]:https://github.com/puma/puma/pull/3255 "PR by @casperisfine, merged 2023-10-19"
2386
+ [#3276]:https://github.com/puma/puma/pull/3276 "PR by @casperisfine, merged 2023-11-16"
2387
+ [#3271]:https://github.com/puma/puma/pull/3271 "PR by @MSP-Greg, merged 2023-10-30"
2388
+ [#3266]:https://github.com/puma/puma/issues/3266 "Issue by @Dragonicity, closed 2023-10-30"
2389
+ [#3270]:https://github.com/puma/puma/pull/3270 "PR by @MSP-Greg, merged 2023-10-30"
2390
+ [#3265]:https://github.com/puma/puma/pull/3265 "PR by @MSP-Greg, merged 2023-10-25"
2391
+ [#3264]:https://github.com/puma/puma/issues/3264 "Issue by @dentarg, closed 2023-10-25"
2392
+ [#3254]:https://github.com/puma/puma/pull/3254 "PR by @casperisfine, merged 2023-10-11"
2393
+ [#3245]:https://github.com/puma/puma/pull/3245 "PR by @olleolleolle, merged 2023-10-02"
2394
+ [#3293]:https://github.com/puma/puma/pull/3293 "PR by @MSP-Greg, merged 2023-12-21"
2395
+ [#3301]:https://github.com/puma/puma/pull/3301 "PR by @benburkert, merged 2023-12-29"
2396
+ [#3248]:https://github.com/puma/puma/pull/3248 "PR by @dentarg, merged 2023-10-04"
2397
+ [#3298]:https://github.com/puma/puma/pull/3298 "PR by @til, merged 2023-12-26"
2032
2398
  [#2920]:https://github.com/puma/puma/pull/2920 "PR by @biinari, merged 2023-07-11"
2033
2399
  [#3195]:https://github.com/puma/puma/pull/3195 "PR by @binarygit, merged 2023-08-15"
2034
2400
  [#3209]:https://github.com/puma/puma/pull/3209 "PR by @joshuay03, merged 2023-09-04"
@@ -2213,7 +2579,7 @@ be added back in a future date when a java Puma::MiniSSL is added.
2213
2579
  [#2563]:https://github.com/puma/puma/pull/2563 "PR by @MSP-Greg, merged 2021-03-06"
2214
2580
  [#2504]:https://github.com/puma/puma/issues/2504 "Issue by @fsateler, closed 2021-03-06"
2215
2581
  [#2591]:https://github.com/puma/puma/pull/2591 "PR by @MSP-Greg, merged 2021-05-05"
2216
- [#2572]:https://github.com/puma/puma/issues/2572 "Issue by @josefbilendo, closed 2021-05-05"
2582
+ [#2572]:https://github.com/puma/puma/issues/2572 "Issue by @josef-krabath, closed 2021-05-05"
2217
2583
  [#2613]:https://github.com/puma/puma/pull/2613 "PR by @smcgivern, merged 2021-04-27"
2218
2584
  [#2605]:https://github.com/puma/puma/pull/2605 "PR by @pascalbetz, merged 2021-04-26"
2219
2585
  [#2584]:https://github.com/puma/puma/issues/2584 "Issue by @kaorihinata, closed 2021-04-26"
@@ -2529,7 +2895,7 @@ be added back in a future date when a java Puma::MiniSSL is added.
2529
2895
  [#1110]:https://github.com/puma/puma/pull/1110 "PR by @montdidier, merged 2016-12-12"
2530
2896
  [#1135]:https://github.com/puma/puma/pull/1135 "PR by @jkraemer, merged 2016-11-19"
2531
2897
  [#1081]:https://github.com/puma/puma/pull/1081 "PR by @frodsan, merged 2016-09-08"
2532
- [#1138]:https://github.com/puma/puma/pull/1138 "PR by @steakknife, merged 2016-12-13"
2898
+ [#1138]:https://github.com/puma/puma/pull/1138 "PR by @skull-squadron, merged 2016-12-13"
2533
2899
  [#1118]:https://github.com/puma/puma/pull/1118 "PR by @hiroara, merged 2016-11-20"
2534
2900
  [#1075]:https://github.com/puma/puma/issues/1075 "Issue by @pvalena, closed 2016-09-06"
2535
2901
  [#932]:https://github.com/puma/puma/issues/932 "Issue by @everplays, closed 2016-07-24"
@@ -2547,16 +2913,16 @@ be added back in a future date when a java Puma::MiniSSL is added.
2547
2913
  [#1022]:https://github.com/puma/puma/issues/1022 "Issue by @AKovtunov, closed 2017-08-16"
2548
2914
  [#958]:https://github.com/puma/puma/issues/958 "Issue by @lalitlogical, closed 2016-04-23"
2549
2915
  [#782]:https://github.com/puma/puma/issues/782 "Issue by @Tonkpils, closed 2016-07-19"
2550
- [#1010]:https://github.com/puma/puma/issues/1010 "Issue by @mneumark, closed 2016-07-19"
2916
+ [#1010]:https://github.com/puma/puma/issues/1010 "Issue by @mirineumark, closed 2016-07-19"
2551
2917
  [#959]:https://github.com/puma/puma/issues/959 "Issue by @mwpastore, closed 2016-04-22"
2552
- [#840]:https://github.com/puma/puma/issues/840 "Issue by @maxkwallace, closed 2016-04-07"
2918
+ [#840]:https://github.com/puma/puma/issues/840 "Issue by @marisawallace, closed 2016-04-07"
2553
2919
  [#1007]:https://github.com/puma/puma/pull/1007 "PR by @willnet, merged 2016-06-24"
2554
2920
  [#1014]:https://github.com/puma/puma/pull/1014 "PR by @szymon-jez, merged 2016-07-11"
2555
2921
  [#1015]:https://github.com/puma/puma/pull/1015 "PR by @bf4, merged 2016-07-19"
2556
2922
  [#1017]:https://github.com/puma/puma/pull/1017 "PR by @jorihardman, merged 2016-07-19"
2557
2923
  [#954]:https://github.com/puma/puma/pull/954 "PR by @jf, merged 2016-04-12"
2558
2924
  [#955]:https://github.com/puma/puma/pull/955 "PR by @jf, merged 2016-04-22"
2559
- [#956]:https://github.com/puma/puma/pull/956 "PR by @maxkwallace, merged 2016-04-12"
2925
+ [#956]:https://github.com/puma/puma/pull/956 "PR by @marisawallace, merged 2016-04-12"
2560
2926
  [#960]:https://github.com/puma/puma/pull/960 "PR by @kmayer, merged 2016-04-15"
2561
2927
  [#969]:https://github.com/puma/puma/pull/969 "PR by @frankwong15, merged 2016-05-10"
2562
2928
  [#970]:https://github.com/puma/puma/pull/970 "PR by @willnet, merged 2016-04-26"
@@ -2617,7 +2983,7 @@ be added back in a future date when a java Puma::MiniSSL is added.
2617
2983
  [#845]:https://github.com/puma/puma/pull/845 "PR by @deepj, merged 2016-01-28"
2618
2984
  [#846]:https://github.com/puma/puma/pull/846 "PR by @sriedel, merged 2016-01-15"
2619
2985
  [#850]:https://github.com/puma/puma/pull/850 "PR by @deepj, merged 2016-01-15"
2620
- [#853]:https://github.com/puma/puma/pull/853 "PR by @Jeffrey6052, merged 2016-01-28"
2986
+ [#853]:https://github.com/puma/puma/pull/853 "PR by @xuqiyong666, merged 2016-01-28"
2621
2987
  [#857]:https://github.com/puma/puma/pull/857 "PR by @osheroff, merged 2016-01-15"
2622
2988
  [#858]:https://github.com/puma/puma/pull/858 "PR by @mlarraz, merged 2016-01-28"
2623
2989
  [#860]:https://github.com/puma/puma/pull/860 "PR by @osheroff, merged 2016-01-15"