uvloop 0.22.1


pip install uvloop

  Latest version

Released: Oct 16, 2025

Project Links

Meta
Author: Yury Selivanov
Requires Python: >=3.8.1

Classifiers

Development Status
  • 5 - Production/Stable

Framework
  • AsyncIO

Intended Audience
  • Developers

License
  • OSI Approved :: Apache Software License
  • OSI Approved :: MIT License

Operating System
  • POSIX
  • MacOS :: MacOS X

Programming Language
  • Python :: 3 :: Only
  • Python :: 3.8
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: Implementation :: CPython

Topic
  • System :: Networking
https://img.shields.io/github/actions/workflow/status/MagicStack/uvloop/tests.yml?branch=master https://img.shields.io/pypi/v/uvloop.svg PyPI - Downloads

uvloop is a fast, drop-in replacement of the built-in asyncio event loop. uvloop is implemented in Cython and uses libuv under the hood.

The project documentation can be found here. Please also check out the wiki.

Performance

uvloop makes asyncio 2-4x faster.

https://raw.githubusercontent.com/MagicStack/uvloop/master/performance.png

The above chart shows the performance of an echo server with different message sizes. The sockets benchmark uses loop.sock_recv() and loop.sock_sendall() methods; the streams benchmark uses asyncio high-level streams, created by the asyncio.start_server() function; and the protocol benchmark uses loop.create_server() with a simple echo protocol. Read more about uvloop in a blog post about it.

Installation

uvloop requires Python 3.8 or greater and is available on PyPI. Use pip to install it:

$ pip install uvloop

Note that it is highly recommended to upgrade pip before installing uvloop with:

$ pip install -U pip

Using uvloop

As of uvloop 0.18, the preferred way of using it is via the uvloop.run() helper function:

import uvloop

async def main():
    # Main entry-point.
    ...

uvloop.run(main())

uvloop.run() works by simply configuring asyncio.run() to use uvloop, passing all of the arguments to it, such as debug, e.g. uvloop.run(main(), debug=True).

With Python 3.11 and earlier the following alternative snippet can be used:

import asyncio
import sys

import uvloop

async def main():
    # Main entry-point.
    ...

if sys.version_info >= (3, 11):
    with asyncio.Runner(loop_factory=uvloop.new_event_loop) as runner:
        runner.run(main())
else:
    uvloop.install()
    asyncio.run(main())

Building From Source

To build uvloop, you’ll need Python 3.8 or greater:

  1. Clone the repository:

    $ git clone --recursive git@github.com:MagicStack/uvloop.git
    $ cd uvloop
  2. Create a virtual environment and activate it:

    $ python3 -m venv uvloop-dev
    $ source uvloop-dev/bin/activate
  3. Install development dependencies:

    $ pip install -e .[dev]
  4. Build and run tests:

    $ make
    $ make test

License

uvloop is dual-licensed under MIT and Apache 2.0 licenses.

0.22.1 Oct 16, 2025
0.21.0 Oct 14, 2024
0.21.0b1 Sep 03, 2024
0.20.0 Aug 15, 2024
0.19.0 Oct 22, 2023
0.18.0 Oct 13, 2023
0.17.0 Sep 14, 2022
0.16.0 Aug 10, 2021
0.15.3 Jul 13, 2021
0.15.2 Feb 19, 2021
0.15.1 Feb 15, 2021
0.15.0 Feb 10, 2021
0.14.0 Nov 05, 2019
0.14.0rc2 Oct 29, 2019
0.14.0rc1 Oct 25, 2019
0.13.0 Aug 14, 2019
0.13.0rc1 Apr 25, 2019
0.12.2 Mar 20, 2019
0.12.1 Feb 12, 2019
0.12.0 Jan 21, 2019
0.12.0rc1 Oct 31, 2018
0.11.3 Oct 31, 2018
0.11.2 Aug 07, 2018
0.11.1 Aug 02, 2018
0.11.0 Jul 04, 2018
0.10.3 Aug 07, 2018
0.10.2 Jun 25, 2018
0.10.1 Jun 01, 2018
0.10.0 May 30, 2018
0.9.1 Nov 29, 2017
0.9.0 Nov 26, 2017
0.8.1 Sep 12, 2017
0.8.0 Feb 09, 2017
0.7.2 Jan 05, 2017
0.7.1 Jan 02, 2017
0.7.0 Dec 24, 2016
0.6.8 Dec 23, 2016
0.6.7 Nov 28, 2016
0.6.6 Nov 28, 2016
0.6.5 Nov 10, 2016
0.6.1 Nov 10, 2016
0.6.0 Nov 06, 2016
0.5.5 Nov 06, 2016
0.5.4 Oct 05, 2016
0.5.3 Aug 24, 2016
0.5.2 Aug 11, 2016
0.5.1 Aug 10, 2016
0.5.0 Jul 19, 2016
0.4.34 Jul 12, 2016
0.4.33 Jul 05, 2016
0.4.32 Jul 04, 2016
0.4.31 Jun 28, 2016
0.4.30 Jun 09, 2016
0.4.29 May 29, 2016
0.4.28 May 23, 2016
0.4.27 May 23, 2016
0.4.26 May 21, 2016
0.4.25 May 19, 2016
0.4.24 May 16, 2016
0.4.23 May 14, 2016
0.4.22 May 14, 2016
0.4.21 May 13, 2016
0.4.20 May 13, 2016
0.4.19 May 11, 2016
0.4.18 May 11, 2016
0.4.17 May 11, 2016
0.4.16 May 09, 2016
0.4.15 May 09, 2016
0.4.14 May 07, 2016
0.4.13 May 05, 2016
0.4.12 May 05, 2016
0.4.11 May 04, 2016
0.4.10 May 04, 2016
0.4.9 Apr 28, 2016
0.4.8 Apr 28, 2016
0.4.7 Apr 19, 2016
0.4.6 Apr 14, 2016
0.4.5 Apr 14, 2016
0.4.4 Apr 12, 2016
0.4.3 Apr 12, 2016
0.4.2 Apr 12, 2016
0.4.1 Apr 12, 2016

Wheel compatibility matrix

Platform CPython 3.8 CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython (additional flags: t) 3.14
macosx_10_13_universal2
macosx_10_13_x86_64
macosx_10_9_universal2
macosx_10_9_x86_64
manylinux2014_aarch64
manylinux2014_x86_64
manylinux_2_17_aarch64
manylinux_2_17_x86_64
manylinux_2_28_aarch64
manylinux_2_28_x86_64
musllinux_1_2_aarch64
musllinux_1_2_x86_64

Files in release

uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl (1.3MiB)
uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl (725.5KiB)
uvloop-0.22.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (3.5MiB)
uvloop-0.22.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.5MiB)
uvloop-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl (3.3MiB)
uvloop-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl (3.4MiB)
uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl (1.3MiB)
uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl (731.1KiB)
uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (3.6MiB)
uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.6MiB)
uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl (3.5MiB)
uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl (3.6MiB)
uvloop-0.22.1-cp312-cp312-macosx_10_13_universal2.whl (1.3MiB)
uvloop-0.22.1-cp312-cp312-macosx_10_13_x86_64.whl (735.1KiB)
uvloop-0.22.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (4.1MiB)
uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.2MiB)
uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl (3.9MiB)
uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl (4.1MiB)
uvloop-0.22.1-cp313-cp313-macosx_10_13_universal2.whl (1.3MiB)
uvloop-0.22.1-cp313-cp313-macosx_10_13_x86_64.whl (734.2KiB)
uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (4.1MiB)
uvloop-0.22.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.2MiB)
uvloop-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl (3.9MiB)
uvloop-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl (4.0MiB)
uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl (1.3MiB)
uvloop-0.22.1-cp314-cp314-macosx_10_13_x86_64.whl (734.8KiB)
uvloop-0.22.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (4.1MiB)
uvloop-0.22.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.1MiB)
uvloop-0.22.1-cp314-cp314-musllinux_1_2_aarch64.whl (3.9MiB)
uvloop-0.22.1-cp314-cp314-musllinux_1_2_x86_64.whl (4.0MiB)
uvloop-0.22.1-cp314-cp314t-macosx_10_13_universal2.whl (1.4MiB)
uvloop-0.22.1-cp314-cp314t-macosx_10_13_x86_64.whl (778.1KiB)
uvloop-0.22.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (4.4MiB)
uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.3MiB)
uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl (4.1MiB)
uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl (4.1MiB)
uvloop-0.22.1-cp38-cp38-macosx_10_9_universal2.whl (1.3MiB)
uvloop-0.22.1-cp38-cp38-macosx_10_9_x86_64.whl (751.1KiB)
uvloop-0.22.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (4.0MiB)
uvloop-0.22.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (4.0MiB)
uvloop-0.22.1-cp38-cp38-musllinux_1_2_aarch64.whl (3.8MiB)
uvloop-0.22.1-cp38-cp38-musllinux_1_2_x86_64.whl (3.9MiB)
uvloop-0.22.1-cp39-cp39-macosx_10_9_universal2.whl (1.3MiB)
uvloop-0.22.1-cp39-cp39-macosx_10_9_x86_64.whl (726.5KiB)
uvloop-0.22.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (3.5MiB)
uvloop-0.22.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (3.5MiB)
uvloop-0.22.1-cp39-cp39-musllinux_1_2_aarch64.whl (3.3MiB)
uvloop-0.22.1-cp39-cp39-musllinux_1_2_x86_64.whl (3.4MiB)
uvloop-0.22.1.tar.gz (2.3MiB)
Extras:
Dependencies: