Description
SeaStar is an event-driven framework allowing you to write non-blocking, asynchronous code in a relatively straightforward manner (once understood). It is based on futures.
Seastar alternatives and similar libraries
Based on the "Frameworks" category.
Alternatively, view Seastar alternatives based on common mentions on social networks and blogs.
-
OpenFrameworks
openFrameworks is a community-developed cross platform toolkit for creative coding in C++. -
JUCE
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, LV2 and AAX audio plug-ins. -
Cinder
Cinder is a community-developed, free and open source library for professional-quality creative coding in C++. -
libPhenom
DISCONTINUED. libPhenom is an eventing framework for building high performance and high scalability systems in C. [Apache2] -
ffead-cpp
Framework for Enterprise Application Development in c++, HTTP1/HTTP2/HTTP3 compliant, Supports multiple server backends -
LibU
LibU is a multiplatform utility library written in C, with APIs for handling memory allocation, networking and URI parsing, string manipulation, debugging, and logging in a very compact way, plus many other miscellaneous tasks -
Loki
Loki is a C++ library of designs, containing flexible implementations of common design patterns and idioms. -
XPLPC - Cross Platform Lite Procedure Call
Cross Platform Lite Procedure Call - Support Linux, macOS, Windows, iOS, Android, Web Assembly, Flutter, Kotlin, Python and More -
Windows Template Library
A C++ library for developing Windows applications and UI components. [Public] -
GLib
GLib provides the core application building blocks for libraries and applications written in C. [LGPL] -
ROOT
A set of OO frameworks with all the functionality needed to handle and analyze large amounts of data in a very efficient way. Used at CERN. [LGPL] -
Reason
A cross platform framework designed to bring the ease of use of Java, .Net, or Python to developers who require the performance and strength of C++. [GPL2] -
Cxxomfort
A small, header-only library that backports to C++03 some of the nifty C++11 goodies. [MIT]
SaaSHub - Software Alternatives and Reviews
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Seastar or a related project?
Popular Comparisons
README
Seastar
Introduction
SeaStar is an event-driven framework allowing you to write non-blocking, asynchronous code in a relatively straightforward manner (once understood). It is based on futures.
Building Seastar
For more details and alternative work-flows, read [HACKING.md](./HACKING.md).
Assuming that you would like to use system packages (RPMs or DEBs) for Seastar's dependencies, first install them:
$ sudo ./install-dependencies.sh
then configure (in "release" mode):
$ ./configure.py --mode=release
then compile:
$ ninja -C build/release
If you're missing a dependency of Seastar, then it is possible to have the configuration process fetch a version of the dependency locally for development.
For example, to fetch fmt
locally, configure Seastar like this:
$ ./configure.py --mode=dev --cook fmt
--cook
can be repeated many times for selecting multiple dependencies.
Build modes
The configure.py script is a wrapper around cmake. The --mode argument maps to CMAKE_BUILD_TYPE, and supports the following modes
CMake mode | Debug info | Optimizations | Sanitizers | Allocator | Checks | Use for | |
---|---|---|---|---|---|---|---|
debug | Debug |
Yes | -O0 |
ASAN, UBSAN | System | All | gdb |
release | RelWithDebInfo |
Yes | -O3 |
None | Seastar | Asserts | production |
dev | Dev (Custom) |
No | -O1 |
None | Seastar | Asserts | build and test cycle |
sanitize | Sanitize (Custom) |
Yes | -Os |
ASAN, UBSAN | System | All | second level of tests, track down bugs |
Note that seastar is more sensitive to allocators and optimizations than usual. A quick rule of the thumb of the relative performances is that release is 2 times faster than dev, 150 times faster than sanitize and 300 times faster than debug.
Using Seastar from its build directory (without installation)
It's possible to consume Seastar directly from its build directory with CMake or pkg-config
.
We'll assume that the Seastar repository is located in a directory at $seastar_dir
.
Via pkg-config
:
$ g++ my_app.cc $(pkg-config --libs --cflags --static $seastar_dir/build/release/seastar.pc) -o my_app
and with CMake using the Seastar
package:
CMakeLists.txt
for my_app
:
find_package (Seastar REQUIRED)
add_executable (my_app
my_app.cc)
target_link_libraries (my_app
Seastar::seastar)
$ mkdir $my_app_dir/build
$ cd $my_app_dir/build
$ cmake -DCMAKE_PREFIX_PATH="$seastar_dir/build/release;$seastar_dir/build/release/_cooking/installed" -DCMAKE_MODULE_PATH=$seastar_dir/cmake $my_app_dir
The CMAKE_PREFIX_PATH
values ensure that CMake can locate Seastar and its compiled submodules. The CMAKE_MODULE_PATH
value ensures that CMake can uses Seastar's CMake scripts for locating its dependencies.
Using an installed Seastar
You can also consume Seastar after it has been installed to the file-system.
Important:
- Seastar works with a customized version of DPDK, so by default builds and installs the DPDK submodule to
$build_dir/_cooking/installed
First, configure the installation path:
$ ./configure.py --mode=release --prefix=/usr/local
then run the install
target:
$ ninja -C build/release install
then consume it from pkg-config
:
$ g++ my_app.cc $(pkg-config --libs --cflags --static seastar) -o my_app
or consume it with the same CMakeLists.txt
as before but with a simpler CMake invocation:
$ cmake ..
(If Seastar has not been installed to a "standard" location like /usr
or /usr/local
, then you can invoke CMake with -DCMAKE_PREFIX_PATH=$my_install_root
.)
There are also instructions for building on any host that supports [Docker](doc/building-docker.md).
Use of the DPDK is [optional](doc/building-dpdk.md).
Seastar's C++ dialect: C++17 or C++20
Seastar supports both C++17, and C++20. It can be selected with the
--c++-dialect=gnu++17
configure option or, if using CMake directly,
by setting on the Seastar_CXX_DIALECT
CMake variable.
See the [compatibity statement](doc/compatibility.md) for more information.
Getting started
There is a [mini tutorial](doc/mini-tutorial.md) and a [more comprehensive one](doc/tutorial.md).
The documentation is available on the web.
Resources
Ask questions and post patches on the development mailing list. Subscription information and archives are available here, or just send an email to [email protected].
Information can be found on the main project website.
File bug reports on the project issue tracker.
The Native TCP/IP Stack
Seastar comes with its own [userspace TCP/IP stack](doc/native-stack.md) for better performance.
Recommended hardware configuration for SeaStar
- CPUs - As much as you need. SeaStar is highly friendly for multi-core and NUMA
- NICs - As fast as possible, we recommend 10G or 40G cards. It's possible to use 1G too but you may be limited by their capacity. In addition, the more hardware queue per cpu the better for SeaStar. Otherwise we have to emulate that in software.
- Disks - Fast SSDs with high number of IOPS.
- Client machines - Usually a single client machine can't load our servers. Both memaslap (memcached) and WRK (httpd) cannot over load their matching server counter parts. We recommend running the client on different machine than the servers and use several of them.
Projects using Seastar
- cpv-cql-driver: C++ driver for Cassandra/Scylla based on seastar framework
- cpv-framework: A web framework written in c++ based on seastar framework
- redpanda: A Kafka replacement for mission critical systems
- Scylla: A fast and reliable NoSQL data store compatible with Cassandra and DynamoDB
- smf: The fastest RPC in the West
*Note that all licence references and agreements mentioned in the Seastar README section above
are relevant to that project's source code only.