reactor.nim is an asynchronous networking engine for Nim. It's based on libuv and provides future-based API.
reactor.nim doesn't use asynchronous mechanisms from asyncdispatch stdlib module and instead provides its own. They are arguably richer and more performant. The API is inspired by Dart and Midori OS (in particular by this article).
reactor.nim currently works on Linux and macOS. Windows support is in works - see issue #3. Other platforms supported by libuv and Nim should be relatively easy to add.
As you are probably going to deal with untrusted data, you should enable range checks even if compiling in release mode - see example nim.cfg. reactor.nim treats security very seriously.
reactor.nim consists of several modules.
reactor/async (API docs: event, result, future, stream, asyncmacro, bytes, asyncutil)
This module implements several primitives for writing asynchronous code - in particular futures (also called promises in some languages) and asynchronous streams.
reactor/loop (API docs)
Module implementing the event loop. You will probably only use runLoop function from it.
reactor/time (API docs)
Sleep asynchronously.
reactor/threading (API docs)
Execute blocking tasks in a thread pool.
reactor/ipaddress (API docs)
Parse and manipulate IPv4/IPv6 addresses.
reactor/resolv (API docs)
Resolve hostname into IP addresses.
reactor/tcp (API docs)
Make TCP connections and listen on TCP sockets.
reactor/udp (API docs)
Send and receive UDP packets.
reactor/tls (API docs)
TLS/SSL support using OpenSSL.
reactor/http/httpclient (API docs)
HTTP client.
reactor/process (API docs)
Spawn new processes.
reactor/redis (API docs)
Redis client.
reactor/tun (API docs)
TUN/TAP support (for Linux only).
There are libraries that are not part of reactor.nim, but are compatible with it:
Filesystem in userspace (FUSE).
Cap'n Proto serialization and RPC.