6.0.0:
Switched to the MIT license with an optional exception that allows distributing binary code without attribution.
Floating-point formatting is now locale-independent by default.
Added an experimental Grisu floating-point formatting algorithm implementation (disabled by default). To enable it compile with the FMT_USE_GRISU macro defined to 1.
Separated formatting and parsing contexts for consistency with C++20 std::format, removing the undocumented basic_format_context::parse_context() function.
Added oss-fuzz support.
formatter specializations now always take precedence over operator<<.
Introduced the experimental fmt::compile function that does format string compilation.
Added the % format specifier that formats floating-point values as percentages.
Implemented precision for floating-point durations.
Implemented chrono format specifiers %Q and %q that give the value and the unit respectively .
Fixed handling of dynamic width in chrono formatter.
Removed deprecated fmt/time.h. Use fmt/chrono.h instead.
Added fmt::format and fmt::vformat overloads that take text_style.
Removed the deprecated color API (print_colored). Use the new API, namely print overloads that take text_style instead.
Made std::unique_ptr and std::shared_ptr formattable as pointers via fmt::ptr.
Made print and vprint report I/O errors.
Marked deprecated APIs with the [[deprecated]] attribute and removed internal uses of deprecated APIs.
Modernized the codebase using more C++11 features and removing workarounds. Most importantly, buffer_context is now an alias template, so use buffer_context<T> instead of buffer_context<T>::type. These features require GCC 4.8 or later.
formatter specializations now always take precedence over implicit conversions to int and the undocumented convert_to_int trait is now deprecated.
Moved the undocumented basic_writer, writer, and wwriter types to the internal namespace.
Removed deprecated basic_format_context::begin(). Use out() instead.
Disallowed passing the result of join as an lvalue to prevent misuse.
Refactored the undocumented structs that represent parsed format specifiers to simplify the API and allow multibyte fill.
Moved SFINAE to template parameters to reduce symbol sizes.
Switched to fputws for writing wide strings so that it's no longer required to call _setmode on Windows.
5.3.0:
* Introduced experimental chrono formatting support
* Added experimental support for emphasis (bold, italic, underline, strikethrough), colored output to a file stream, and improved colored formatting API
* Added support for 4-bit terminal colors
* Parameterized formatting functions on the type of the format string. Any object of type S that has an overloaded to_string_view(const S&) returning fmt::string_view can be used as a format string
* Made std::string_view work as a format string
* Added wide string support to compile-time format string checks
* Made colored print functions work with wide strings
* Introduced experimental Unicode support
* Improved locale support
* Constrained formatting functions on proper iterator types
* Added make_printf_args and make_wprintf_args functions
* Deprecated fmt::visit, parse_context, and wparse_context. Use fmt::visit_format_arg, format_parse_context, and wformat_parse_context instead.
* Removed undocumented basic_fixed_buffer which has been superseded by the iterator-based API
* Disallowed repeated leading zeros in an argument ID
* Reintroduced support for gcc 4.4
* Fixed compilation on platforms with exotic double
* Improved documentation
* Added pkgconfig support which makes it easier to consume the library from meson and other build systems