Project: userver (App Definition and Development / Streaming & Messaging)
File: landing.md

\htmlonly <link rel="stylesheet" href="landing.css" /> <main class="main"> <section class="section info"> <div class="infoblock container"> <div class="infoheader"> <div class="infotitle"></div> <a href="de/d6a/mden2index.html" class="infologo" title="lick on me to go to the documentation " id="landinglogoid" ></a> </div> <p class="infoparagraph paragraph mt"> <span class="uservertitle uservertitle_p">userver</span> is the modern open source asynchronous framework with a rich set of abstractions for fast and comfortable creation of C++ microservices, services and utilities. </p> <div class="infobuttons mt"> <a class="button" title="Go to the documentation" href="de/d6a/mden2index.html" > documentation </a> <a class="button buttonoutline generictg_link" title="Go to the userver Telegram" href="https://t.me/userver_en" > > Community </a> </div> </div> </section> <section class="section how container"> <h2>How It Works</h2> <p class="howinfo paragraph"> The problem of efficient I/O interactions is solved transparently for the developers </p> <div class="howcodeblocks mt"> <div class="codeblock codeblock_userver"> <div class="codeblockheader"> <span class="uservertitle"> userver</span> </div> <pre class="codeblockbody" ><code> std::size_t Ins(storages::postgres::Transaction& tr, std::string_view key) { auto res = tr.Execute("INSERT INTO keys VALUES ($1)", key); return res.RowsAffected(); }</code></pre> </div> <div class="codeblock codeblockoverflow codeblockgrey codeblock_cpp" > <div class="codeblockheader">Classic C++</div> <pre class="codeblockbody"><code>template &lt;class OnSuccess&gt; void Ins(storages::postgres::Transaction& tr, std::stringview key, OnSuccess&& onsuccess) { tr.Execute("INSERT INTO keys VALUES ($1)", key, [onsuccess = std::forward&lt;OnSuccess&gt;(onsuccess)] (const auto& res, const auto& error) { if (error) { report_error(error); return; } on_success(res.RowsAffected()); } ); }</code></pre> </div> </div> </section> <section class="section values container"> <h2>Values of <span class="uservertitle">userver</span></h2> <div class="valuescards mt"> <div class="valuescard"> <span class="valuesicon thumbnail thumbnail_debugging"></span> <p class="valuescardinfo"> Technologies for debugging and memory profiling a running production service </p> </div> <div class="valuescard"> <span class="valuesicon thumbnail thumbnail_modern"></span> <p class="valuescardinfo"> Write your first toy C++ service, evolve it into a production ready service. </p> </div> <div class="valuescard"> <span class="valuesicon thumbnail thumbnail_asynchronous"></span> <p class="valuescardinfo"> Efficient asynchronous drivers for databases (MongoDB, PostgreSQL, MySQL/MariaDB, Redis, ClickHouse, ...) and data transfer protocols (HTTP, WEbSockets, gRPC, TCP, AMQP-0.9.1, Apache Kafka, ...), tasks construction and cancellation. </p> </div> <div class="valuescard"> <span class="valuesicon thumbnail thumbnail_plane"></span> <p class="valuescardinfo"> Functionality to change the service configuration on-the-fly. Adjust options of the deadline propagation, timeouts, congestion-control without a restart. </p> </div> <div class="valuescard"> <span class="valuesicon thumbnail thumbnail_tools"></span> <p class="valuescardinfo"> Rich set of high-level components for caches, tasks, distributed locking, logging, tracing, statistics, metrics, JSON/YAML/BSON. </p> </div> <div class="valuescard"> <span class="valuesicon thumbnail thumbnail_abstractions"></span> <p class="valuescardinfo"> Comprehensive set of asynchronous low-level synchronization primitives and OS abstractions. </p> </div> </div> </section> <section class="section companies container"> <h2> Brands and companies using <span class="uservertitle">userver</span> </h2> <div class="companieslogos mt"> <span class="logo logo_uber" title="Uber Russia"></span> <span class="logo logo_delivery" title="Delivery club"></span> <span class="logo logo_matchmaker" title="Matchmaker"></span> <span class="logo logo_yago" title="Yandex Go"></span> </div> </section> </main> <!-- Highlight codeblocks --> <script src="highlight.min.js"></script> <script> document.querySelectorAll(".codeblockbody").forEach((el) => { hljs.highlightElement(el); }); </script> <!-- Hide some blocks on landing page --> <script type="text/javascript"> document.querySelector(".header").style.display = "none"; </script> \endhtmlonly