Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Releases: php/frankenphp

v1.12.4

04 Jun 10:29
8c9e331

Choose a tag to compare

FrankenPHP 1.12.4 is a hardening and stability release. It pulls in upstream security fixes from Caddy 2.11.4 and Mercure 0.24.2, closes a class of HTTP header spoofing, and fixes several crashes and data races in worker mode. Every user should upgrade.

The headline is defense-in-depth against underscore-header spoofing. CGI maps dashes to underscores (Foo-Bar becomes HTTP_FOO_BAR), so a client-supplied Foo_Bar header is indistinguishable from a legitimate Foo-Bar in $_SERVER and can spoof any header an app or upstream proxy trusts (forwarded-for, auth, etc.). The bundled Caddy 2.11.4 now ignores header fields containing underscores at the server layer, and FrankenPHP documents the risk for code using the Go API directly.

🔒 Security & Hardening

  • Underscore header spoofing blocked at the server layer. The bundled Caddy 2.11.4 now ignores HTTP header fields whose name contains an underscore, preventing collisions with the dash-to-underscore CGI mapping (reported by @Vincent550102, patched by @dunglas upstream). NewRequestWithContext now documents the risk for direct Go API users by @dunglas in #2460.
  • Caddy 2.11.4 security patches bundled: TLS client-auth fix, Windows backslash normalization in the path matcher, rewrite placeholder re-expansion fix, and a patch for GHSA-vcc4-2c75-vc9v. See the Caddy 2.11.4 release notes.
  • Mercure 0.24.2 security hardening bundled for the Mercure Caddy module: SSE field injection via id/type (CWE-93) now rejected, reserved /.well-known/mercure topic forgery blocked, Last-Event-ID metadata disclosure fixed, and DoS amplification caps added. See the Mercure 0.24.2 release notes.
  • Security model documentation describing FrankenPHP's trust boundaries and what qualifies as a security issue by @alexandre-daubois in #2455.

🐛 Fixes

  • Fix ext-parallel crashes by correctly propagating the parent thread index via SG(server_context) by @henderkes in #2438.
  • Clear in_save_handler state that blocked the subsequent close handler by @henderkes in #2443.
  • Fix a data race in metrics by replacing the mutex with a read-write mutex by @alexandre-daubois in #2450 and removing redundant shutdown assignments by @henderkes in #2452.
  • Report headers_sent() as false under CLI emulation by @henderkes in #2453.

⚡ Internal Improvements

  • Drop the unreachable space-to-underscore replacement in header names (Go's net/http already rejects spaces) by @dunglas in #2441.
  • Make UPX packing opt-in via the COMPRESS env var by @dunglas in #2429.
  • Dependency updates including Caddy 2.11.4 and Mercure 0.24.2 in #2454 and #2462.

📖 Documentation

💖 New Contributors


Need help adopting FrankenPHP, hardening a PHP application against header-spoofing and real-time security issues like these, or auditing your worker setup for races? Les-Tilleuls.coop — the team behind FrankenPHP — provides professional support, consulting, custom development, and training. Get in touch: contact@les-tilleuls.coop.

Full Changelog: v1.12.3...v1.12.4

v1.12.3

15 May 23:09
86fb32e

Choose a tag to compare

This release fixes CVE-2026-45062 (high, CVSS 8.1): unsafe Unicode handling in CGI path splitting let an attacker have a non-.php file executed as PHP via a crafted URL, in any deployment where attacker-controlled file names land on the served filesystem. All users on v1.11.2 through v1.12.2 should upgrade.

It also brings a ~7-8% Hello World throughput bump from a refreshed PGO profile, configurable per-thread request limits, persistent-zval helpers for sharing state across threads, a cross-platform force-kill primitive for stuck PHP threads, correct SCRIPT_NAME / PHP_SELF / PATH_INFO server variables, and a long series of frankenphp extension-init (extgen) generator fixes by @alexandre-daubois.

Released binaries now carry SLSA build-provenance attestations — verify with gh attestation verify <binary> --owner php or gh attestation verify oci://docker.io/dunglas/frankenphp@sha256:... --owner php.

🔒 Security

🚀 Features

🐛 Fixes

  • Set $_SERVER variables SCRIPT_NAME, PHP_SELF, and PATH_INFO correctly by @henderkes in #2317
  • Fix dead forked pthread_fork children by @henderkes in #2332
  • Fix upstream BC break on INI_INT() macro by @zeriyoshi in #2387
  • Caddy: reject invalid split_path at provision time by @alexandre-daubois in #2350
  • extgen parser hardening by @alexandre-daubois: better error handling (#2370), emit warnings to stderr (#2374), reset iota per const block (#2375), escape control chars in C string literals (#2377), extract Go function bodies via go/ast (#2379), symmetric Go type compatibility check (#2380)

⚡ Performance and Internal Improvements

📝 Documentation

💖 New Contributors


Need help adopting FrankenPHP, hardening a PHP application against issues like CVE-2026-45062, or squeezing more performance out of your workers? Les-Tilleuls.coop — the team behind FrankenPHP — provides professional support, consulting, custom development, and training. Get in touch: contact@les-tilleuls.coop.

Full Changelog: v1.12.2...v1.12.3

v1.12.2

09 Apr 15:43
v1.12.2
dbc09d2

Choose a tag to compare

This release includes several new features, bug fixes, and performance improvements. It also addresses a critical cache key collision vulnerability in Mercure (GHSA-hwr4-mq23-wcv5).

🚀 Features

🐛 Fixes

⚡ Performance and Internal Improvements

  • Extend table on environment startup instead of letting zend_hash_copy do it by @henderkes in #2272
  • Hoist LoaderFunc to package-level variable in phpheaders by @dunglas in #2053

📝 Documentation

💖 New Contributors

Full Changelog: v1.12.1...v1.12.2

v1.12.1

10 Mar 15:32
v1.12.1
2728df9

Choose a tag to compare

What's Changed

🐛 Bug Fixes

  • Fix PHP startup errors when ini files contain environment variables by @henderkes in #2252
  • Fix sigsev on bind permissions denied by @henderkes in #2251

📖 Documentation

  • Update README for Windows, other minor changes by @dunglas in #2249
  • Revise bug report template for improved instructions by @dunglas in #2181
  • Improve hot reload, add missing features by @dunglas in #2261
  • Sync all translations with the English ones

New Contributors

  • @github-actions[bot] made their first contribution in #2206

Full Changelog: v1.12.0...v1.12.1

v1.12.0

06 Mar 17:30
v1.12.0
74e8195

Choose a tag to compare

What's Changed

frankenphp-windows

Official, native Windows support has arrived!

This highly anticipated release brings 100% compatibility, Worker Mode, and Hot Reloading to Windows, delivering up to a 3.6x performance boost over traditional Nginx/PHP-FPM setups. Thanks to new compiler capabilities in Go 1.26, FrankenPHP now links directly against official Visual Studio-compiled PHP binaries for ultimate stability and full extension support.

Huge thanks to Intelligence X and Les-Tilleuls.coop for sponsoring this milestone.

Learn more about the story of the Windows port in this dedicated blog post.

This version also includes some performance optimizations and Caddy 2.11.2.

✨ New Features

🚀 Performance Improvements

📖 Documentation

New Contributors

Full Changelog: v1.11.3...v1.12.0

v1.11.3

24 Feb 12:40
v1.11.3
bf30297

Choose a tag to compare

This release restores application stability by reverting the unreliable worker mode INI reset introduced in version 1.11.2, upgrades Caddy to 2.11, and bumps the PHP version included in static binaries to PHP 8.5 to deliver new language features and performance gains, though the MS SQL Server and memcache extensions have been temporarily removed due to 8.5 incompatibility.

What's Changed

🐛 Bug Fixes

✨ New Features

Documentation

  • Document the extension workers API by @y-l-g in #2055

New Contributors

Full Changelog: v1.11.2...v1.11.3

v1.11.2

12 Feb 12:32
v1.11.2
3aa71fd

Choose a tag to compare

Important

Security Update: This release addresses three security vulnerabilities, including a critical path confusion issue allowing arbitrary file execution and a session leak in worker mode. Immediate upgrade is strongly recommended.

Beyond security, this release delivers significant performance improvements by upgrading the compiler to Go 1.26. Users can expect a 10-40% faster Garbage Collector and ~30% faster CGO calls, resulting in significantly reduced latency for PHP applications.

We have also improved stability by addressing race conditions during shutdown, resolving segmentation faults in edge cases (such as early shutdown or specific extension registrations), and refining the handling of $_SERVER and HTTP Basic Auth.

What's Changed

🛡️ Security Fixes

🐛 Bug Fixes

🚀 Performance Improvements

✨ New Features

Documentation

Note

Translations are now automated using an LLM.

New Contributors

Full Changelog: v1.11.1...v1.11.2

v1.11.1

24 Dec 13:34
v1.11.1
57c58fa

Choose a tag to compare

What's Changed

  • fix: crash when using the logger outside of the a request context by @lobre in #2089
  • fix: frankenphp_log() level parameter must be optional by @dunglas in #2085
  • fix(caddy): use default patterns when hot_reload is alone by @dunglas in #2081

New Contributors

Full Changelog: v1.11.0...v1.11.1

v1.11.0

19 Dec 12:50
v1.11.0
6231bf4

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v1.10.1...v1.11.0

v1.10.1

25 Nov 12:43
v1.10.1
fc5f6ef

Choose a tag to compare

What's Changed

  • fix: crash when a string is passed for the topics parameter of the mercure_publish() function by @dunglas in #2021
  • fix: correctly set the Mercure hub for the main worker request by @dunglas in #2026
  • chore: bump deps by @dunglas in #2023

Full Changelog: v1.10.0...v1.10.1

Morty Proxy This is a proxified and sanitized view of the page, visit original site.