A multi-platform support library focused on asynchronous I/O, originally developed for Node.js.
libuv is a cross-platform C library that provides asynchronous I/O capabilities, an event loop, and threading primitives. It abstracts low-level operating system APIs for network and file operations, enabling the development of high-performance, non-blocking applications. Originally created to power Node.js, it solves the problem of writing portable, event-driven systems software.
Systems programmers and developers building high-performance network servers, runtime environments, or cross-platform applications requiring non-blocking I/O operations.
Developers choose libuv for its battle-tested reliability, extensive platform support, and efficient abstraction of complex OS-specific I/O APIs. Its event-driven architecture is optimized for scalability and is the foundation for popular runtimes like Node.js and Julia.
Cross-platform asynchronous I/O
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Abstracts OS-specific I/O APIs like epoll, kqueue, and IOCP, enabling applications to run consistently across Linux, macOS, Windows, and more, as detailed in the event loop documentation.
Provides non-blocking operations for TCP/UDP sockets and file systems, proven in scalable systems like Node.js, with benchmarks available in the test suite.
Includes asynchronous DNS resolution, TTY handling, IPC, signal handling, and threading primitives, making it a one-stop library for event-driven systems, as listed in the feature highlights.
Widely adopted in production by Node.js, Julia, and others, with stable ABI and semantic versioning ensuring long-term support and compatibility.
Requires multiple build systems (autotools or CMake) with platform-specific prerequisites, such as Visual Studio on Windows, which can be cumbersome for new users.
Recommends the `-fno-strict-aliasing` flag to avoid issues with API design, adding an extra step and potential for subtle bugs if overlooked.
As a low-level C library, it demands manual memory management and deep understanding of event-driven patterns, unlike higher-level alternatives with more abstractions.
Focuses on raw async primitives, so developers must build custom solutions for common patterns like HTTP servers, increasing initial development effort.