userver: Feature Comparison with other Frameworks
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
Feature Comparison with other Frameworks

If you find info in this table inaccurate, please propose a PR with the fix.

The table below shows features of different high-level asynchronous frameworks. Note that the framework has to provide components well integrated into each other. For example, a framework with "Async PostgreSQL", "Dynamic Config" and "Metrics" has to have metrics for the PostgreSQL driver and dynamic configs to control the driver behavior at runtime. Such framework gets the ✔️ in the table below. If the components have weak integration with each other or require additional work for such integration (the usual case for third-party library), then the framework gets ± mark in the table below. For missing functionality or if we found no info on the functionality we use ❌ and ❓ respectively.

Feature 🐙 userver go-micro 4.7.0 dapr 1.5.3 actix 0.13.0 + tokio 1.19.2 drogon 1.7.5
Programming model for IO-bound apps stackful coroutines stackful coroutines actors stackless coroutines callbacks / stackless coroutines
Programming language to use С++ Go-lang Python, JS, .Net, PHP, Java, Go Rust C++
Caching data from remote or DB ✔️ [↗]
Dynamic Config [1] ✔️ [↗] ✔️ [↗]
Unit testing ✔️ C++ [↗] ✔️ via Go-lang ✔️ PHP [↗] ✔️ ✔️ [↗]
Functional Testing [2] ✔️ [↗] [↗] [↗] [↗]
Async synchronization primitives ✔️ [↗] ✔️ via Go-lang forces turn based access ✔️ [↗]
Dist locks ✔️ ✔️ [↗] [↗] ± third-party libs
Async HTTP client ✔️ [↗] ✔️ ✔️ ✔️ ✔️ [↗]
Async HTTP server ✔️ [↗] ✔️ ✔️ ✔️ ✔️
Async gRPC client ✔️ [↗] ✔️ ✔️ ± third-party libs
Async gRPC server ✔️ [↗] ✔️ ✔️ ± third-party libs
Async PostgreSQL ✔️ [↗] ± third-party driver ✔️ [↗] manual offloading ✔️ [↗]
PostgreSQL pipelining, binary protocol ✔️ [↗] ± third-party libs
Async Redis ✔️ [↗] ± third-party driver ✔️ [↗] ± third-party libs ✔️ [↗]
Async Mongo ✔️ [↗] ± third-party driver ✔️ [↗] manual offloading [↗]
Async ClickHouse ✔️ [↗] ± third-party driver ± third-party libs [↗]
Async MySQL ✔️ MySQL Driver - EXPERIMENTAL ± third-party driver ✔️ [↗] [↗] ✔️ [↗]
Metrics ✔️ [↗] ± third-party driver ✔️ [↗]
No args evaluation for disabled logs ✔️ [↗] ± third-party libs
Secrets Management ± [↗] ✔️
Distributed Tracing ✔️ [↗] ✔️ [↗] ± third-party libs
JSON, BSON, YAML ✔️ [↗] ± third-party libs ± third-party libs ± third-party libs ± only JSON
Content compression/decompression ✔️ ✔️ ✔️ ✔️
Service Discovery ✔️ DNS, DB topology discovery ✔️ [↗]
Async TCP/UDP ✔️ [↗] ✔️ ✔️ [↗]
Async TLS Socket ✔️ [↗] ✔️ ± third-party libs
Async HTTPS client ✔️ [↗] ✔️ ✔️
Async HTTPS server ✔️ [↗] ✔️
WebSockets Server ✔️ [↗] ± third-party libs [↗] ± third-party libs ✔️ [↗]
Deadlines and Cancellations ✔️ ± [↗]
Retries and Load Balancing ✔️ ✔️ [↗] ✔️

[1]: "Dynamic Configs" stands for any out-of-the-box functionality that allows to change behavior of the service without downtime and restart.

[2]: Functional Testing includes DB startup and initialization; mocks for other microservices; testpoints functionality.