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.
Changelog news also go to the userver framework news channel.
Roadmap
Plans for the first release
- Add web interface to the uservice-dynconf
- ✓ Add component to serve static pages
- ✓ Migrate userver-only related CI checks to the GithubCI
- Migrate to upstream versions of formatters
- ✓ Improve documentation
- ✓ Improve experience with metrics
- ✓ Add Prometheus metrics format
- ✓ Add Graphite metrics format
- ✓ Provide a modern simple interface to write metrics
- Add chaos tests for drivers
- ✓ TCP chaos proxy implemented
- ✓ UDP chaos proxy implemented
- ✓ Mongo
- ✓ HTTP Client
- DNS resolver
- Redis
- PostgreSQL
- Clickhouse
- gRPC
- Enable PostgreSQL pipelining
- Implement and enable Deadline Propagation
- ✓ HTTP Client
- Mongo
- PostgreSQL
- Redis
- gRPC
- ✓ Implement streaming API for the HTTP
- Add basic Kafka driver.
Changelog
Beta (February 2023)
- tracing::Span now logs the location where it was constructed.
- Now the string<>enum utils::TrivialBiMap mappings could be used within storages::postgres::io::CppToUserPg. See uPg: Mapping a C++ enum to PostgreSQL enum type. for more info.
- components::Logging now provides options for configuring the task processors to do the asynchronous logging.
- Redis driver now supports the
geosearch
and unlink
commands.
- DNS resolvers were switched to asynchronous mode by default.
- UDP chaos proxy was implemented, see chaos.UdpGate
- C++ Standard now could be explicitly controlled via the CMake flag
CMAKE_CXX_STANDARD
.
- Optimizations:
- Many metrics were moved to a faster utils::statistics::Writer.
- gRPC now allows concurrent execution of 1 Read and 1 Write on the same Bidirectional stream.
- Python dependencies for build are now automatically installed, thanks to Pavel Shuvalov for the PR!
- Added a Conan option to disable LTO, thanks to Oleg Burchakov for the PR!
- Diagnostic messages and docs were improved, including:
- In case of a typo in static config name the fixed name is now reported
error-injection
static option for components::Postgres was documented
- Fixed typos, thanks to Ch0p1k3 for the PR!
Beta (January 2023)
- Unknown/mistyped values in static configs are now reported by default. Static configs validation now could use
minimum
and maximum
.
- gRPC clients now have ReadAsync() functions, that return a future and allow to request multiple results from different RPCs at the same moment.
- ugrpc::server::Server now can return a vector of gRPC service names.
- To aid in asynchronous drivers development the engine::io::FdPoller is now a part of the public API.
- Added a blazing fast utils::TrivialBiMap.
- HTTP Streaming is now considered production ready (docs to come soon).
- Testsuite fixtures were improved:
- Optimizations:
- Now the engine does less random number generator invocations for HTTP handling.
- Logging of tracing::Span became x2 faster
- IntrusiveMpscQueue is now used for engine internals, IO operations now schedule faster.
- Writing HTTP headers became faster, thanks to Ivan Trofimov for the PR.
- utils::TrivialBiMap is now used wherever it is possible.
- Metrics:
- FreeBSD build fixes.
- Multiple documentation and diagnostics improvements.
- Added
ToStringView(HttpMethod)
function, thanks to Фёдор Барков for the PR.
- Added more engine::Yield tests, thanks to Ivan Trofimov for the PR.
Beta (December 2022)
- Added logs colorization to the testsuite plugins, thanks to Victor Makarov for the PR.
- Multiple big improvements in framework testing:
- improved unit tests re-entrance
- multiple new chaos and metrics tests
- improved testsuite diagnostics
- Added a Custom Authorization/Authentication via PostgreSQL sample.
- Added an option
set_tracing_headers
to disable HTTP tracing headers, thanks to Ivan Trofimov for the PR.
- Fixed race in RabbitMQ sample, thanks to Ivan Trofimov for the PR.
- Fixed PostgreSQL testing at GithubCI, thanks to Ivan Trofimov for the PR.
Beta (November 2022)
Beta (October 2022)
- Experimental support for Conan packaging, many thanks to Anton for the PR.
- Prometheus and Graphite metrics formats were added, see Service Statistics and Metrics (Prometheus/Graphite/...) for details.
- Initial support for chaos testing was added, see Chaos Testing for more info.
- Generic Escape implementation for ranges was added to Clickhouse, thanks to Ivan Trofimov for the PR.
- TLS/SSL support for Redis.
- Multiple optimizations from Ivan Trofimov:
- utils::datetime::WallCoarseClock and its usage in the framework core;
- HTTP "Date" header caching;
- Significant reduction of syscalls count during any recv operations;
- Server::GetRequestsView not initialized if it is not required;
- utils::encoding::ToHex became faster;
- Marking response as ready became faster.
- Better diagnostics for CoroPool initialization failure, thanks to Ivan Trofimov for the PR.
- New handler server::handlers::OnLogRotate.
- Multiple optimizations, including:
- Faster async cancellations for PostgreSQL;
- Avoid using dynamic_cast in multiple places;
- Avoid calling
std::chrono::steady_clock::now()
in multiple places.
- gRPC mockserver support (docs will be updated soon at gRPC client and service).
- gRPC now provides an efficient API for async execution of requests without additional
utils::Async
invocations.
- Build fixes for older platforms, thanks to Yuri Bogomolov for the PR.
- components::Logging now can output logs to UNIX sockets.
- 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 Issues, feature and pull requests, releases for more info.
Beta (September 2022)
- Ivan Trofimov implemented the RabbitMQ driver.
- Added navigation to the next and previous page in docs, thanks to multiple feature requests in Telegram support chat.
- Improved Task::Detach docs and added recomendation to use concurrent::BackgroundTaskStorage instead, thanks to Ivan Trofimov for the bugreport.
- Added
start-
targets for the samples, to simplify experimenting with them.
- Docs now support dark theme out ot the box.
- Fixed CMake issue with
-DUSERVER_FEATURE_TESTSUITE=0
, thanks to Георгий Попов for the bugreport.
- Fixed build on Arch Linux, thanks to Mikhail K. for the bugreport.
- Fixed building in virtual environment on Windows, thanks to sabudilovskiy for the bug report.
- Fixed building with
-std=gnu++20
, thanks to Георгий Попов for the PR.
- Improved package version detection in CMake via
pkg-config
.
- Added a
USERVER_FEATURE_UTEST
flag for disabling utest and ubench target builds, thanks to Anton for the PR.
- Simplified gRPC component registration and usage.
- Added an ability to turn on gRPCs ChannelZ.
- Added evalsha/script load commands for Redis driver.
Beta (August 2022)
- Added server::handlers::HttpHandlerStatic handler to serve static pages.
- Added navigation to previous and next page in docs.
- Optimized internals:
- WaitListLight now never calls std::this_thread::yield().
- More lightweight queues are now used in HTTP server.
- Smaller critical section in TaskContext::Sleep(), improved performance for many the synchronization primitives.
- std::unique_ptr now holds the payload in engine::Task, rather than std::shared_ptr. Thanks to the Stas Zvyagin for the idea and draft PR.
- Simplified and optimized FdControl, resulting in less CPU and memory usage for sockets, pipes and TLS.
- Fixed typos in tests, thanks to Георгий Попов for the PR.
- Removed suspicious operator, thanks to the PatriotRossii for the bugreport.
- Fixed CentOS 7.8 builds, many thanks to jinguoli for the bugreport and fix ideas.
- Fixed Gentoo builds, many thanks to SanyaNya for the PR.
- Fixed default DB values in uservice-dynconf, many thanks to skene2321 for the bugreport.
- Added engine::io::WritableBase and engine::io::RwBase, thanks to Stas Zvyagin for the idea.
- Added components::TcpAcceptorBase with new tutorials TCP half-duplex server with static configs validation and TCP full-duplex server with metrics and Spans, thanks to Stas Zvyagin for the idea and usage samples at https://github.com/szvyagin-gj/unetwork.
- Fixed comparison operator for UserScope, thanks to PatriotRossii for the PR.
- Add CryptoPP version download during CryptoPP installation, thanks to Konstantin for the PR.
- Added more documentation on Non FIFO queues, thanks to Ivan Trofimov for the report.
- Added missing std::atomic into TaskProcessor, thanks to Ivan Trofimov for the report.
- Fixed Boost version detection on MacOs, thanks to Konstantin for the PR.
- Added Fedora 36 support, thanks to Benjamin Conlan for the PR.
- Improved statistics for gRPC.
- Vector versions of engine::io::Socket::SendAll were added and used to optimize CPU and memory consumption during HTTP response sends.
Pre anounce (May-Jul 2022)
- Fixed engine::io::TlsWrapper retries, thanks to Ivan Trofimov for the report.
- Fixed missing
const
in utils::DaemonMain function, thanks to Denis Chernikov for the PR.
- 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.
- You can now allow skipping the component in the static config file by specializing the components::kConfigFileMode, see the documentation.
- The PostgreSQL driver now requires explicit serialization methods when working with enum.
- Optimized CPU consumption for handlers that do not log requests or responses.
- utils::Async() now can be invoked from non-coroutine thread (in that case do not forget to use engine::Task::BlockingWait() to wait for it). tracing::Span construction became faster. Thanks to Ivan Trofimov for the report.
- Improved MacOS support, thanks to Evgeny Medvedev.
- Docker suport: base image for developement, docker-compose.yaml for the userver with build and test targets. See Configure and Build
- Docs improved: removed internal links; added Feature Comparison with other Frameworks, Supported Platforms, About the BETA state, Security Changelog, Profiling context switches, Driver Writing Guide, @md_en_userver_task_processors_guide, Handling OS signals and Roadmap and Changelog.
- AArch64 build supported. Tests pass successfully
- HTTP headers hashing not vulnerable to HashDOS any more, thanks to Ivan Trofimov for the report.
- engine::WaitAny now can wait for engine::Future, including futures that are signaled by engine::Promise from non-coroutine environment.
- Optimized the PostgreSql driver, thanks to Dmitry Sokolov for the idea.
- Arch Linux is now properly supported, thanks to Denis Sheremet and Konstantin Goncharik.
- Published a service to manage dynamic configs of other userver-based services.
- Now it is possible to enable logging a particular LOG_XXX by its source location, see server::handlers::DynamicDebugLog for more details.
- Added a wrapper class utils::NotNull and aliases utils::UniqueRef and utils::SharedRef.
- LTSV-format is now available for logs via components::Logging static option