Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,090 of 9,090 pages
About the help in other languages
All help pages

Change ledger: exponential-velocity

Every change made to exponential-velocity since the se7enxweb era began, oldest first: 715 changes touching 2820 files. Each line gives the date, the commit, what kind of change it is, its message, and how many files it…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/history/ledger/exponential-velocity.md

On this page

Change ledger: exponential-velocity

Every change made to exponential-velocity since the se7enxweb era began, oldest first: 715 changes touching 2820 files. Each line gives the date, the commit, what kind of change it is, its message, and how many files it touched (+ lines added / − lines removed). Release tags are marked. The narrative documentation (features, bc notes, specifications, the history chronicle) explains what these changes deliver; this ledger is the complete record they are built from.

KindChanges
Updated364
Other137
Added124
Merged81
Removed5
Renamed4

2026-07 (47 changes)

DateCommitKindChangeFiles+/−Release
2026-07-200480c29OtherInitial commit1+21 / −0
2026-07-20eaa711aOtherInitial release — pure PHP web server, 55-73% of nginx throughput27+7191 / −1
2026-07-20895314eUpdatedUpdated filenames referenced in README.md1+3 / −3
2026-07-2071f3ed3UpdatedUpdated filenames referenced in README.md1+10 / −10
2026-07-200292445UpdatedUpdated README to highlight comparisons to other set-ups1+286 / −34
2026-07-20473b1bbUpdatedUpdated README to mention HTTP/2 and amphp autodetection1+57 / −0
2026-07-200f9e400UpdatedUpdated README to have a compelling introduction1+32 / −16
2026-07-20f3f0c2aUpdatedUpdated README to compare to FrankenPHP, Swoole, etc.1+69 / −0
2026-07-20618638eUpdatedFix str_repeat → str_pad, add composer.json, clean up Revolt driver8+147 / −63
2026-07-20fe52e9aUpdatedUpdated README with more practical advice for PHP developers1+187 / −87
2026-07-201672e0cAddedAdded support for autoloading, event handlers, and more5+681 / −84
2026-07-2071c3ad3OtherImproved documentation of built-in Q methods for PHP scripts1+76 / −8
2026-07-20c47141bUpdatedUpdated README to highlight the ability to handle 10x more traffic1+21 / −2
2026-07-20dd06d06AddedAdded support for Windows5+211 / −18
2026-07-21dce9b96OtherStarted handling websockets using long-lived PHP processes10+2030 / −24
2026-07-215983f11AddedAdded support for legacy scripts via CGI mode instead of CLI SAPI6+559 / −65
2026-07-21a99b9feAddedAdded tests12+577 / −0
2026-07-21901f371OtherFinalized carve-out for legacy PHP compatibility using CGI SAPI3+460 / −4
2026-07-21ce8cfacOtherQbix Server is now faster than nginx even on static files (with keep-alive)6+902 / −387
2026-07-21b2cf9c7OtherHighlighted ease-of-use for making safe-by-default, real-time apps in README1+37 / −0
2026-07-2142ed5a5AddedAdded support for socket.io and simple JSON websocket payloads via /Q/socket.js8+1465 / −400
2026-07-2162d9b23AddedAdded a cron-like scheduler in the web server, to kick off CLI PHP scripts5+246 / −4
2026-07-21bdac23bAddedAdded support for hot reload, start, stop, restart, and virtual hosts9+469 / −10
2026-07-218d44599AddedAdded socket->disconnect() method for use by child processes4+18 / −1
2026-07-22c36cc98AddedAdded automatic PSR-4 support for class autoloading config4+108 / −6
2026-07-23e421368AddedAdded tests, hardening and bug fixes14+443 / −17
2026-07-23e1021c2OtherREADME.md added table showing how server takes care of most things now1+27 / −0
2026-07-24c7b9146AddedAdded support for php://input and simplified RegExconfig7+358 / −16
2026-07-27cd3b4b2AddedAdded welcome page and getting started instructions. Made default error pages a lot friendlier.10+743 / −40
2026-07-271dec563OtherMerged: now there's a friendly welcome page and getting started instructions0+0 / −0
2026-07-2705c4ee2OtherMade webserver control panel more powerful and useful3+188 / −26
2026-07-27a1cc65cOtherImproved control panel and added a playground for getting started7+148 / −25
2026-07-27ebad1f6OtherMade control panel able to better manage apps and plugins4+233 / −28
2026-07-2801c44deOtherImproved handling of temp files, chunked encoding, HTTP input5+142 / −19
2026-07-29c9912beOtherBundled optional Qbix front-end assets. Server went from ~0.5MB to ~1.5MB263+51089 / −4
2026-07-29f2bb847AddedAdded support for Windows shortcuts and Mac aliases to act as symlinks3+282 / −8
2026-07-2901dff5fOtherImproved first-class support for directory listings and image galleries7+1566 / −53
2026-07-29599f11aAddedAdded minimal custom versions of Handlebars and jQuery5+279 / −15
2026-07-2916828c1OtherImproved optional minimal jQuery drop-in replacement2+18 / −12
2026-07-2948ae3a1AddedAdded support for Save-Data and Accept headers for images3+36 / −15
2026-07-29025ecacOtherNow Qbix Server can power federated and distributed web apps8+1614 / −33
2026-07-292e86f0dOtherStarted parsing PHPDoc, YUIDoc for public API discovery endpoints2+359 / −20
2026-07-290bceb7cAddedAdded 11 more entries to Features table in README.md1+17 / −5
2026-07-29673e442OtherLegacy PHP scripts should replace header() with Q_Response::header() calls3+100 / −75
2026-07-30ff2b029UpdatedFixed issues 3 and 46+172 / −127
2026-07-303f0b451UpdatedFixed issue 52+52 / −22
2026-07-30914b41fUpdatedFixed issues 1 and 22+90 / −5

2026-08 (35 changes)

DateCommitKindChangeFiles+/−Release
2026-08-04fd97f5eOtherImproved --app mode and compressed caching51+15434 / −3070
2026-08-04b757c60OtherAchieved parity with Qbix PHP webserver features51+15434 / −3070
2026-08-0601e71a9UpdatedFixed --app mode, did Platform compatibility audit0+0 / −0
2026-08-10b2c1f69OtherImplemented octane mode with persistent preforked workers11+1184 / −221
2026-08-102b3d8d7OtherAddressed issues 6, 7, 10, 12, 135+273 / −37
2026-08-1154b3933OtherImproved server web dashboard and control panel interface7+116 / −121
2026-08-1142947e2RemovedRemoved webserver's index.html, you can make your own1+0 / −44
2026-08-113cdd7afAddedAdded logging support9+699 / −72
2026-08-111983cf6OtherMade websockets work with socket.io in all modern browsers13+2538 / −204
2026-08-12e69d889OtherImproved dashboard and control panel16+1142 / −110
2026-08-12f310515OtherAddressed issues 14, 15, 1611+192 / −13
2026-08-12530af5fUpdatedFix $_SERVER on the preforked worker path (#14)1+28 / −2
2026-08-20cebc30eOtherMade Qbix webserver methods compatible with Qbix Platform methods7+288 / −488
2026-08-20ab263ebRemovedRemoved U-related and Node-related files36+0 / −6232
2026-08-201bb1c9fOtherBrought README.md up-to-date1+1 / −1
2026-08-205c21db2OtherImproved README.md code examples1+72 / −56
2026-08-2153fba6aOtherAddressed issue 17: favicon shadowing4+8 / −4
2026-08-24645db21AddedAdded support for Server-Sent Events5+149 / −2
2026-08-24293e038AddedAdded github static binary build workflow2+283 / −0
2026-08-24019bcd9RemovedRemove old test/ directory (replaced by tests/)3+0 / −173
2026-08-24025f20eUpdatedFixed github workflows support2+7 / −1
2026-08-24f7a1820UpdatedFixes to webserver to make tests pass2+29 / −19
2026-08-243da7992OtherAutomatically building binaries for Mac, Windows and Linux2+10 / −104
2026-08-241062104AddedAdded automatic tests on GitHub Actions1+104 / −0
2026-08-247dcb94eOtherBuilding self-contained binaries for Mac, Windows and Linux1+4 / −2
2026-08-254983c0bOtherImproved compatibility with Qbix Platform8+381 / −882
2026-08-25223d920OtherImproved building static binaries with GitHub Actions on some environments1+7 / −3
2026-08-25ab326c7OtherImproved GitHub actions integration for automatically building binaries1+11 / −5
2026-08-266fe3bfaOtherReady for v1.0.0 release build1+106 / −99
2026-08-301968668AddedAdded multiple app examples to show how to use the server32+2635 / −13
2026-08-30da88851AddedAdded multiple app examples to show how to use the server50+2877 / −13
2026-08-3010b0880MergedMerge pull request #18 from zattak1/fix/server-vars-preforked-path0+0 / −0
2026-08-307a812ceOtherImproved examples showcasing webserver features0+0 / −0
2026-08-30ed49cd6MergedMerge branch 'main' of https://github.com/Qbix/webserver0+0 / −0
2026-08-31e021010AddedAdded examples of writing more secure apps, and improved README11+340 / −100

2026-09 (631 changes)

DateCommitKindChangeFiles+/−Release
2026-09-07c57a8e0OtherImplemented forking off more workers to send large files1+166 / −15
2026-09-07b2820feMergedMerge branch 'main' of https://github.com/Qbix/webserver0+0 / −0
2026-09-07243d1baAddedAdded compatibility with Laravel, Symfony, Wordpress, Drupal, Joomla etc.4+1932 / −2
2026-09-076b43dd1OtherFinalized standalone binaries for Linux, and MacOS6+746 / −123
2026-09-178e69b26OtherMade existing PHP codebases run 12x faster than with Swoole and FrankenPHP13+765 / −824
2026-09-19f8d92cfOtherImproved docs, dashboard, control panel and added Windows support32+10005 / −3087
2026-09-216f73688OtherStop UPX-packing the binary, which corrupted every Linux release3+32 / −20
2026-09-21a543313OtherBuild the PHP micro SAPI before copying source into the image1+8 / −6
2026-09-21c53ff6eOtherKeep the builder image so the cached PHP build survives1+4 / −1
2026-09-21da1a605OtherRender phpinfo() as HTML instead of collapsed plain text2+83 / −2
2026-09-2174bde3fOtherRebuild phpinfo()'s HTML page from its plain-text output5+395 / −44
2026-09-21722cc2dOtherMatch phpinfo's own markup rather than approximating it2+448 / −144
2026-09-21d36ef6dOtherLet the document root be listed like any other directory3+141 / −7
2026-09-21db62801UpdatedChange package name from qbix/server to se7enxweb/qbox-webserver1+1 / −1
2026-09-215741883UpdatedUpdated: Merged the micro binary build fixes from fwoldt/qbix_webserver, which stop the Linux releases shipping a corrupt executable and stop every build rebuilding PHP from source.0+0 / −0
2026-09-21e8cd8d2OtherShim session_id() instead of calling PHP's1+47 / −5
2026-09-21822c531UpdatedFixed: Fixed the package name, which read se7enxweb/qbox-webserver where the project is qbix, so the name composer resolves matches the repository it comes from.1+1 / −1v0.0.1
2026-09-218fe2984UpdatedFixed: Fixed the package name, which read se7enxweb/qbox-webserver where the project is qbix, so the name composer resolves matches the repository it comes from.1+1 / −1
2026-09-21449c030OtherLet the Docker build pick the PHP version1+9 / −5
2026-09-2181b112fOtherParse the sources before packaging them into the binary1+7 / −0
2026-09-21685d86cOtherCarry cookies from the worker to the response4+152 / −17
2026-09-21ea59abaOtherLeave autoloaders registered between requests3+145 / −6
2026-09-211c5c155OtherRun each script from its own directory3+142 / −0
2026-09-21ce8ce7bOtherWrite the transform's replacements fully qualified3+168 / −2
2026-09-21047f744OtherDeclare $context on the stream wrapper so notices stay out of bodies3+147 / −0
2026-09-219fc5c27OtherKeep idle octane workers alive past default_socket_timeout3+119 / −1
2026-09-218457079OtherReport SCRIPT_NAME as the script's path, not its basename3+146 / −2
2026-09-2132d5b07OtherCarry binary response bodies through the worker socket3+164 / −0
2026-09-21d4ac159OtherFall back to default_mimetype when a script sets no Content-Type3+120 / −1
2026-09-21936b449OtherKeep a closure in a static, reset everything else4+158 / −9
2026-09-21509d94bOtherMade it easier to migrate from Apache, NGinX, Caddy14+1592 / −25
2026-09-2249430bcAddedAdded automatic logs, metrics, and multisig security22+2795 / −3089
2026-09-2227e7501AddedAdded: Added a setting naming globals an application keeps between requests.2+23 / −0
2026-09-22a90fabbUpdatedFixed: Fixed a dropped connection killing the server through its own event loop.1+40 / −2
2026-09-22041c4beUpdatedFixed: Fixed fclose() on an already-closed handle taking the whole server down.3+15 / −15
2026-09-22aba6bbdUpdatedFixed: Fixed corrupted TLS records when a file over 1MB was served from a forked child.1+18 / −3
2026-09-2226106fbUpdatedFixed: Fixed large responses being truncated because the count fwrite() returned was discarded.1+29 / −7
2026-09-22547c11dUpdatedFixed: Fixed exit and die ending the worker instead of the request.2+102 / −0
2026-09-2264da466UpdatedFixed: Fixed a Location header returning 200, so redirects were not redirects.2+30 / −1
2026-09-220a4a096UpdatedFixed: Fixed the file wrapper raising for a missing path, which silently broke a hosted application char set.1+23 / −5
2026-09-228dbe533UpdatedFixed: Fixed a raw Set-Cookie header being dropped whenever a script also called setcookie().1+31 / −12
2026-09-22160aef2MergedMerge remote-tracking branch 'fwoldt/fix/do-not-upx-pack-micro-binary' into maintain0+0 / −0
2026-09-22c4f774eMergedMerge remote-tracking branch 'fwoldt/fix/idle-worker-502-after-socket-timeout' into maintain0+0 / −0
2026-09-22b7c8ba8MergedMerge remote-tracking branch 'fwoldt/fix/default-content-type-on-php-responses' into maintain0+0 / −0
2026-09-222b2e852MergedMerge remote-tracking branch 'fwoldt/fix/phpinfo-html-under-cli-sapi' into maintain0+0 / −0
2026-09-22226286aMergedMerge remote-tracking branch 'fwoldt/fix/root-directory-listing' into maintain0+0 / −0
2026-09-22b267aafMergedMerge remote-tracking branch 'fwoldt/fix/setcookie-crosses-worker-boundary' into maintain0+0 / −0
2026-09-2236964c4MergedMerge remote-tracking branch 'fwoldt/fix/session-id-shim' into maintain0+0 / −0
2026-09-22fc5d4a9MergedMerge remote-tracking branch 'fwoldt/fix/stream-wrapper-context' into maintain0+0 / −0
2026-09-22762e6fcMergedMerge remote-tracking branch 'fwoldt/feat/php-version-selectable' into maintain0+0 / −0
2026-09-22aef81edMergedMerge remote-tracking branch 'fwoldt/fix/keep-request-autoloaders' into maintain0+0 / −0
2026-09-2246fee0fMergedMerge remote-tracking branch 'fwoldt/fix/chdir-to-script-directory' into maintain0+0 / −0
2026-09-222905175MergedMerge remote-tracking branch 'fwoldt/fix/script-name-keeps-its-path' into maintain0+0 / −0
2026-09-22cdd43a8MergedMerge remote-tracking branch 'fwoldt/fix/transform-fully-qualified' into maintain0+0 / −0
2026-09-223ebd8b3MergedMerge remote-tracking branch 'fwoldt/fix/do-not-reset-new-class-statics' into maintain0+0 / −0
2026-09-22de80393MergedMerge branch 'fix/keep-globals-setting' into maintain0+0 / −0
2026-09-224177344MergedMerge branch 'fix/event-loop-survives-dead-connections' into maintain0+0 / −0
2026-09-22bdb74d2MergedMerge branch 'fix/guard-closed-stream-handles' into maintain0+0 / −0
2026-09-22af0cee1MergedMerge branch 'fix/no-fork-for-tls-connections' into maintain0+0 / −0
2026-09-2299a9392MergedMerge branch 'fix/headers-write-every-byte' into maintain0+0 / −0
2026-09-22a113ff3MergedMerge branch 'fix/exit-ends-the-request-not-the-worker' into maintain0+0 / −0
2026-09-22bf8cbc9MergedMerge branch 'fix/location-header-means-redirect' into maintain0+0 / −0
2026-09-22bde1da2MergedMerge branch 'fix/file-wrapper-does-not-raise-for-missing-paths' into maintain0+0 / −0
2026-09-22ec6f957MergedMerge branch 'fix/raw-set-cookie-survives-the-shim' into maintain0+0 / −0
2026-09-227655911UpdatedFixed: Fixed a raw Set-Cookie header being dropped whenever a script also called setcookie().2+45 / −12
2026-09-22597c37bMergedMerge branch 'fix/raw-set-cookie-survives-the-shim' into maintain0+0 / −0v0.0.2.1
2026-09-22dc3dc45UpdatedFixed: Fixed HTTPS and REQUEST_SCHEME never being set, so every redirect over TLS pointed at http.1+29 / −1
2026-09-22683eec6MergedMerge branch 'fix/tell-the-worker-the-connection-is-tls' into maintain0+0 / −0v0.0.2.2
2026-09-2163e3f04OtherBundle gd so the image pipeline works in the binary2+18 / −8
2026-09-211d8852fOtherBundle the XML, iconv and intl extensions2+5 / −5
2026-09-2261bf785OtherBundle mysqli, curl, bcmath and exif in the binary2+5 / −5
2026-09-22196078dMergedMerge pull request #2 from fwoldt/feat/bundle-mysqli-curl-bcmath-exif0+0 / −0
2026-09-2224359a7MergedMerge branch 'Qbix:main' into main0+0 / −0
2026-09-22f9c18d6MergedMerge branch 'Qbix:main' into main0+0 / −0
2026-09-2239612e4MergedMerge branch 'Qbix:main' into maintain0+0 / −0
2026-09-226fd5766UpdatedFixed: Fixed the automatic worker count choosing a pool the machine cannot run, by measuring what a worker costs instead of assuming 200KB.1+33 / −4
2026-09-2232b38dbMergedMerge branch 'fix/size-the-worker-pool-from-measured-cost' into maintain0+0 / −0
2026-09-22df221e7MergedMerge remote-tracking branch 'origin/maintain' into maintain0+0 / −0
2026-09-22545d6c2UpdatedFixed: Fixed the worker limit prompt blocking a start that no person is watching, so a service manager can no longer be left waiting on a question.1+34 / −5
2026-09-22344e877MergedMerge branch 'fix/do-not-prompt-when-nobody-can-answer' into maintain0+0 / −0
2026-09-2232327c8MergedMerge remote-tracking branch 'fwoldt/fix/binary-response-bodies' into maintain0+0 / −0
2026-09-2253d6a94UpdatedFixed: Fixed every file upload failing before the application saw it, by carrying a request body that is not valid UTF-8 through to the worker.1+50 / −2
2026-09-22e53402aMergedMerge branch 'fix/carry-binary-request-bodies-to-the-worker' into maintain0+0 / −0
2026-09-227779b2fUpdatedFixed: Fixed is_uploaded_file() refusing every upload the pool parsed, so an application could not accept a file that had arrived intact.2+31 / −1
2026-09-22bfd3703MergedMerge branch 'fix/uploads-pass-the-check-that-accepts-them' into maintain0+0 / −0v0.0.2.5
2026-09-22b4ccee6OtherDeclare the property the reader catch assigns to1+11 / −0
2026-09-22a3c2980OtherStop the file wrapper losing writes that take a lock1+23 / −0
2026-09-22e7cd4eeOtherActually switch on the reverse proxy cache2+18 / −0
2026-09-223d2962cMergedMerge pull request #3 from fwoldt/fix/declare-lasterror-on-streamselect0+0 / −0
2026-09-223aaa8edMergedMerge pull request #4 from fwoldt/fix/file-wrapper-loses-locked-writes0+0 / −0
2026-09-22b7e725eMergedMerge pull request #5 from fwoldt/fix/switch-on-the-reverse-proxy-cache0+0 / −0v0.0.2.6
2026-09-2274e0878OtherSweep expired entries out of the reverse proxy cache3+91 / −0
2026-09-225867f25MergedMerge pull request #6 from fwoldt/fix/sweep-expired-cache-entries0+0 / −0v0.0.2.7 perf/measure-wrapper-vs-transform perf/count-transforms-per-request perf/cheap-checks-in-the-stream-wrapper
2026-09-22b5c6f3eOtherRebuild bin/qbixserver.phar when its sources change4+172 / −2
2026-09-2264bcd25OtherRemember that a file needs no transform, so it is not tokenized on every request1+30 / −2
2026-09-22fbed426MergedMerge branch 'fix/cache-the-files-that-need-no-transform' into maintain0+0 / −0v0.0.2.8
2026-09-223481d1eMergedMerge pull request #7 from fwoldt/fix/rebuild-the-phar-on-release0+0 / −0
2026-09-22038dc75OtherRebuild bin/qbixserver.phar, which was missing two files and differed in ten more1+0 / −0v0.0.2.9
2026-09-226385e78OtherLog and count a pooled response when it goes out, not when it is dispatched2+80 / −6
2026-09-22b2fbe0dOtherLet the access line be configured, and stop claiming HTTP/1.12+131 / −8
2026-09-22547b01dOtherLet a static file say how long it may be kept2+40 / −4
2026-09-220711ec1MergedMerge branch 'feat/configurable-cache-lifetime-for-static-files' into maintain0+0 / −0
2026-09-22769be5bOtherRebuild bin/qbixserver.phar for the static cache lifetime change1+0 / −0v0.0.3.0
2026-09-22876f025MergedMerge pull request #9 from fwoldt/fix/pooled-responses-reach-the-log0+0 / −0
2026-09-2206dbc4eMergedMerge pull request #8 from fwoldt/feat/configurable-access-log-format0+0 / −0
2026-09-2277a4028OtherRebuild bin/qbixserver.phar for the access log changes1+0 / −0v0.0.3.1
2026-09-22d7ff28eOtherHTTP/2 wave 1: HPACK, verified against the specification's own vectors2+683 / −0
2026-09-222f3d25cOtherHTTP/2 wave 2: frames and the connection state machine, answering a real client3+845 / −0
2026-09-22a378de7OtherHTTP/2 wave 3: negotiate it on the real listener and answer from the pool3+264 / −12
2026-09-22ddfa0ebMergedMerge branch 'feat/http2' into maintain0+0 / −0
2026-09-22515cf79OtherHTTP/2 wave 4: a page instead of a blank window, and it is configurable4+362 / −3
2026-09-221d50f2dOtherRebuild bin/qbixserver.phar for HTTP/21+0 / −0v0.0.4.0
2026-09-22aadc2deOtherHTTP/2 wave 4: a page instead of a blank window, and it is configurable4+362 / −3
2026-09-2200b1578OtherHTTP/2 wave 5: compress the body, and stop overrunning the flow-control windows1+119 / −17
2026-09-22615a2f9MergedMerge branch 'feat/http2' into maintain0+0 / −0
2026-09-226cad614OtherRebuild bin/qbixserver.phar for the HTTP/2 body fixes1+0 / −0v0.0.4.1
2026-09-22b2385ffMergedMerge branch 'feat/http2' into maintain0+0 / −0
2026-09-2253893c2UpdatedFix HTTP/2 responses never being compressed, because the test for it could not load1+35 / −4
2026-09-220bbfa7aOtherRebuild bin/qbixserver.phar1+0 / −0v0.0.4.2
2026-09-22eac4791UpdatedFix HTTP/2 costing 800ms a request, by draining the TLS buffer instead of reading once1+21 / −2
2026-09-221a691d9OtherRebuild bin/qbixserver.phar1+0 / −0v0.0.4.3
2026-09-221b26a58UpdatedFix HTTP/2 rendering every page from scratch, by consulting the response cache1+28 / −1
2026-09-22a786ec6MergedMerge branch 'feat/http2' into maintain0+0 / −0
2026-09-22f65967bOtherRebuild bin/qbixserver.phar1+0 / −0v0.0.4.4
2026-09-2205d76c9UpdatedFix the TLS handshake stalling on a timer instead of completing1+26 / −1
2026-09-2262c3cadMergedMerge branch 'fix/tls-handshake-does-not-wait-for-a-timer' into maintain0+0 / −0
2026-09-22b0be81fOtherLet a TLS session be resumed, by giving the listener one context1+41 / −16
2026-09-22e3027cfMergedMerge branch 'fix/tls-sessions-can-be-resumed' into maintain0+0 / −0
2026-09-2273ec5a5OtherRetry the TLS handshake without a test that is always false1+15 / −5
2026-09-2294878f7MergedMerge branch 'fix/tls-handshake-retries-promptly' into maintain0+0 / −0
2026-09-228d475b6OtherRebuild bin/qbixserver.phar for the TLS handshake and session context changes1+0 / −0v0.0.4.5
2026-09-228b591edOtherSend the whole of a response, whatever the window or the socket2+130 / −8
2026-09-22a57c534OtherLet a request ask the cache to renew an entry rather than read it1+37 / −0
2026-09-228f8270dMergedMerge branch 'fix/http2-truncated-responses' into maintain0+0 / −0
2026-09-22b6ce4c5MergedMerge branch 'feat/cache-refresh-header' into maintain0+0 / −0
2026-09-22b7b005aOtherRebuild bin/qbixserver.phar for the response truncation and cache refresh changes1+0 / −0
2026-09-22c97ba06AddedAdd HTTP/2 tests for a small flow-control window and a full socket buffer3+191 / −0v0.0.4.6
2026-09-22a7123dcOtherSend the cookies a script set over HTTP/2 as well1+22 / −0
2026-09-22f815713OtherKeep the port out of SERVER_NAME1+24 / −1
2026-09-22479d4ddMergedMerge branch 'fix/http2-drops-cookies' into maintain0+0 / −0
2026-09-227ef1595MergedMerge branch 'fix/server-name-carries-the-port' into maintain0+0 / −0
2026-09-22b6da4efAddedAdd an HTTP/2 test for the cookies a script sets1+88 / −0
2026-09-22d1812eeOtherRebuild bin/qbixserver.phar for the cookie and SERVER_NAME fixes1+0 / −0v0.0.4.7
2026-09-22bce8816OtherApply the source transform to code included from an archive1+48 / −0
2026-09-22a815163MergedMerge branch 'fix/compat-misses-phar-includes' into maintain0+0 / −0
2026-09-2213a442bOtherRebuild bin/qbixserver.phar for the archive include fix1+0 / −0v0.0.4.8
2026-09-2285fa820OtherBound every resource an HTTP/2 peer can make the server hold4+378 / −1
2026-09-22cfab96cMergedMerge branch 'fix/http2-resource-limits' into maintain0+0 / −0
2026-09-2239be3c1OtherRefuse a header block that lies about its own lengths2+54 / −1
2026-09-22019e092MergedMerge branch 'fix/hpack-reads-past-the-buffer' into maintain0+0 / −0
2026-09-227a7d2a5AddedAdd a unit suite that needs no server, and run it first5+526 / −0
2026-09-224fc1075MergedMerge branch 'feat/unit-test-suite' into maintain0+0 / −0
2026-09-22e3edc7cOtherRebuild bin/qbixserver.phar for the resource limits and HPACK bounds fixes1+0 / −0v0.0.4.9
2026-09-225c1074aOtherLeave a nullsafe method call alone2+191 / −0
2026-09-220ba0af6OtherMake the HTTP/2 path guard testable, and test it2+151 / −1
2026-09-22b696d72MergedMerge branch 'fix/compat-misses-nullsafe-calls' into maintain0+0 / −0
2026-09-223388c19MergedMerge branch 'feat/path-safety-tests' into maintain0+0 / −0
2026-09-22c87b467OtherRebuild bin/qbixserver.phar for the nullsafe transform fix1+0 / −0v0.0.4.10
2026-09-229ddf23bAddedAdd a load sweep that says where the server stops getting faster1+565 / −0
2026-09-22de2bd6fMergedMerge branch 'feat/load-benchmark' into maintain0+0 / −0
2026-09-22e46557cOtherDisable Nagle on the TLS listener, as the plain one already did1+29 / −0
2026-09-22f61e059MergedMerge branch 'fix/tls-listener-leaves-nagle-on' into maintain0+0 / −0
2026-09-2214bb0c3OtherRebuild bin/qbixserver.phar for the TLS Nagle fix1+0 / −0v0.0.4.11
2026-09-22b553035OtherStop storing a cached body inside the JSON that describes it2+185 / −4
2026-09-227568351MergedMerge branch 'fix/cache-body-inside-json' into maintain0+0 / −0
2026-09-2251d3f7cOtherRebuild bin/qbixserver.phar for the cache entry format1+0 / −0v0.0.4.12
2026-09-224174b60OtherStore the compressed body, instead of compressing it again on every hit3+280 / −0
2026-09-2230d2d42MergedMerge branch 'fix/cache-recompresses-every-hit' into maintain0+0 / −0
2026-09-22e691a31OtherRebuild bin/qbixserver.phar for the pre-compressed cache1+0 / −0v0.0.4.13
2026-09-2254161e3AddedAdded: Added conditional request handling to the response cache, so a reload of a page the browser already holds sends headers instead of the page.3+1024 / −29
2026-09-220deca9aAddedAdded: Added stale-while-revalidate and negative caching, so an expiry costs one render rather than one per waiting request, and a not-found is not rendered again for every caller.2+368 / −0
2026-09-22d5d3835UpdatedUpdated: Updated the request path so a cached response is recognised before the routing runs, the listen backlog is a queue rather than a cliff, and every response carries a Date.4+487 / −19
2026-09-229a32ab6AddedAdded: Added optional whitespace collapsing for cached HTML, so the document a browser parses is not mostly indentation.2+253 / −0
2026-09-220ac79ddAddedAdded: Added shared-dictionary compression for stored entries, off by default, with the measurements that say when it is worth switching on.2+430 / −0
2026-09-22fdeeca1UpdatedUpdated: Updated the README with a configuration reference, worked measurement examples, the security posture and how to contribute.1+331 / −2v0.0.4.14
2026-09-2293536aaOtherRebuild bin/qbixserver.phar from fdeeca11+0 / −0
2026-09-235ea4cb3OtherName the access and error logs2+82 / −10
2026-09-236755078OtherGive a virtual host its own access and error log5+678 / −25
2026-09-2282c31bcMergedMerge pull request #11 from fwoldt/feature/vhost-access-and-error-logs0+0 / −0
2026-09-23fbf6286OtherRebuild bin/qbixserver.phar from 82c31bc1+0 / −0
2026-09-23cd9b844OtherLet the log and the cache be told what permissions to use6+909 / −25
2026-09-23b34d115OtherStop the precompressed cache defaulting to a world-readable directory1+33 / −4
2026-09-23f05ab31MergedMerge pull request #12 from fwoldt/feature/configurable-file-modes0+0 / −0
2026-09-23f2f0978OtherRebuild bin/qbixserver.phar from f05ab311+0 / −0v0.0.4.15
2026-09-2372a0701UpdatedFixed: Fixed a reused response not saying how old it is, so a cache downstream no longer treats an almost-expired page as freshly generated.2+186 / −5v0.0.4.16
2026-09-23d4f7ac8OtherRebuild bin/qbixserver.phar from 72a07011+0 / −0
2026-09-23e56038fUpdatedFixed: Fixed a forked worker inheriting the parent's whole descriptor table, so one visitor's connection is no longer held open by every worker.3+249 / −0
2026-09-233e5de8aMergedMerge branch 'fix/worker-inherits-every-descriptor' into maintain0+0 / −0
2026-09-23c5c019eMergedMerge origin/maintain (phar rebuild) into the descriptor fix0+0 / −0
2026-09-233df93c2OtherRebuild bin/qbixserver.phar from c5c019e1+0 / −0
2026-09-23d1f97caOtherRebuild bin/qbixserver.phar from c5c019e1+0 / −0
2026-09-238f65b20MergedMerge origin/maintain into the rebuilt archive0+0 / −0v0.0.4.18
2026-09-2373f7aabAddedAdded: Added the committed archive's staleness check to the suite a developer runs before a commit, so source drifting from bin/qbixserver.phar is visible then rather than at a release.1+16 / −1
2026-09-23af95afdMergedMerge branch 'fix/phar-check-missing-from-local-suite' into maintain0+0 / −0v0.0.4.19
2026-09-23630e467UpdatedFixed: Fixed the request that fills the cache being served different bytes from every request after it, by handing the caller back the response as it was stored.3+51 / −18
2026-09-2340a273bMergedMerge branch 'fix/miss-serves-different-bytes-than-hit' into maintain0+0 / −0v0.0.4.20
2026-09-234d6e994UpdatedFixed: Fixed WebSocket frames and worker packets being written without checking that they went out whole.2+287 / −8
2026-09-23475a46cUpdatedFixed: Fixed header values being able to write headers of their own, by giving every response one serialiser to go through.4+259 / −26
2026-09-23b5f73b1UpdatedFixed: Fixed a hostname ending in a newline or a hyphen passing validation before it reached certbot, a resolver and the log.4+183 / −11
2026-09-233b73102AddedAdded: Added a test for which content types are worth compressing.1+83 / −0
2026-09-23863ae48UpdatedUpdated: Updated the committed archive to match the sources in this branch.1+0 / −0v0.0.4.21
2026-09-23a9e2fbbUpdatedFixed: Fixed the worker pool counting a short write of a request as a success.4+90 / −32
2026-09-2361e0acaAddedAdded: Added a pre-warm cache that survives a restart, taking startup from 4.7s to 0.6s.3+394 / −15
2026-09-23dd13a5dUpdatedFixed: Fixed the macOS build leg failing, which had been skipping the release job since v0.0.4.19.1+32 / −2
2026-09-23e0233d9UpdatedUpdated: Updated the committed archive to match the sources in this branch.1+0 / −0v0.0.4.22
2026-09-2344bf21cUpdatedFixed: Fixed the server ignoring SIGTERM, so stop and restart work instead of timing out.3+36 / −1
2026-09-2397654a7UpdatedFixed: Fixed every release carrying one frozen name, and stopped a broken macOS binary blocking the other three platforms.1+7 / −3v0.0.4.23
2026-09-23a804a46UpdatedFixed: Fixed --stop and --reload exiting 0 without sending the signal.2+11 / −1
2026-09-23f3e8f50AddedAdded: Added a platform matrix that watches the phar serve a page on systems we ship no binary for.2+274 / −0
2026-09-2369d8dbaAddedAdded: Added musl, DragonFly, illumos, RISC-V and ARMv5 to the platform matrix.1+70 / −0
2026-09-231447c7aUpdatedUpdated: Updated the README to document where this runs, with links that point at this repository's releases.2+106 / −21
2026-09-238fd9221UpdatedFixed: Fixed every platform job failing, on two unrelated causes.2+15 / −7
2026-09-23c8d57bbUpdatedFixed: Fixed the README offering Windows and macOS downloads that do not exist.1+26 / −15
2026-09-231c2a9d0UpdatedFixed: Fixed the BSD jobs dying at startup on a missing tokenizer.1+23 / −6
2026-09-235ad9a2aUpdatedFixed: Fixed the BSD install commands being mangled into one line.1+1 / −1v0.0.4.24
2026-09-2312cd12eUpdatedUpdated: Updated the phar test to wait longer and say why it gave up.1+23 / −4
2026-09-235f9eb78UpdatedFixed: Fixed the BSD jobs losing their package installs to a sudo that is not there.1+4 / −0
2026-09-2332702afUpdatedFixed: Fixed php-cgi mode answering every request with "Class Q_WebServer not found".2+21 / −4
2026-09-23449c436OtherMake forkPerRequest able to log a user in2+40 / −15
2026-09-232b1dfb6UpdatedFixed: Fixed the worker request being written without checking it arrived whole, and made this test say why it failed.3+34 / −2
2026-09-23e71b16fUpdatedUpdated: Updated the Windows download to retry rather than lose the platform to one bad fetch.1+13 / −0
2026-09-230fcfb8cUpdatedFixed: Restored sudo on the BSD package installs, which I had removed in error.1+11 / −11
2026-09-237d70b7fOtherMerged: Merged fix/fork-per-request-loses-headers, so a user can log in with forkPerRequest on.0+0 / −0
2026-09-2371e824fUpdatedFixed: Fixed workers exiting after one request, from a write that handed the socket back non-blocking.2+20 / −3
2026-09-23c29832cUpdatedFixed: Fixed the server dying on FreeBSD after its banner, and added a test for the class of fault behind it.3+229 / −0
2026-09-239a4b222UpdatedFixed: Fixed the last writes that could go out short without anyone noticing, on the IPC pipe and the session file.3+84 / −5
2026-09-234625f71UpdatedFixed: Fixed the Windows build being incapable of failing, and made the job check it produced something.1+24 / −3
2026-09-23f2e434fUpdatedFixed: Fixed the macOS test never starting the server, and withdrew the claim that its binary is broken.2+26 / −12
2026-09-2314809ffUpdatedFixed: Fixed riscv64 by turning off PCRE's JIT, which segfaults under emulation.1+8 / −1
2026-09-2315b18d3AddedAdded: Added the macOS binary to releases; it was never broken.2+13 / −17
2026-09-23d3b2670UpdatedFixed: Fixed the BSDs dying on a missing SQLite3 extension.1+9 / −7
2026-09-23cd81120UpdatedFixed: Pinned the Windows build's spc to a release instead of tracking upstream's tip.1+16 / −3
2026-09-23b84b15aUpdatedFixed: Fixed DragonFly by dropping a sudo its action does not use.1+7 / −2
2026-09-23ca56b0aUpdatedFixed: Fixed a worker answering from its own stat cache when deciding whether a revalidation claim is abandoned.3+28 / −0
2026-09-23d625419UpdatedFixed: Fixed the server resolving contradictory request framing instead of refusing it, which is request smuggling.3+316 / −6
2026-09-23db540e9UpdatedFixed: Fixed six HTTP/2 frames the RFC says must be refused being accepted instead.3+251 / −0
2026-09-2335cd98eUpdatedFixed: Fixed a symbolic link inside the document root serving, and executing, files outside it.3+270 / −3
2026-09-234b8f42aAddedAdded: Added a security page recording what the server refuses and why, for anyone maintaining this or a fork of it.2+200 / −0
2026-09-2300220dcUpdatedFixed: Gave NetBSD a package repository, without which pkg_add finds nothing at all.1+8 / −2v0.0.4.25
2026-09-234494ca1UpdatedFixed: Fixed two tests leaving a server running every time they were run.2+52 / −15
2026-09-238ff7461UpdatedFixed: Fixed the last two BSDs, on two unrelated causes.2+22 / −1
2026-09-2334ca6d9UpdatedFixed: Fixed a signed-in visitor's pages being cached and served to everybody else.3+124 / −1v0.0.4.26
2026-09-23c0ed985UpdatedFixed: Fixed OpenBSD installing nothing at all, and gave NetBSD its missing dependency by name.1+16 / −3
2026-09-235f562e7UpdatedFixed: Fixed the Windows build failing on a line continuation I wrote in the wrong shell.1+5 / −2
2026-09-23f4c3a02UpdatedFixed: Fixed HTTP/2 serving files that HTTP/1.1 refuses, including configuration and .git.2+45 / −2
2026-09-23b663c4eUpdatedFixed: Fixed the Windows build asking for a library spc cannot build there, and made each release describe itself.1+32 / −4
2026-09-234951aeaUpdatedUpdated: Updated the release title to carry the summary rather than repeat the tag.1+14 / −3
2026-09-236fd2b1fUpdatedUpdated: Updated the platform documentation to advertise what this actually runs on, in three honest tiers.1+77 / −57
2026-09-23e1129a9UpdatedUpdated: Updated the Amiga answer to be a map for someone who might attempt it.1+64 / −2
2026-09-23f52b291UpdatedFixed: Fixed the Windows build having no archiver to extract php-src with.1+40 / −0
2026-09-2351e3515UpdatedFixed: Fixed the HTTP/2 route answering the server's own URLs, behind the refusals rather than in front of them.3+148 / −0
2026-09-2335d9a33AddedAdded: Added a changelog, and made a release something you decide to cut rather than something a tag does.3+307 / −27
2026-09-236350966UpdatedFixed: Fixed the dashboard not counting most of what HTTP/2 answers, including every refusal.4+69 / −2
2026-09-23e4e46a0UpdatedFixed: Fixed the dashboard printing its JavaScript escapes instead of the characters they stand for.4+118 / −8
2026-09-2383c830dUpdatedUpdated: Updated the release guidance, which was wrong about what a tag costs.1+54 / −15
2026-09-234002ceeUpdatedFixed: Fixed durations being printed to thirteen decimal places, and a deprecation notice logged once per property.6+209 / −4
2026-09-23a34150cAddedAdded: Added a configurable product-name parameter used across the served /Q/ views.6+166 / −14
2026-09-23277e034AddedAdded: Added a footer to the served views and the build stamp to the version display.7+96 / −6
2026-09-23529e9a4AddedAdded: Added the fork's own shipped version to the display, keeping the upstream number as the engine it is built on.5+53 / −13
2026-09-23a92d73bUpdatedUpdated: Linked the dashboard's Maintained by 7x line to se7enx.com.2+2 / −2
2026-09-237d47fa3AddedAdded: Added a parent-side preload hook, so a heavy framework is loaded once and shared, not once per worker.2+42 / −0
2026-09-230795f46AddedAdded: Added configurable links for the brand name and a maintainer credit.4+75 / −4
2026-09-230fc0c23OtherRebuild bin/qbixserver.phar from 0795f461+0 / −0
2026-09-237f8196bUpdatedFixed: Fixed the worker-memory card reporting several times the memory actually used.3+80 / −7
2026-09-23046db17UpdatedUpdated: Rebuilt bin/qbixserver.phar to match the dashboard fixes.1+0 / −0
2026-09-23083d4e8UpdatedFixed: Fixed the worker-memory reads wedging the whole server at scale.3+37 / −34
2026-09-23873581aAddedAdded: Added swap to the System RAM card, which a percentage of RAM alone hides.1+14 / −2
2026-09-24b23370aOtherRebuild bin/qbixserver.phar from 873581a1+0 / −0
2026-09-2348c00b2AddedAdded: Added an 'exponential' framework preset, so Exponential runs under the server from one setting.4+100 / −5
2026-09-23e4e6660UpdatedUpdated: Rebuilt bin/qbixserver.phar for the exponential preset.1+0 / −0
2026-09-236020928UpdatedUpdated: Updated the package documentation for the preset, the warm-up, and the memory and swap cards.5+127 / −1
2026-09-236a88174UpdatedFixed: Fixed the parent warm-up compiling the application without the source transform.6+257 / −14
2026-09-239b0a00dUpdatedUpdated: Updated the brand heading test for the heading's link to the dashboard.1+4 / −1
2026-09-234fa8b88UpdatedUpdated: Rebuilt bin/qbixserver.phar for the warm-up fix.1+0 / −0
2026-09-2305b7416UpdatedUpdated: Updated the dashboard so its cards and header read at a glance.2+128 / −7
2026-09-2343bcb6eUpdatedFixed: Fixed persistent workers growing without limit, one request at a time.12+1374 / −74
2026-09-23ae56b0dUpdatedUpdated: Rebuilt bin/qbixserver.phar for the worker memory fixes and the dashboard layout.1+0 / −0
2026-09-238b3f72cUpdatedFixed: Fixed includes leaking a resource each, and cached scripts never picking up a changed file.3+265 / −22
2026-09-2396d40d6AddedAdded: Added a way for application code to have its worker replaced after it answers.3+69 / −1
2026-09-238c49a37UpdatedUpdated: Rebuilt bin/qbixserver.phar for the include cache and worker retirement.1+0 / −0
2026-09-2412980d1OtherStop refusing short request bodies as "not a number"3+89 / −0
2026-09-24a661584UpdatedFixed: Fixed cyclic garbage piling up in workers, and exiting workers deleting the server's pid file.4+64 / −2
2026-09-245529b26UpdatedFixed: Fixed exit and die after a keyword ending the worker, and cut wrapper registrations to a dozen a request.5+248 / −24
2026-09-24cf0b7faUpdatedUpdated: Rebuilt bin/qbixserver.phar for the cycle collection, pid file and transform fixes.1+0 / −0
2026-09-24d24f28bUpdatedUpdated: Updated the dashboard's Workers card to label what its numbers count.3+33 / −3
2026-09-24d153c70UpdatedUpdated: Rebuilt bin/qbixserver.phar for the Workers card.1+0 / −0
2026-09-24ab88695UpdatedUpdated: Updated the dashboard escapes test for the cards that now list one count per row.1+7 / −1
2026-09-24080387eOtherTell a pooled request the port it arrived on3+200 / −1
2026-09-240db408dOtherTell a pooled request who is asking4+316 / −4
2026-09-248d0c42cUpdatedFixed: Fixed request bodies of 0-47 and 58-255 bytes being refused as "Content-Length is not a number".3+528 / −0
2026-09-244b70bffUpdatedFixed: Fixed a newly forked worker ending every TLS connection the server had open at that moment.3+190 / −3
2026-09-24d0a172eUpdatedFixed: Fixed file stats and included files going stale within a request or within the same second.4+773 / −20
2026-09-245a1b0fcAddedAdded: Added a dynamic worker pool that runs only the workers it needs, and made a worker's death never cost a request that could be served.9+1513 / −22
2026-09-244cf2ccfMergedMerge pull request #14 from fwoldt/fix/content-length-read-as-char-code0+0 / −0
2026-09-2462d51f4MergedMerge pull request #15 from fwoldt/fix/remote-addr-in-pooled-requests0+0 / −0
2026-09-242d402e2AddedAdded: Added icons, a web app manifest and link previews to the server's own pages.6+759 / −2
2026-09-246eeb99bMergedMerge pull request #16 from fwoldt/fix/server-port-in-pooled-requests0+0 / −0
2026-09-24e9399c8AddedAdded: Added the exception class, file, line and a short trace to the log when a script's exception reaches the worker.3+54 / −0
2026-09-2494b9bc8UpdatedFixed: Fixed the dashboard's Top paths running the count and average time together, and coloured System RAM by severity.3+320 / −15
2026-09-2401204ccUpdatedFixed: Fixed the server's admin surface and cluster join being open to anyone who could reach the port.4+280 / −26
2026-09-244930d46UpdatedFixed: Fixed the medium and low findings of the security audit: request framing, log injection, cache personalisation, dashboard injection, HPACK amplification and IPv6 proxy ranges.8+286 / −23
2026-09-2432c7da2UpdatedFixed: Fixed every browser's HTTP/2 connection failing after the HPACK table-size check, by applying the check only to size updates inside a header block.3+20 / −8
2026-09-24a1bcc26UpdatedFixed: Fixed the dashboard's Live requests (empty memory column, newest entries hidden at the bottom) and TLS visitors being recorded as 0.0.0.0.6+371 / −18
2026-09-2427e543eUpdatedFixed: Fixed browsers that cancel streams across many reloads being disconnected as a rapid-reset attack, and logged why every failing GOAWAY was sent.2+35 / −5
2026-09-24d9ed091UpdatedFixed: Fixed HTTP/2 and HTTP/1.1 requests left unread in the TLS buffer, and a pooled response cancelling the reader of its whole HTTP/2 connection.1+37 / −4
2026-09-24627cda1UpdatedFixed: Fixed a script answered over HTTP/2 in fork-per-request mode closing the whole connection, which left signed-in pages without their header, stylesheets and sub-items.3+176 / −1
2026-09-240c95046UpdatedFixed: Fixed an application's session name and cookie lifetime being ignored, and cached rewrites outliving a change to the rewrite rules.3+216 / −4
2026-09-2451dcaa2UpdatedFixed: Fixed files rewritten after start being served as the warm-up saw them, until a restart.2+75 / −0
2026-09-24717db84AddedAdded: Added a generation marker to the response cache, so a deploy can invalidate every cached page by touching one file.3+144 / −0
2026-09-24c2e899bUpdatedFixed: Fixed the server's own certificate, and the TLS tests' ones, being refused where the system will not sign with SHA-1.6+89 / −10
2026-09-248ad61e3AddedAdded: Added a configuration directory laid out like Debian's /etc/apache2, read from /etc/vc or /etc/qbix.4+395 / −1
2026-09-244ca259eUpdatedFixed: Fixed one hanging test hanging the whole unit run, and leaving the servers it started behind.1+85 / −4
2026-09-249e560bcUpdatedFixed: Fixed one request for an unknown /Q/ path over HTTP/2 hanging the whole server.3+133 / −4
2026-09-24ee64142AddedAdded: Added designs on disk for the server's own pages, so the dashboard, panel, documentation, listing and error pages can be restyled without editing the engine.38+5249 / −2488
2026-09-240bec211MergedMerge maintain into fix/tls-certificates-sha2560+0 / −0
2026-09-245e98dfeUpdatedUpdated: Updated the configuration directory to stack overlay trees on /etc/qbix, and added a distribution option for engines built on this one.11+361 / −53
2026-09-24fbcb3ecAddedAdded: Added qbixconsole and qbixctl: a library-free console and apache2ctl-style control for the server.8+768 / −13
2026-09-24ea95624UpdatedUpdated: Accept GNU and BSD spellings of every option on the qbix command lines.6+209 / −23
2026-09-243e7ded7UpdatedFixed: Fixed a regenerated script running its previous compile when the opcode cache does not check timestamps on every include.2+62 / −6
2026-09-24c7677ccUpdatedUpdated: Merged the unit runner's per-test time limit (pull request #18 by fwoldt).0+0 / −0
2026-09-249454a6aUpdatedUpdated: Accept GNU and BSD spellings of qbixserver.php's one-letter value option, and documented the option styles.3+26 / −5
2026-09-24ac05b79UpdatedUpdated: Merged SHA-256 signing for the server's own certificate and the TLS tests' ones (pull request #17 by fwoldt).0+0 / −0
2026-09-24c2ff4baAddedAdded: Added a self-looking-after HTTPS certificate: a self-signed one made through a chain of providers, live certificate swaps, and HTTPS before HTTP.23+1745 / −106
2026-09-249c37306AddedAdded: Added certificate sources for your own files, archives and PKCS#12 bundles, and built-in Let's Encrypt (any ACME CA), with a guide in docs/https.md.27+2621 / −543
2026-09-24b83dde0UpdatedFixed: Fixed --verify-binary printing PHP warnings for an unsigned file, and --sign-binary exiting 0 when it could not sign.2+27 / −15
2026-09-24eca5becUpdatedUpdated: Run the tests with PHP's own JIT mode, tracing, instead of setup-php's opcache.jit=1235.1+15 / −0
2026-09-24ef34f90UpdatedFixed: Fixed a pooled script answering HEAD with its body and seeing no PATH_INFO, found once CI reached the steps after the main suite.6+41 / −11
2026-09-241dc18e5UpdatedFixed: Fixed the source transform writing a script's code twice under PHP 8.2 and 8.3's function JIT (opcache.jit=1235).3+73 / −17
2026-09-24ee0e885AddedAdded: Added a toolbar linking the server's own views, and pages on the layout, console, designs, response cache and workers.19+828 / −18
2026-09-242e7ba1aUpdatedFixed: Fixed a file rewritten while a worker sat idle being served once more from the old compile, and a deprecation notice landing in response bodies.3+19 / −0
2026-09-24111be01UpdatedUpdated: Updated the worker ceiling and include-rewrite tests to hold on any build, with or without opcache.4+28 / −5
2026-09-241cead14AddedAdded: Added QBIX_SHIP_VERSION to build-phar.php, so a release's phar shows the version being released rather than the one before it.1+9 / −2
2026-09-2405a4023UpdatedUpdated: Updated the changelog with the v0.0.4.27 section, covering everything since v0.0.4.25.1+115 / −1
2026-09-245a27804UpdatedUpdated: Rebuilt bin/qbixserver.phar for v0.0.4.27.1+0 / −0v0.0.4.27
2026-09-2426e80c1AddedAdded: Added two documentation pages of lessons, general and hard-won, listed in the documentation viewer under Lessons.7+464 / −0
2026-09-2441ac4e6UpdatedUpdated: Rebuilt bin/qbixserver.phar for the lessons pages in the documentation viewer.1+0 / −0
2026-09-24886ab81UpdatedFixed: Fixed an include of a file being rewritten in place occasionally running the head of one version joined to the tail of the next.3+146 / −2
2026-09-249952041UpdatedFixed: Fixed the OpenBSD and NetBSD platform jobs, which had failed on every run since they were added.1+20 / −1
2026-09-24ad858feUpdatedUpdated: Print the Windows PHP build's own log when that build fails.1+17 / −0
2026-09-24e1d85e6UpdatedFixed: Fixed the panel answering the application's 404 over HTTP/2, the component cache that could not be switched on, and settings the worker pool ignored.13+1100 / −66
2026-09-244cbc7d6AddedAdded: Added qbixctl panel:password, to set or change the control panel password from the command line.1+70 / −0
2026-09-242cb19ebUpdatedUpdated: Updated the documentation and help text to what the code does.11+83 / −31
2026-09-243130223AddedAdded: Added a default panel key that must be changed on first sign-in, strict password rules with bcrypt storage, and a lockout, built on panel observers.15+2374 / −227
2026-09-2403525e1AddedAdded: Added docs/passwords.md, the panel password page: storage, every rule with an example, settings, the default key, lockout and the CLI.7+173 / −6
2026-09-243462c8cUpdatedUpdated: Kept inline code on the panel refusal page from breaking mid-word at narrow widths.3+5 / −4
2026-09-245f12e4eAddedAdded: Added the PHP extension manifest and the ext:* commands, so every build, check and document works from one definition of the extensions the server provides.10+2803 / −1
2026-09-24e3c07c1UpdatedUpdated: Let digits, symbols and separators repeat in a panel password, and forbid only the whole host name, so real operator keys are accepted.7+20 / −13
2026-09-24c36885fOtherRebuild bin/qbixserver.phar from e3c07c11+0 / −0
2026-09-245d82231UpdatedUpdated: Start every command-line script with #!/usr/bin/env and make it executable.19+13 / −4
2026-09-24a15b6c3UpdatedFixed: Fixed the server dying at start with a document root directly under /, such as a container's /app.3+89 / −1
2026-09-243109c30UpdatedUpdated: Rebuilt bin/qbixserver.phar for the document-root-under-/ fix.1+0 / −0
2026-09-240d728d9AddedAdded: Added docs/requirements.md and docs/extensions.md: the PHP extensions the server provides, and how to check, install and build them.5+461 / −2
2026-09-248460b96AddedAdded: Added the extension check at start, in /Q/health and on the dashboard, so a PHP missing part of the standard set says so and how to fix it.11+197 / −1
2026-09-243a1a6ffUpdatedFixed: Fixed ext:build in the source kit rebuilding the phar from a tree without its designs.3+11 / −3
2026-09-242d9c4ceUpdatedUpdated: Show the configured brand in the control panel header, linked to the panel, as the dashboard does.3+2 / −2
2026-09-2419e2a44AddedAdded: Added the Q shell, a drop-down console on every server view.37+6569 / −8
2026-09-24cf8806eAddedAdded: Added a Shell activity card to the dashboard.3+16 / −0
2026-09-24b3ef85aAddedAdded: Added the Q shell documentation: the terminal, the language, tiers, safety, jobs and the REST API.2+179 / −0
2026-09-243b3fa0eUpdatedUpdated: Rebuilt the phar with the Q shell and its documentation.1+0 / −0
2026-09-247c9e60eUpdatedUpdated: Give the dashboard the control panel's layout: the same header, navigation, colours and cards.6+130 / −40
2026-09-24c06f2a3UpdatedUpdated: Rebuilt the phar with the dashboard's new layout.1+0 / −0
2026-09-24b313191UpdatedUpdated: Made the dashboard and panel faster and easier to read: a small header icon, legible text sizes, a week-long asset cache, and no redirect for this machine.11+67 / −64
2026-09-24d466564AddedAdded: Added a release build for every platform, PHP version and variant, computed from the extension baseline, with a source kit and checksums.8+482 / −131
2026-09-24cf54d81AddedAdded: Added deb and rpm packages for Debian 12 and 13, Ubuntu 22.04 and 24.04, and EL 9 and 10, each installed and checked in a clean container.15+395 / −3
2026-09-24c919a4dAddedAdded: Added Docker images for every PHP version and variant, for amd64 and arm64, with Oracle, Firebird and ODBC drivers in standard and full.8+555 / −0
2026-09-24481ea2aUpdatedFixed: Fixed the NetBSD platform job on a flaky package mirror, and gave the image-based jobs the sockets extension the server's baseline lists.1+13 / −12
2026-09-2420af3cfAddedAdded: Added the extension baseline to the phar platform check: the server's own extensions must all be there, and the rest is reported.1+21 / −0
2026-09-2450b6450AddedAdded: Added the documentation for the variants, the Docker images and the OS packages.5+431 / −4
2026-09-24b2efe08UpdatedUpdated: Rebuilt bin/qbixserver.phar for the documentation viewer's new pages.1+0 / −0
2026-09-24d5d1a29UpdatedFixed: Fixed the server stopping minutes after the shell was used with a dashboard open, and the shell's commands failing without a word.9+134 / −13
2026-09-240fd54e0AddedAdded: Added one registry of the PHP applications the server recognises, used by the panel's Apps and Frameworks tabs and the autohost, so an installation served from its own directory is no longer invisible.14+1558 / −246
2026-09-2467f6e33UpdatedUpdated: Documented what the panel's Apps and Frameworks tabs detect, where they look, and how version files are read.1+57 / −1
2026-09-24d76b67eUpdatedUpdated: Rebuilt bin/qbixserver.phar with the application registry.1+0 / −0
2026-09-24f8478c2UpdatedUpdated: Show the dashboard cards two across on a phone instead of four, so their values no longer wrap mid-number.3+2 / −2
2026-09-24db0dd8eUpdatedFixed: Fixed a signed-in control panel session not being recognised by the dashboard and the other /Q/ views.10+136 / −41
2026-09-24fd62e76UpdatedUpdated: Show the shell's connection in its title bar, keep it open with a message when the session ends, and test every shell route's sign-in rule.4+197 / −8
2026-09-24114b91dUpdatedFixed: Fixed the control panel flashing its sign-in form on reload for a signed-in visitor.8+147 / −29
2026-09-2472b6842UpdatedUpdated: Rebuilt bin/qbixserver.phar for the panel opening on the right view.1+0 / −0
2026-09-24a8d54e4AddedAdded: List the Q shell page in the documentation's Operations menu.2+4 / −2
2026-09-240480a8eAddedAdded: Added the installation's own tools to the shell as exp commands when the document root is an Exponential installation.5+180 / −1
2026-09-244070f91UpdatedFixed: Fixed the shell handing the server's sockets and environment to every command, and tightened what the shell trusts.9+310 / −25
2026-09-24bce0d3dUpdatedUpdated: Rebuilt the phar with the shell's security fixes and exp commands.1+0 / −0
2026-09-24255b4c5AddedAdded: Added bookmarkable control panel tabs and a Logs tab that filters by text, method and status.9+1002 / −87
2026-09-24f6ccbe8AddedAdded: Added finding a running server without its pid file to qbixctl status, stop and graceful.3+229 / −4
2026-09-2494fb17bAddedAdded: Added the qbix distribution, fuller detection of Qbix apps with a site information command, and the same command for the served application.8+378 / −0
2026-09-24cb81c1dUpdatedUpdated: Rebuilt the phar with the panel tabs and logs, server discovery and the qbix distribution.1+0 / −0
2026-09-241be9a47AddedAdded: Added a separate credential and session store for the control panel, in the configuration tree and its state directory, trusted only when it passes a strict ownership check.10+1068 / −23
2026-09-24916624fUpdatedUpdated: Documented where the control panel keeps its credentials and sessions, the rule they must pass, panel:check and the move from local/panel.json.4+78 / −8
2026-09-240203084UpdatedUpdated: Rebuilt bin/qbixserver.phar with the control panel's credential store.1+0 / −0
2026-09-2417a4842OtherMerged the control panel tabs and logs with the panel data store, and rebuilt the phar from the merged tree.0+0 / −0
2026-09-240cd5f9cAddedAdded: Added window controls to the shell (start or show, hide, maximise, close) and a Shell toolbar item that shows its state.8+306 / −11
2026-09-24a507aaeUpdatedUpdated: Rebuilt the phar with the shell's window controls and toolbar item.1+0 / −0
2026-09-2485121eeAddedAdded: Added a metrics view for browsers at /Q/metrics, in the control panel's header and navigation, while scrapers keep the Prometheus text format unchanged.9+477 / −14
2026-09-24b56a012UpdatedUpdated: Gave the PHP Info view the control panel's header, navigation and colours, with a filter and a list of sections.9+401 / −3
2026-09-247e0c716UpdatedUpdated: Rebuilt the phar with the PHP Info view in the server's chrome.1+0 / −0
2026-09-24aae1200AddedAdded: Added the domains in use to the control panel's Domains tab, a status per domain (active, suspended, disabled), and the server gate that answers a suspended host with 503.12+888 / −26
2026-09-242d374fdUpdatedUpdated: Rebuilt the phar with the domains in use and the domain status gate.1+0 / −0
2026-09-248816eecAddedAdded: Added domain aliases, subdomains and a document root per domain, with host routing on both protocols and a standard doc folder for new domains.12+1007 / −192
2026-09-25f84e653UpdatedUpdated: Test domain routing over HTTP/2 with TLS as well: two domains, an alias, a subdomain, static files and /Q/, with the response cache on.1+43 / −0
2026-09-25086bf0bUpdatedFixed: Fixed the Domains tab's status menu being cut off on a phone and its Add Domain button missing the panel's button style.4+4 / −2
2026-09-25abe2931AddedAdded: Added per-domain redirects (HTTP to HTTPS, preferred www or bare host, custom path and host forwarding), HSTS and custom error documents.10+947 / −24
2026-09-251166ba7AddedAdded: Added the certificate covering each domain to the panel's Domains tab, and issuing or renewing it for one domain as a background job.11+748 / −41
2026-09-255cb5cbeAddedAdded: Added per-domain traffic to the panel's Domains tab and a host filter for its Logs tab, with the Host written at the end of each access log line.11+487 / −25
2026-09-25bee4ebdAddedAdded: Added an SSL tab to the control panel: the served certificate, every certificate by expiry, safe settings, renew and reload, and a bounded certificate history.13+1154 / −0
2026-09-253475807UpdatedUpdated: Made every control panel settings write go through the panel store's lock, and moved the shell's old files into the state directory.6+417 / −92
2026-09-255fd7fa0UpdatedUpdated: Rebuilt bin/qbixserver.phar with the locked panel settings writes and the shell files move.1+0 / −0
2026-09-25248b6a9UpdatedFixed: Fixed the IoPoll event loop backend failing to load, and made every backend behave the same and be tested.8+439 / −88
2026-09-2568cc5b0UpdatedUpdated: Rebuilt bin/qbixserver.phar with the event loop backend fixes.1+0 / −0
2026-09-25b54786dUpdatedUpdated: Compressed the server's own pages on HTTP/1.1, gave the views one shared stylesheet, and fixed the dashboard's text contrast and the panel sign-in heading order.22+402 / −311
2026-09-254eedbabUpdatedUpdated: Rebuilt bin/qbixserver.phar with the compressed server pages and the shared view stylesheet.1+0 / −0
2026-09-254bf4f8bUpdatedFixed: Fixed shell commands printing nothing when the console's socket is refused, and the socket being refused on every TLS page.5+16 / −4
2026-09-255188454UpdatedUpdated: Rebuilt bin/qbixserver.phar with the shell socket and Origin fixes.1+0 / −0
2026-09-258367c44UpdatedUpdated: Tested paths in the compat file wrapper with string comparisons instead of regular expressions.2+128 / −16
2026-09-2593b5600AddedAdded: Reported the previous exceptions of an uncaught error in the log, and its place and trace in the response with --debug.7+345 / −17
2026-09-252cf8ac8UpdatedUpdated: Rebuilt bin/qbixserver.phar with the wrapper's string path checks and the error diagnostics.1+0 / −0
2026-09-256b4fc91UpdatedUpdated: Made the shell's history hold a hundred thousand entries, paged to the console and searched on the server.12+880 / −84
2026-09-259884cc9UpdatedUpdated: Rebuilt bin/qbixserver.phar with the shell's paged history.1+0 / −0
2026-09-25873c0f0UpdatedFixed: Fixed the shell's server commands failing for want of the server's configuration, and -f working only at the end of a line.8+729 / −28
2026-09-2566c7ac6UpdatedUpdated: Rebuilt bin/qbixserver.phar with the shell's server commands run by the server.1+0 / −0
2026-09-257d949eeUpdatedUpdated: Let a newer push cancel the Docker and platform runs still queued for an older commit on the same branch, so superseded matrices no longer hold the shared runners.2+18 / −0
2026-09-256d2b5d8UpdatedFixed: Fixed the shell answering "the shell runner is missing" in every install started from the phar: the packages, the container image and the static binaries.12+383 / −33
2026-09-2528109efUpdatedFixed: Fixed shell jobs reporting exit code 1 when the server's child reaper reached them first.3+129 / −3
2026-09-25fba3625UpdatedUpdated: Named the exact directory and command that unlock a locked control panel, first.3+144 / −3
2026-09-250da44a8UpdatedUpdated: Made the iopoll event loop opt-in until it has run against the real Io\Poll; auto chooses Revolt when installed, else stream_select, as before.4+17 / −9
2026-09-2591eb3b1UpdatedUpdated: Added upgrade notes to the changelog: the control panel's storage and trust rule, the access log's new default format, and the shell working from the phar.1+35 / −1
2026-09-25a408d5eUpdatedUpdated: Rebuilt bin/qbixserver.phar with the shell's runner and console tools embedded.1+0 / −0
2026-09-25e8f27ddUpdatedFixed: Fixed the shell failing in the static binaries, where PHP runs as the micro SAPI with no PHP_BINARY.7+32 / −11
2026-09-25d77494bUpdatedUpdated: Rebuilt bin/qbixserver.phar with the shell working in the static binaries.1+0 / −0
2026-09-2577232aeUpdatedFixed: Fixed a second server on the same certificate directory and port taking HTTPS away from the first.4+261 / −16
2026-09-252e4d322UpdatedFixed: Fixed a stopping server removing the pid file or killing the watchdog of another server.1+27 / −2
2026-09-25e55925eUpdatedUpdated: Rebuilt bin/qbixserver.phar with the certificate copies private to each server.1+0 / −0
2026-09-25dce8e31AddedAdded: Added a list of the scripts that may run by name, the front controllers URLs go to, and the files served as they are, so an application can keep everything else to its front controller.3+480 / −21
2026-09-25e862a4fUpdatedUpdated: Rebuilt the phar with the script, front controller and static path lists.1+0 / −0
2026-09-2577a94e7UpdatedFixed: Fixed a page stored while a script could still run being answered after the script list stopped it.2+111 / −5
2026-09-250864b71UpdatedUpdated: Documented anchoring the static path patterns, exact script names, server-wide scope and the cache generation the lists start.1+22 / −0
2026-09-252035e65UpdatedUpdated: Rebuilt bin/qbixserver.phar with the listed scripts, front controllers and static paths.1+0 / −0
2026-09-258f66809UpdatedUpdated: Updated the changelog with the v0.0.4.28 section, covering everything since v0.0.4.27.1+116 / −12
2026-09-2582991d1UpdatedUpdated: Rebuilt bin/qbixserver.phar for v0.0.4.28.1+0 / −0
2026-09-25244d16aRenamedRenamed: Renamed the package to se7enxweb/exponential-velocity, after the repository moved to github.com/se7enxweb/exponential-velocity.11+29 / −26
2026-09-25061f30fRenamedRenamed: Renamed the operating-system packages, their paths and the image's install path from qbix-webserver to exponential-velocity, after the package.18+224 / −75
2026-09-25087d655AddedAdded: Added the takeover from qbix-webserver to the package scripts, and an upgrade test that installs the old package and then the new one over it.3+152 / −26
2026-09-25086a5adUpdatedUpdated: Rebuilt bin/qbixserver.phar for v0.0.4.28 with the renamed ACME client.1+0 / −0
2026-09-25632c3d7UpdatedUpdated: Point the CI branch triggers and the service documentation link at the default branch's new name, main.4+3 / −4
2026-09-25d37928eUpdatedUpdated: Show static-php-cli's own compiler errors when a Linux or macOS build fails, as the Windows build already does.1+16 / −0
2026-09-259905d60UpdatedFixed: Fixed the full variant failing to build on every platform, by leaving out what static-php-cli cannot build or register there, each with its reason.4+104 / −9
2026-09-25debb3beUpdatedUpdated: Rebuilt bin/qbixserver.phar for v0.0.4.28 with the full variant's exclusions.1+0 / −0
2026-09-259d6b91cUpdatedUpdated: Redirect a browser to the control-panel login instead of a plain 403 for the admin views, and return to the requested page after signing in.5+181 / −17
2026-09-251bc3f58UpdatedUpdated: Rebuilt bin/qbixserver.phar with the admin-view login redirect.1+0 / −0
2026-09-264730328UpdatedUpdated: Let the omnios (illumos) platform check run without failing the matrix, and record why.3+44 / −1
2026-09-2607d62a1UpdatedUpdated: Recorded the package rename and the new default branch in the v0.0.4.28 upgrade notes.1+10 / −0
2026-09-261a66410AddedAdded: Mobile transport sources and the iOS & Android guide, brought from upstream.6+1907 / −0
2026-09-269f291e9AddedAdded: Opt-in peer-to-peer mesh subsystem, disabled by default, brought from upstream.12+4027 / −0
2026-09-26468ab44AddedAdded: App-mode, static-files and image-processing docs, and bundle docs into the phar, from upstream.4+423 / −0
2026-09-264fdf2fdUpdatedFixed: Cast the status code to int before bucketing it in metrics, from upstream.1+1 / −0
2026-09-2600cf4b6UpdatedUpdated: Expect the bundled docs and README in the phar-currency check.1+7 / −0
2026-09-26f6fceebUpdatedUpdated: Rebuilt bin/qbixserver.phar with the opt-in mesh subsystem and the metrics fix.1+0 / −0
2026-09-26a24fa39UpdatedUpdated: Cap each Platforms job at 30 minutes so a stuck VM boot aborts instead of holding a runner.1+5 / −0v0.0.4.28
2026-09-26b29cc05UpdatedUpdated: Flag the old ghcr.io/se7enxweb/qbix-webserver image as deprecated, pointing at the exponential-velocity image.1+3 / −0
2026-09-2610d8a03AddedAdded: Per-domain SNI certificate selection layered on the per-process cert store4+371 / −1
2026-09-268e86409AddedAdded: Record client IP and user agent (never cookies) on 5xx error metrics3+135 / −2
2026-09-2644093c3UpdatedUpdated: Rebuilt bin/qbixserver.phar with the per-domain SNI selection and the 5xx IP/UA metrics1+0 / −0
2026-09-2670c81daAddedAdded: README section answering how Exponential Velocity differs from Qbix, listing the distribution, control-panel, TLS, shell and operations features it adds.2+41 / −0
2026-09-268402fbaAddedAdded: Optional TOTP two-factor authentication for the control panel, off by default.18+1688 / −9
2026-09-26e4b95b7UpdatedUpdated: Note the optional panel two-factor authentication in the README feature list.2+3 / −0
2026-09-26cea459dUpdatedUpdated: Record the narrowed illumos (SunOS) serve-check findings in docs/binaries.md1+55 / −8
2026-09-26c0df098UpdatedUpdated: Run the omnios (illumos) platform check on demand only, not on every push1+17 / −4
2026-09-2642694abUpdatedUpdated: Say Connection: close on the last response before keepAlive.max and after a 5xx, instead of promising a connection the server then closes3+114 / −2
2026-09-26da988dbUpdatedUpdated: Rebuilt bin/qbixserver.phar with the keep-alive Connection header fix and the current docs/binaries.md1+0 / −0
2026-09-267967099UpdatedUpdated: Remember which paths exist for the rest of a request in pool workers, and forget file facts after another program runs3+260 / −0
2026-09-26a1cf4b8AddedAdded: Q.compat.statTtl, to keep what is known about files across requests for up to that many seconds3+110 / −3
2026-09-26971ad60UpdatedUpdated: Rebuilt bin/qbixserver.phar with the per-request existence memo and Q.compat.statTtl1+0 / −0
2026-09-263fbc8abAddedAdded: Q.webserver.zygote, to fork later workers from a process that never held a client connection2+525 / −10
2026-09-266433d03UpdatedUpdated: Rebuilt bin/qbixserver.phar with Q.webserver.zygote1+0 / −0
2026-09-26c40f35bUpdatedUpdated: Retry a zygote hand-off interrupted by a signal instead of taking it for a dead zygote2+64 / −13
2026-09-26e3bbce2UpdatedUpdated: Rebuilt bin/qbixserver.phar with the zygote hand-off retry1+0 / −0
2026-09-26811b7b7UpdatedUpdated: Documented the keep-alive Connection header, the per-request existence memo and process shims, Q.compat.statTtl and Q.webserver.zygote8+346 / −12
2026-09-260179bb4UpdatedUpdated: Rebuilt bin/qbixserver.phar with the documentation1+0 / −0
2026-09-26f7e7a94UpdatedUpdated: Send the dashboard's stats with at most one live request a second, so an open dashboard stops doubling the cost of every request4+131 / −6
2026-09-2607f7a28UpdatedUpdated: Rebuilt bin/qbixserver.phar with the dashboard stats throttle1+0 / −0
2026-09-26ebbcc3cUpdatedUpdated: Show swap on the dashboard's System RAM card as used / total, coloured by swap activity6+145 / −35
2026-09-26824b384AddedAdded: Response cache audit with measurements and a ranked list of improvements1+311 / −0
2026-09-26b166c56UpdatedUpdated: Use APCu for the response cache only when it can hold entries, and say so at startup when it cannot3+250 / −7
2026-09-26e6ed766UpdatedUpdated: Report where cache hits come from and what APCu holds in /Q/health4+225 / −3
2026-09-2627f13ddUpdatedUpdated: File cached pages under the coding they are stored in, so brotli and gzip clients share one entry3+42 / −15
2026-09-260427ce2UpdatedUpdated: Keep the APCu copy of a cached page through its stale-while-revalidate window3+101 / −3
2026-09-268abd876UpdatedUpdated: Let the in-memory static file cache evict the least recently used file when it is full3+84 / −4
2026-09-26da1d435UpdatedUpdated: Honour q=0 in Accept-Encoding for cached pages, static files and precompressed files7+80 / −10
2026-09-2683d83a7UpdatedUpdated: Answer HEAD requests for cached pages from the cache4+87 / −7
2026-09-263c4377aAddedAdded: Optional in-process memory layer in front of APCu for cached pages6+398 / −10
2026-09-26c80278cUpdatedUpdated: Recorded the results of the response cache changes in the audit2+35 / −2
2026-09-269810b56UpdatedUpdated: Rebuilt bin/qbixserver.phar with the response cache changes1+0 / −0
2026-09-2640e6bd0AddedAdded: docs/panel.md, how to sign in to the control panel, starting with its default password3+106 / −0
2026-09-260700e2fAddedAdded: Q.dashboard.hidePanelRequests, to keep the server's own /Q/ requests out of the dashboard6+139 / −2
2026-09-26bfc7930UpdatedUpdated: Rebuilt bin/qbixserver.phar with the panel sign-in guide and hidePanelRequests1+0 / −0
2026-09-2683637f0UpdatedUpdated: Name the zygote in the process list and let the pool tests count workers forked by it6+61 / −10
2026-09-262240e2eUpdatedUpdated: Fork pool workers from the zygote by default4+6 / −6
2026-09-26038dd8bUpdatedUpdated: Rebuilt bin/qbixserver.phar with the zygote on by default1+0 / −0
2026-09-2601f268cUpdatedUpdated: Q_WebServer_Cache::purge() says how many entries it removed and can be told whether its argument is a regex.1+33 / −5
2026-09-264526699AddedAdded: Cache routes in the control panel API, with settings that are kept by the panel and survive a restart.4+1021 / −0
2026-09-268c4b095AddedAdded: A Cache tab in the control panel, to run the response cache from the browser.4+1144 / −0
2026-09-2692ad70cAddedAdded: The Cache tab and its API in docs/dashboard.md, and a pointer from docs/cache.md.2+89 / −0
2026-09-26183045aUpdatedUpdated: Rebuilt bin/qbixserver.phar with the control panel's Cache tab1+0 / −0
2026-09-261b904c3MergedMerge branch 'zygote-default-on' into candidate0+0 / −0
2026-09-2669d686dOtherMerged the dashboard's clearer swap figure, and rebuilt the phar from the merged tree0+0 / −0
2026-09-26f7f09f8OtherMerged the response cache work and the control panel's Cache tab, sign-in guide and hidePanelRequests0+0 / −0
2026-09-269dfa420UpdatedUpdated: Send the designed error page, in plain words, for every error the server answers itself4+91 / −28
2026-09-26b69ca16UpdatedUpdated: Rebuilt bin/qbixserver.phar with the designed error pages1+0 / −0
2026-09-26aee8c9cUpdatedUpdated: Hand an uncaught exception to the application's exception handler, and keep its message out of responses8+128 / −17
2026-09-2627f98ecUpdatedUpdated: Rebuilt bin/qbixserver.phar with the application exception handler and message-free error responses1+0 / −0
2026-09-269aeaf95UpdatedUpdated: Worker memory, reset cost and shim count in the documentation, from measurements8+92 / −38
2026-09-2622b8adaUpdatedUpdated: Count every CPU in the load benchmark's machine report3+5 / −3
2026-09-26ac22e8bUpdatedUpdated: Rebuilt bin/qbixserver.phar with the measured memory figures in the documentation1+0 / −0
2026-09-260f09447UpdatedUpdated: Changelog section for v0.0.4.29.1+79 / −1
2026-09-26da5bff6UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.29.1+0 / −0v0.0.4.29 docs-measured-memory
2026-09-26bcb0901UpdatedUpdated: Use the zygote only where PHP passes sockets between processes intact4+133 / −3
2026-09-2687456caUpdatedUpdated: Rebuilt bin/qbixserver.phar with the zygote socket-passing check1+0 / −0
2026-09-26eb254c2UpdatedUpdated: Changelog section for v0.0.4.30.1+26 / −0
2026-09-2695a2c69UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.30.1+0 / −0v0.0.4.30 zygote-scm-rights-selftest
2026-09-26f7e9ad2UpdatedUpdated: Keep sessions where session.save_path says, in PHP's [N;[MODE;]]/path form, and create them with its mode2+183 / −9
2026-09-26e05342cUpdatedUpdated: Rebuilt bin/qbixserver.phar with sessions kept where session.save_path says1+0 / −0
2026-09-26fa4cedcAddedAdded: Ask an application's own page cache before a worker (Q.web.appCache)5+308 / −0
2026-09-268bffb07UpdatedUpdated: Rebuilt bin/qbixserver.phar with the application cache hook1+0 / −0
2026-09-26169a050UpdatedUpdated: Tell the application that HTTP/2 requests came over HTTPS2+9 / −1
2026-09-26e50595fUpdatedUpdated: Rebuilt bin/qbixserver.phar with HTTP/2 requests marked as HTTPS1+0 / −0
2026-09-26b4cd8c5UpdatedUpdated: Report the release and build of a checkout from git rather than from a leftover build stamp1+11 / −3
2026-09-26c7c5ed3UpdatedUpdated: Rebuilt bin/qbixserver.phar with the release read from git in a checkout1+0 / −0
2026-09-27d7b0a6cAddedAdded: --version, --about and --copyright in every program, GNU style12+357 / −5
2026-09-276a00772UpdatedUpdated: Rebuilt bin/qbixserver.phar with --version, --about and --copyright1+0 / −0
2026-09-27c532951UpdatedUpdated: Name the program without .php or .phar on the first line of --version2+2 / −2
2026-09-27900eae9UpdatedUpdated: Rebuilt bin/qbixserver.phar with the program named without its extension1+0 / −0
2026-09-27ce98c59UpdatedUpdated: Give the commit date of --version in UTC, as it says1+1 / −1
2026-09-273120c43UpdatedUpdated: Rebuilt bin/qbixserver.phar with the commit date in UTC1+0 / −0
2026-09-27528d284UpdatedUpdated: Changelog for v0.0.4.311+40 / −0
2026-09-273598f05UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.31.1+0 / −0v0.0.4.31
2026-09-27604964aUpdatedUpdated: Answer requests without a session cookie from the response cache before asking the application's cache3+94 / −6
2026-09-27723077eUpdatedUpdated: Rebuilt bin/qbixserver.phar with the response cache asked first for requests without a session1+0 / −0
2026-09-272e81842UpdatedFixed: Run the zygote on PHP 8.2 and 8.3 too, handing each worker its connection as a stream3+39 / −30
2026-09-2753c9177UpdatedUpdated: Keep the application cache's answer to a request without a session in the response cache2+32 / −2
2026-09-2741e9016UpdatedUpdated: Rebuilt bin/qbixserver.phar with the zygote on PHP 8.2 and 8.3 and the application cache's answers kept1+0 / −0
2026-09-27118a387UpdatedFixed: Keep a release from being held back by one refused Docker pull or musl download, and build PHP 8.5 without memcache6+27 / −2
2026-09-2777b64abUpdatedUpdated: Document that the response cache keeps the application cache's answers and must hear of its purges1+7 / −1
2026-09-2776272c6UpdatedUpdated: Rebuilt bin/qbixserver.phar with PHP-version exclusions and the cache documentation1+0 / −0
2026-09-27090bd97UpdatedFixed: Keep the application cache's gzip answer to a browser in the response cache, so browsers are answered from it too2+63 / −11
2026-09-272487afaUpdatedUpdated: Rebuilt bin/qbixserver.phar with the application cache's gzip answers kept in the response cache1+0 / −0
2026-09-27aa48e49UpdatedUpdated: Document the Revolt event loop: what it needs, installing it system-wide, configuring it, and what it measured6+87 / −9
2026-09-276fca3c4UpdatedUpdated: Rebuilt bin/qbixserver.phar with the Revolt documentation and the extension manifest's event loop entries1+0 / −0
2026-09-275b6318aAddedAdded: Q.webserver.reusePort, so several servers can listen on one port and cached pages use more than one core3+68 / −4
2026-09-2716de465UpdatedUpdated: Rebuilt bin/qbixserver.phar with Q.webserver.reusePort1+0 / −0
2026-09-2752cd58fUpdatedFixed: A purge reaches the response cache at once in the server process, not after the compat wrapper forgets its file stats2+24 / −0
2026-09-276856bf6UpdatedUpdated: Rebuilt bin/qbixserver.phar with the response cache seeing a purge at once in the server process1+0 / −0
2026-09-27ac72c7aUpdatedFixed: The response cache really forgets the generation marker's remembered stat, so a purge is seen within the second2+62 / −1
2026-09-27642064cUpdatedUpdated: Rebuilt bin/qbixserver.phar with the response cache forgetting the marker's stat on the right class1+0 / −0
2026-09-27190fe92UpdatedUpdated: Store the application cache's compressed HTML answer like a rendered page, so every server holds the same bytes and validator2+54 / −2
2026-09-27722d420UpdatedUpdated: Rebuilt bin/qbixserver.phar with compressed application cache answers stored like rendered pages1+0 / −0
2026-09-27146e3ceUpdatedUpdated: Changelog for v0.0.4.321+65 / −0
2026-09-2784dac5dUpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.32.1+0 / −0v0.0.4.32 origin/release-prep-v0.0.4.32 compat-session-save-path
2026-09-2750176b3UpdatedFixed: A PHP file read through the compat file wrapper gives the file's own bytes, not the transformed source2+77 / −7
2026-09-278c7ec5dUpdatedUpdated: Changelog for v0.0.4.331+17 / −0
2026-09-273e80587UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.33.1+0 / −0v0.0.4.33 compat-transform-includes-only
2026-09-27e22031fAddedAdded: Q.web.cache.pauseFile, a file whose existence pauses the response caches1+29 / −0
2026-09-27dbda08aAddedAdded: Workers give up root and run as a configured user and group, like Apache's User and Group8+685 / −6
2026-09-27543b9dbUpdatedUpdated: Documented --user, --group, Q.webserver.user/group and the RUN_USER/RUN_GROUP environment3+54 / −1
2026-09-2750c0bbdUpdatedUpdated: Changelog for v0.0.4.341+34 / −0
2026-09-271d3f196UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.34.1+0 / −0v0.0.4.34
2026-09-270a43836AddedAdded: Embedded OpenType fonts (.eot) are served with their media type1+2 / −2
2026-09-27f3eff00UpdatedUpdated: The exponential preset brings its own static, script and front controller lists when the configuration names none2+76 / −0
2026-09-27eb79d8eUpdatedFixed: A static file is served whole to a client that takes no gzip when precompression is on2+179 / −16
2026-09-27b5ea8d2OtherRebuild bin/qbixserver.phar from eb79d8e1+0 / −0
2026-09-2778b3ecfUpdatedUpdated: The tests rebuild the phar first and run against it, so a push that changes the sources is tested with the phar that lands on main2+74 / −10
2026-09-270ac4f95UpdatedFixed: A WWW-Authenticate header answers 401 and every worker sees the request headers, as under PHP's own servers2+26 / −0
2026-09-2724d231fAddedAdded: Q.webserver.headers, headersOnScripts and hsts put configured headers and Strict-Transport-Security on every response, static files included, without a domain record6+625 / −25
2026-09-286b7c850AddedAdded: GitHub funding metadata, the same as the other se7enxweb packages1+3 / −0
2026-09-281699885OtherRebuild bin/qbixserver.phar from 6b7c8501+0 / −0
2026-09-28559acb4UpdatedFixed: The application's page cache is handed the request headers and the listener's port, so it finds a page stored behind a load balancer that ends TLS2+22 / −3
2026-09-285c7062dOtherRebuild bin/qbixserver.phar from 559acb41+0 / −0
2026-09-28e3353a5MergedMerge pull request #20 from fwoldt/fix/appcache-hands-over-the-request-headers0+0 / −0
2026-09-281b6be3bUpdatedUpdated: CHANGELOG for v0.0.4.351+63 / −0
2026-09-28fa6dd23UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.35.1+0 / −0v0.0.4.35
2026-09-289777e80UpdatedFixed: Parameters with a null default are typed as nullable, so PHP 8.4 and later raise no deprecation for them9+9 / −9
2026-09-28fb035a3OtherRebuild bin/qbixserver.phar from 9777e801+0 / −0
2026-09-282921872UpdatedFixed: A warm-up that fails halfway no longer leaves its request in every worker2+175 / −1
2026-09-2830db6d3UpdatedUpdated: Rebuilt bin/qbixserver.phar from the current sources1+0 / −0
2026-09-2864b078cUpdatedUpdated: CHANGELOG for v0.0.4.361+29 / −0
2026-09-28e380110UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.36.1+0 / −0v0.0.4.36
2026-09-29c1f3a26UpdatedFixed: Multipart form fields with nested names such as a[0][id] reach $_POST as nested arrays, as PHP builds them5+634 / −92
2026-09-29dcdbab6UpdatedUpdated: CHANGELOG for v0.0.4.371+34 / −0
2026-09-29afa21d3UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.37.1+0 / −0v0.0.4.37 fix-multipart-nested-keys
2026-09-2986ade5eUpdatedFixed: compress.zlib:// and other streams that need a file descriptor work through the file layer1+19 / −0
2026-09-2981646a6UpdatedFixed: Stream options and quiet opens on files read through the file layer2+247 / −2
2026-09-294bae92eUpdatedFixed: A request body over post_max_size gets a clean 413, and one under it reaches the application whole6+805 / −33
2026-09-29db4f18cUpdatedUpdated: CHANGELOG for v0.0.4.381+79 / −0
2026-09-2933e31ddUpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.38.1+0 / −0
2026-09-2961b96d5UpdatedUpdated: CHANGELOG dates v0.0.4.38 on the day it is released1+1 / −1v0.0.4.38 release-prep-v0.0.4.38 fix-rest-and-cache-174-179
2026-09-30a81335cUpdatedFixed: The response cache stays off unless a setting turns it on3+149 / −1
2026-09-30ea907cdUpdatedUpdated: CHANGELOG for v0.0.4.391+37 / −0
2026-09-302f72c52UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.39.1+0 / −0v0.0.4.39 cache-default-off-without-configuration
2026-09-303e1e9e7UpdatedFixed: qbixctl restart starts the server again with the options it was started with8+903 / −26
2026-09-301646ef5UpdatedUpdated: The race harness writes a test's configuration as the test gives it1+8 / −5
2026-09-304d35e1bUpdatedUpdated: tests/unit-distribution-vc.php checks the overlay's log directory1+4 / −2
2026-09-30a446d5cUpdatedUpdated: CHANGELOG for v0.0.4.401+63 / −0
2026-09-309773cf3UpdatedUpdated: Rebuilt bin/qbixserver.phar stamped v0.0.4.40.1+0 / −0v0.0.4.40 qbixctl-restart-options-logs-harness
2026-09-3055ce925RenamedRenamed: The server, qbixctl and qbixconsole move to sbin/ and the shell to bin/, with forwarders at their former paths21+2379 / −2112
2026-09-30fdc2ffcRenamedRenamed: The uwebserver binary moves to sbin/ and its C sources to native/uwebserver/9+14 / −8
2026-09-307245e2fUpdatedUpdated: The packages install qbixserver, qbixctl and qbixconsole in /usr/sbin, with links at /usr/bin18+134 / −39
2026-09-30c1b5fcbUpdatedUpdated: The workflows build, test, upload and combine sbin/qbixserver.phar5+30 / −21
2026-09-3075cd116UpdatedUpdated: The tests run the programs at their new paths in sbin/ and bin/51+73 / −68
2026-09-30443833fAddedAdded: A test that every former program path behaves exactly like the new one1+319 / −0
2026-09-30bbb8953UpdatedUpdated: The README and the documentation describe the sbin/ and bin/ layout and name the new paths27+221 / −83
2026-09-30d3bac25UpdatedFixed: tests/unit-worker-pool-dynamic.php waits for a fixed pool's workers instead of counting them once1+4 / −1
2026-09-30310cfdaUpdatedUpdated: CHANGELOG for v0.0.4.411+93 / −0
2026-09-30048e474UpdatedUpdated: Rebuilt sbin/qbixserver.phar and its copy at bin/qbixserver.phar stamped v0.0.4.41.2+0 / −0v0.0.4.41 fhs-bin-sbin
2026-09-30ab9adffUpdatedUpdated: The README and the documentation name the server Velocity, and state once that it began as a fork of the Qbix web server engine22+90 / −86
2026-09-30f798347UpdatedUpdated: Rebuilt sbin/qbixserver.phar and its copy at bin/qbixserver.phar with the Velocity wording of the documentation2+0 / −0
2026-09-301391a69AddedAdded: The packages install the shell as /usr/bin/vc-qshell10+47 / −3
2026-09-30b70e318AddedAdded: docs/uwebserver.md describes what uwebserver is for, who runs it, how it is built and what it did in 0.0.4.411+108 / −0
2026-09-305535a44UpdatedFixed: uwebserver reads its whole command line before it acts, answers --help, and starts nothing on an argument it does not know6+619 / −59
2026-09-3006be147RemovedRemoved: The generated record types and the U runtime are no longer compiled into uwebserver1+10 / −963
2026-09-30c24e765AddedAdded: uwebserver serves a document root, listens on 127.0.0.1:8000 by default, and has options for every common need and a configuration file11+3220 / −792
2026-09-30bf90c87AddedAdded: uwebserver has a manual page, bash completion, a Makefile and full documentation, and its --help is grouped and fits 80 columns9+886 / −50
2026-09-30b16812bUpdatedFixed: uwebserver reads request heads strictly, builds without a warning under -Werror, and runs its tests clean under AddressSanitizer and UndefinedBehaviorSanitizer10+289 / −39
2026-09-3078ba6efUpdatedFixed: uwebserver bounds what a client can hold: head parsing, the timeout sweep, and workers that keep ending4+255 / −5
2026-09-30b260911UpdatedFixed: uwebserver writes only files that are its own, reads a configuration as root only from a file others cannot change, and sends no TLS session tickets5+201 / −22
2026-09-3015ee8afAddedAdded: uwebserver's release build is hardened, and its request parsing has a fuzz harness7+487 / −103
2026-09-30bac39f0UpdatedUpdated: Rebuilt sbin/uwebserver from its sources with the Makefile, stamped v0.0.4.422+7 / −5
2026-09-30a5f7754UpdatedUpdated: CHANGELOG for v0.0.4.421+103 / −0
2026-09-301c729adUpdatedUpdated: Rebuilt sbin/qbixserver.phar and its copy at bin/qbixserver.phar stamped v0.0.4.42.2+0 / −0
2026-09-301d7a548RemovedRemoved: The unused uwebserver runtime headers u_runtime.h and u_merkle_cache.h3+1 / −6975
2026-09-307309b98UpdatedUpdated: The uwebserver documentation says what changes on upgrading from 0.0.4.41, and that nothing in a site starts it3+33 / −1
2026-09-30f334398UpdatedUpdated: Rebuilt sbin/qbixserver.phar and its copy at bin/qbixserver.phar stamped v0.0.4.42, with the uwebserver upgrade notes2+0 / −0
2026-09-30c9854aaUpdatedFixed: A pool worker reports each request's own start time in REQUEST_TIME_FLOAT and REQUEST_TIME2+78 / −0
2026-09-304dc2cfcUpdatedFixed: The compat session handler decodes each session value from its own bytes, without a warning2+187 / −6

2026-10 (2 changes)

DateCommitKindChangeFiles+/−Release
2026-10-01540d3d8UpdatedUpdated: CHANGELOG for v0.0.4.421+18 / −1
2026-10-01da360b4UpdatedUpdated: Rebuilt sbin/qbixserver.phar and its copy at bin/qbixserver.phar stamped v0.0.4.42.2+0 / −0v0.0.4.42 origin/main origin/HEAD

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x