9.55 UNRELEASED
9.54 2025-11-07
- Fixed a bug in Mojo::Server::Daemon where destroying the server with active connections did not emit finish events
for their transactions.
- Fixed a bug in Mojo::UserAgent where incomplete responses were accepted as complete if the connection was closed
after the start-line had been received.
- Fixed a bug in Mojo::UserAgent where destroying the user agent during a response without Content-Length header did
not result in a "Premature connection close" error.
- Fixed a bug in Mojo::UserAgent where finish events for prematurely closed connections were emitted before the error
had been set.
- Fixed a bug in Mojo::Message::Request where a CGI/PSGI environment with a query string or request method of "0" was
ignored. (ether)
9.53 2026-10-25
- Added any, delete, get, options, patch, post, put, query, under and websocket methods to Mojolicious, as shortcuts
for the same methods on the routes attribute.
- Added support for all server commands to morbo, like "morbo ./myapp.pl prefork -w 2". The server now runs in a
separate process, so the daemon attribute of Mojo::Server::Morbo is only used to create listen sockets, and server
settings need to be passed to the command instead, like "morbo ./myapp.pl daemon -p -i 30". That also means Morbo
no longer works on platforms with fork emulation, such as native Windows (use WSL instead).
- Added exec attribute to Mojo::Server::Morbo and -x/--exec option to morbo, to start additional commands like asset
bundlers in watch mode alongside the server.
- Improved url_for_asset in Mojolicious::Controller to find assets that have been rebuilt with different names in
development mode.
- Improved at performance in Mojo::DOM for selectors without combinators, it now stops at the first match.
- Improved HTML/XML parsing performance in Mojo::DOM by up to 35%, the tokenizer now matches attributes only once.
- Fixed a bug in Mojo::DOM where many unclosed comments, CDATA sections, processing instructions or RCDATA elements
could make parsing extremely slow.
9.52 2026-10-24
- Improved multipart/form-data performance in Mojo::Message.
- Improved Mojo::Server::Daemon performance by up to 27% for keep-alive requests, by finishing static responses
without an extra write cycle and caching socket addresses per connection.
- Improved header parsing performance in Mojo::Headers by up to 2x.
- Improved route matching performance in Mojolicious::Routes by up to 8x for real world applications, routes are now
indexed by the text their patterns start with, so the cost no longer grows with the number of routes.
- Improved encode and decode performance in Mojo::Util by up to 3x for ASCII strings, which speeds up parameter
parsing by up to 35%.
- Improved url_for performance in Mojolicious::Controller by up to 15%.
- Improved xor_encode performance in Mojo::Util by up to 3x, which speeds up WebSocket frame masking.
- Fixed a bug in Mojo::Util where gzip did not accept Mojo::ByteStream objects, causing compressed responses
rendered from them to fail.
- Fixed a bug in Mojo::Log where messages from nested contexts were not written to the log file.
- Fixed a bug in Mojo::Util where html_unescape did not replace numeric character references to NUL, surrogates and
code points beyond Unicode with U+FFFD, and did not remap the C1 control range through windows-1252, as required
by the WHATWG HTML standard.
- Fixed a bug in Mojo::Server::Daemon where destroying the server while a response was being written could cause
an exception.
9.51 2026-10-19
- Fixed a bug in Mojo::DOM where CDATA sections, processing instructions and DOCTYPE declarations did not end at the
first ">" in HTML documents.
- Fixed a bug in Mojo::DOM where the content of "" did not end "