We keep an eye on all the issues and feature requests at the github.com/userver-framework, at the English-speaking and Russian-speaking Telegram support chats. All the good ideas are discussed, big and important ones go to the Roadmap. We also have our in-house feature requests, those could be also found in Roadmap.
Important or interesting features go to the changelog as they get implemented. Note that there's also a Security Changelog.
Improved experience with metrics. Added Prometheus and Graphite metric formats. Provided a modern simple interface to write and test metrics.
Added chaos tests for drivers
Implemented streaming API for the HTTP
Improved documentation, added more samples and descriptions, improved search.
Numerous optimizations.
Numerous build improvements, including Conan and Docker support.
Optimized and improved features that were available at the Beta announcement:
gRPC client and server
Mongo driver
Redis driver
PostgreSQL
HTTP server and client
Logging and Tracing
... and many other features.
Detailed descriptions could be found below.
Beta (September 2023)
WebSockets server and TLS server are now implemented as part of the HTTP server
PostgreSQL pipelining is now implemented and turned on by default, leading to improved response times.
Mongo Congestion Control is implemented and turned on by default, leading to better stability of the service in case of high load on database.
Initial logger is now initialized from the component config, leading to a more simple code and setup. The --initial-logger option now does nothing and will be removed soon.
std::bitset<N>, std::array<bool, N>, userver::utils::Flags<Enum> and integral values are now mapped to PostgreSQL bit and bit varying types. Thanks to dsaa27 and bshirokov for the PRs!
Signifiacally optimized JSON DOM access to a non-existing element.
Logging now does not lock a mutex in fs-task-processor on each log record.
Up to 3 times faster logging due to multiple minor tweaks with data copy and memory prereserving.
The new asynchronous engine::io::sys::linux::Inotify driver for Linux allows subscriptions to filesystem events. Thanks to it the fs::FsCacheClient now reacts faster.
Non-coroutine userver-universal CMake target was refactored and is now used by the whole framework as a basic dependency. Compile times dropped down drastically for building the whole framework from scratch.
MacOS build instructions were enhanced, thanks to Daniil Shvalov for the PR!
Conan build was fixed, thanks to Yuri Bogomolov for the PR.
Numerous build and configure fixes.
Beta (June 2023)
Static configs of the service now can retrieve environment variables via the #env syntax. See yaml_config::YamlConfig for more examples.
New testsuite plugins userver_config_http_client and userver_config_testsuite_support turned on by default to increase timeouts in tests and make the functional tests more reliable.
clients::http::Request now does less atomic counters increments/decrements while the request is being built.
mlock_debug_info static configuration option of components::ManagerControllerComponent is now on by default. It improves responsiveness of the service under heavy load on low memory and bad hard drives.
engine::io::Socket now has an additional SendAll overload that accepts const struct iovec* list, std::size_t list_size for implementing low-level vector sends. Mongo driver now uses the new function, resulting in smaller CPU and memory consumption.
clients::http::Form::AddContent now instead of const std::string& parameters accepts std::string_view parameters that allow to copy less data.
TESTPOINT and other testpoint related macro now imply zero overhead if testpoints were disabled in static config.
More functions of formats::json::ValueBuilder now accept std::string_view, resulting in less std::string constructions and better performance.
TSKV escaping was optimized via SIMD, resulting in up to x10 speedup on long logs.
mlock_debug_info static configuration option of components::ManagerControllerComponent now allows to lock exception unwinding information in memory. It improves responsiveness of the service under heavy load on low memory and bad hard drives.
Experimental support for HTTP "Baggage" header is implemented, including verification, forwarding from HTTP handlers to client, baggage manipulation. See baggage::BaggageManagerComponent for more info.
Redis driver now supports non-queued variants for pubsub.
engine::Task now does not have a virtual destructor. New engine::TaskBase based hierarchy does not use RTTI, resulting in smaller binaries.
Mongo driver does not capture stack traces in release builds in case of errors. The error path become slightly faster, server is more responsive in case of Mongo problems.
Build:
Improved support for Conan 2.0, many thanks to Anton for the PR.
.gitattributes now handles line endings automatically for files detected as text. This simplifies WSL builds. Thanks to Anatoly Shirokov for the PR.
PostgreSQL libs selection is now possible in CMake if the platform has multiple versions installed, see PostgreSQL versions for more info.
Improved support for Arch Linux, many thanks to Konstantin Goncharik for the PR.
Multiple improvements for docs, including mockserver clarifications from Victor Makarov.
Beta (March 2023)
Now logging of particular lines could be controlled by dynamic config. See USERVER_LOG_DYNAMIC_DEBUG for more info.
Getting the default logger now takes only a single atomic read. LOG_* macro now do two RMW atomic operations less and do not use RCU, that could lead to a dynamic memory allocation in rare cases.
PostgreSQL driver now does much less atomic operations due to wider usage of std::move on the internal std::shared_ptr.
Now the "help wanted" issues at github have additional tags "good first issue" and "big", to help you to choose between a good starting issue and a big feature. See Releases, Trunk-based Development and Pull Requests for more info.
Cmake function userver_testsuite_add now can pass arguments to virtualenv, thanks to Дмитрий Изволов for the PR.
Improved hello_service run instruction, thanks to Svirex for the PR.
Better Python3 detection, thanks to Дмитрий Изволов for the PR.
Task processors now have an os-scheduling static config option and @md_en_userver_task_processors_guide "a usage guide".
Added a pg_service_template service template that uses userver the userver framework with PostgreSQL
In template services, it is now possible to deploy the environment and run the service in one command: make service-start-debug or make service-start-release.
Added userver::os_signals::Component, which is used for handling OS signals.