lithdew/pike
{ "createdAt": "2020-09-28T09:41:06Z", "defaultBranch": "master", "description": "Async I/O for Zig", "fullName": "lithdew/pike", "homepage": "", "language": "Zig", "name": "pike", "pushedAt": "2023-03-25T23:18:24Z", "stargazersCount": 139, "topics": [ "async", "epoll", "io", "iocp", "kqueue", "linux", "mac", "networking", "signal", "tcp", "udp", "windows", "zig" ], "updatedAt": "2025-10-27T11:27:24Z", "url": "https://github.com/lithdew/pike"}A minimal cross-platform high-performance async I/O library written in Zig.
Features
Section titled “Features”- Reactor/proactor-based I/O notification support
- epoll (linux)
- kqueue (darwin)
- i/o completion ports (windows)
- Async POSIX socket support
-
bind,listen,connect,accept -
read,recv,recvFrom -
write,send,sendTo - get/set socket options
-
- Async Windows socket support
-
bind,listen,connect,accept -
read,recv,recvFrom -
write,send,sendTo - get/set socket options
-
- Async signal support
- signalfd for epoll (linux)
- EVFILT_SIGNAL for kqueue (darwin)
- SetConsoleCtrlHandler for i/o completion ports (windows)
- Async event support
- sigaction (posix)
- SetConsoleCtrlHandler (windows)
Design
Section titled “Design”Notifier
Section titled “Notifier”A Notifier notifies of the completion of I/O events, or of the read/write-readiness of registered file descriptors/handles.
Should a Notifier report the completion of I/O events, it is designated to wrap around a proactor-based I/O notification layer in the operating system such as I/O completion ports on Windows.
Should a Notifier report the read/write-readiness of registered file descriptors/handles, it is designated to wrap around a reactor-based I/O notification layer in the operating system such as epoll on Linux, or kqueue on Darwin-based operating systems.
The Notifier’s purpose is to drive the execution of asynchronous I/O syscalls upon the notification of a reactor/proactor-based I/O event by dispatching suspended asynchronous function frames to be resumed by a thread pool/scheduler (e.g. kprotty/zap).
Handle
Section titled “Handle”A Handle’s implementation is specific to a Notifier implementation, though overall wraps around and represents a file descriptor/handle in a program.
Subject to the Notifier implementation a Handle’s implementation falls under, state required to drive asynchronous I/O syscalls through a Handle is kept inside a Handle.
An example would be an intrusive linked list of suspended asynchronous function frames that are to be resumed upon the recipient of a notification that a file descriptor/handle is ready to be written to/read from.