1.0 - 2025-05-11 - FU::Util: Fix parsing of empty sections in query_decode() - FU::Util: Fix buffer overflow in json_format() float formatting - FU::Util: Reject `0x1f` in utf8_decode() - FU::Pg: Add perl<->text and bin<->text type conversion methods - FU::Validate: Improved error messages - FU::MultipartFormData: Various parser fixes - FU: Include request body in verbose error logs - FU: Add fu->log_verbose() - FU: Extend debug_info pages with request body, response body, 'fu' object dump, expandable query parameters and interpolated SQL queries - FU: Improve styling of debug_info pages - FU: Preserve headers on fu->redirect - FU: Ignore HTTP_CONTENT_LENGTH and HTTP_CONTENT_TYPE FastCGI parameters - FU: Suppress warning about missing files in FU::monitor_path - FU: Reject hash character and newlines in request path - Fix creating read-only undef/true/false in json_parse() and FU::Pg - Benchmark updates 0.5 - 2025-04-24 - FU::Util: Set O_CLOEXEC on fds received through `fdpass_recv()` - FU::Util: Fix interpretation of false options in `json_format()` and `json_parse()` - FU::Validate: Add `coerce()` and `empty()` utility methods - FU::Validate: Limit values of int/uint input to 64 bits - FU::Validate: Normalize num/int/uint inputs to Perl numeric types - FU::Pg: Add `escape_literal()` and `escape_identifier()` methods - FU::Pg: Use less memory for `kvv()`, `kva()` and `kvh()` methods - FU::Pg: Disallow chaining of `cache()`, `text()`, `text_params()` and `text_results()` methods on connection and transaction objects - FU: Throw and catch FU::Validate errors without wrapping in `fu->error()` - FU: Add `-progname` option and add diagnostics to process names - FU: Whole bunch of misc fixes - Doc fixes - Fix nul-termination of some XS-created strings 0.4 - 2025-03-19 - FU::Validate: Support arrayref schemas - FU::Validate: Rename 'values' option to 'elems' - FU::Validate: Repurpose 'values' option to validate hash values - FU::Validate: Merge nested 'elems', 'keys' and 'values' schemas during compile() - FU::Validate: Rename 'scalar' to 'accept_scalar' - FU::Validate: Add 'accept_array' option - FU::Util: Add 'html_safe' option to json_format() - FU::Util: Add gzip_compress() wrapper for libdeflate.so, zlib-ng.so or zlib.so - FU::Util: Add brotli_compress() wrapper for libbrotlienc.so - FU: Consistency fixes for fu->json() and fu->formdata() - FU: Add fu->cookie() and fu->set_cookie() - FU: Add support for brotli output compression - FU: Use gzip_compress() for faster gzip output compression 0.3 - 2025-03-10 - FU::Validate: Change API, ->validate() now returns data or throws error on failure - FU::Validate: Rename 'rmwhitespace' to 'trim' - FU::Validate: Support (more) human-readable error messages - FU::Pg: Add support for COPY operations - FU::Pg: Support types with dynamic OIDs - FU: Add support for reading multipart/form-data - FU: Add convenience methods for reading and writing JSON - FU: Fix error in handling a 400 - FU::MultipartFormData: New helper module - Fix some tests - Some doc improvements 0.2 - 2025-02-28 - FU: Add debug_info web interface - FU: Add fu->denied and fu->notfound methods - FU: Support randomized --max-reqs - FU: Drop Zstd output compression support - FU::PG: Support custom type overrides with $conn->set_type() - FU::PG: Change default format for the 'date' type - FU::PG: Add support for 'time', '$date_str' and '$hex' types - FU::PG: Skip query prepare step when possible - Fix portability for older compilers & longdouble Perls - Fix some memory leaks 0.1 - 2025-02-25 - Initial release