HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
libuv
libuv
C2014–2026
libuv / libuv

libuv

Cross-platform asynchronous I/O

40Distinct people
47Mentions
0Explicit recommenders
27.3KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Cross-platform asynchronous I/O

GitHub

Where it is used

  • Node.js — Node.js uses libuv to implement its Worker Pool. It relies on this pool to handle expensive tasks. Source

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 12:24:10 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year47 dated mentions

Observed mentions: 2014-11-26 15:17:24 UTC to 2026-01-01 20:08:06 UTC.

0369122014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20142015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 12 mentions; 2 submissions, 10 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC202
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC404
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC303
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC202
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC303
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC606
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC303
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC404
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC202
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC12210
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC312
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC202
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Overview libuv is a multi-platform support library with a focus on asynchronous I/O. It was primarily developed for use by Node.js, but it's also used by Luvit, Julia, uvloop, and others. Feature highlights Full-featured event loop backed by epoll, kqueue, IOCP, event ports. Asynchronous TCP and UDP sockets Asynchronous DNS resolution Asynchronous file and file system operations File system events ANSI escape code controlled TTY IPC with socket sharing, using Unix domain sockets or named pipes (Windows) Child processes Thread pool Signal handling High resolution clock Threading and synchronization primitives Versioning Starting with version 1.0.0 libuv follows the semantic versioning scheme. The API change and backwards compatibility rules are those indicated by SemVer. libuv will keep a stable ABI across major releases. The ABI/API changes can be tracked here. Licensing libuv is licensed under the MIT license. Check the LICENSE and LICENSE-extra files. The documentation is licensed under the CC BY 4.0 license. Check the LICENSE-docs file. Community Support Mailing list Documentation Official documentation Located in the docs/ subdirectory. It uses the Sphinx framework, which makes it possible to build the documentation in multiple formats. Show different supported building options: $ make help Build documentation as HTML: $ make html Build documentation as HTML and live reload it when it changes (this requires sphinx-autobuild to be installed and is only supported on Unix): $ make livehtml Build documentation as man pages: $ make man Build documentation as ePub: $ make epub NOTE: Windows users need to use make.bat instead of plain 'make'. Documentation can be browsed online here. The tests and benchmarks also serve as API specification and usage examples. Other resources LXJS 2012 talk — High-level introductory talk about libuv. libuv-dox — Documenting types and methods of libuv, mostly by reading uv.h. learnuv — Learn uv for fun and profit, a self guided workshop to libuv. These resources are not handled by libuv maintainers and might be out of date. Please verify it before opening new issues. Downloading libuv can be downloaded either from the GitHub repository or from the downloads site. Before verifying the git tags or signature files, importing the relevant keys is necessary. Key IDs are listed in the MAINTAINERS file, but are also available as git blob objects for easier use. Importing a key the usual way: $ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059 Importing a key from a git blob object: $ git show pubkey-saghul | gpg --import Verifying releases Git tags are signed with the developer's key, they can be verified as follows: $ git verify-tag v1.6.1 Starting with libuv 1.7.0, the tarballs stored in the downloads site are signed and an accompanying signature file sit alongside each. Once both the release tarball and the signature file are downloaded, the file can be verified as follows: $ gpg --verify libuv-1.7.0.tar.gz.sign Build Instructions For UNIX-like platforms, including macOS, there are two build methods: autotools or CMake. For Windows, CMake is the only supported build method and has the following prerequisites: Details One of: Visual C++ Build Tools Visual Studio 2015 Update 3, all editions including the Community edition (remember to select "Common Tools for Visual C++ 2015" feature during installation). Visual Studio 2017, any edition (including the Build Tools SKU). Required Components: "MSbuild", "VC++ 2017 v141 toolset" and one of the Windows SDKs (10 or 8.1). Basic Unix tools required for some tests, Git for Windows includes Git Bash and tools which can be included in the global PATH. To build with autotools: $ sh autogen.sh $ ./configure $ make $ make check $ make install To build with CMake: $ cmake -B build -DBUILD_TESTING=ON # generate project with tests $ cmake --build build # add `-j <n>` with cmake >= 3.12 # Run tests: $ (cd build && ctest -C Debug --output-on-failure) # Or manually run tests: $ build/uv_run_tests # shared library build $ build/uv_run_tests_a # static library build To cross-compile with CMake (unsupported but generally works): $ cmake ../.. \ -DCMAKE_SYSTEM_NAME=Windows \ -DCMAKE_SYSTEM_VERSION=6.1 \ -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc Install with Homebrew $ brew install --HEAD libuv Note to macOS users: Make sure that you specify the architecture you wish to build for in the "ARCHS" flag. You can specify more than one by delimiting with a space (e.g. "x86_64 i386"). Install with vcpkg $ git clone https://github.com/microsoft/vcpkg.git $ ./bootstrap-vcpkg.bat # for powershell $ ./bootstrap-vcpkg.sh # for bash $ ./vcpkg install libuv Install with Conan You can install pre-built binaries for libuv or build it from source using Conan. Use the following command: conan install --requires="libuv/[*]" --build=missing The libuv Conan recipe is kept up to date by Conan maintainers and community contributors. If the version is out of date, please create an issue or pull request on the ConanCenterIndex repository. Running tests Some tests are timing sensitive. Relaxing test timeouts may be necessary on slow or overloaded machines: $ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s Run one test The list of all tests is in test/test-list.h. This invocation will cause the test driver to fork and execute TEST_NAME in a child process: $ build/uv_run_tests_a TEST_NAME This invocation will cause the test driver to execute the test in the same process: $ build/uv_run_tests_a TEST_NAME TEST_NAME Debugging tools When running the test from within the test driver process (build/uv_run_tests_a TEST_NAME TEST_NAME), tools like gdb and valgrind work normally. When running the test from a child of the test driver process (build/uv_run_tests_a TEST_NAME), use these tools in a fork-aware manne
Read the full README on GitHub

What Hacker News says

47 sources
The code is very readable and well organized. My only major critique is that there's very little error checking, e.g. there are many calls to snprintf and malloc without checking the result. There is also an unused loop here [1]. As an aside, I don't see any support for parallelization. That's fine for an initial implementation, but web servers do benefit from threading off requests. If you go that route (pun intended) you might consider using something like libuv [2]. [1] https://github.com/ashtonjamesd/lavandula/blob/51d86a284dc7d... [2] https://github.com/libuv/libuv
In Show HN: I built a web framework in C
It seems that Bare is also built on top of V8 and libuv, much like Node.js. Bare is built on top of https://github.com/holepunchto/libjs, which provides low-level bindings to V8 in an engine independent manner, and https://github.com/libuv/libuv, which provides an asynchronous I/O event loop. (from their README) Moreover, you actually need Node.js and npm to install and run it. You need another JavaScript runtime as a prerequisite to install this JavaScript runtime… npm i -g bare (also from their README) I don't get it – is it worth it to choose Bare over a more established and welly-maintained solution?
In Bare: Run JavaScript Everywhere
OrbStack is by far some of the best software I've encountered on Mac, but unfortunately I have difficulty convincing my employer to pay for a commercial license, and with my sparse Docker usage, I'm confined to using it only for personal/hobby usage. What's amazing is it fixes an (almost) show stopper bug when using libuv (or software that uses it like CMake) with Rosetta 2 [1], with the bug present on all Docker/VMs I've tried except OrbStack. It just seems to get everything right. [1]: https://github.com/libuv/libuv/issues/4279
In OrbStack: The fast, light, and easy way to run Docker containers and Linux
I feel a bit paralyzed by Fear Of Missing Io_Uring. There's so much awesome streaming stuff about (RisingWave, Materialize, NATS, DataFusion, Velox, neat upstarts like Iggy, many more), but it all feels built on slower legacy system libraries. It's not heavily used yet, but Rust has a bunch of fairly high visibility efforts. Situation sort of feels similar with http3, where the problem is figuring out what to pick. https://github.com/tokio-rs/tokio-uring https://github.com/bytedance/monoio https://github.com/DataDog/glommio Alas libuv (powering Node.js) shipped io_uring but disabled it latter. Seems to have significantly worn out the original author on the topic to boot. https://github.com/libuv/libuv/pull/4421#issuecomment-222586...
In Gazette: Cloud-native millisecond-latency streaming
Ideally support gets built into languages & users just get a free performance boost without even thinking about it. Wouldn't that be great? Bun has io-uring support. Deno issue, https://github.com/denoland/deno/issues/16232 . Node.js issue with prototype, https://github.com/libuv/libuv/issues/1947. Getting good seems interesting & compelling to me. I'm not quite sure where your dislike of this better way of doing things stems from? Even if it does mean changing how we program a bit, to actually go about adopting a better way.
In Using io_uring for network I/O

Showing the 15 most recent of 47 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.