Skip to content
A D port of Python's asyncio library
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
test Get rid of a dub warning Apr 13, 2016
.gitignore Libasync cleanup Apr 25, 2015
LICENSE_1_0.txt First commit Jan 23, 2015
dub.json Update libasync dependency to 0.8.3 Jun 27, 2018

Build Status


This library provides infrastructure for writing concurrent code using coroutines, multiplexing I/O access over sockets and other resources, running network clients and servers, and other related primitives.

It implements most of the python 3 asyncio API.

API Reference

Can be found at:

Implementation status

  • Timers (done)
  • Futures, Tasks (done)
  • Sockets (done)
  • Streams (done)
  • Subprocesses (not implemented)
  • Locks and semaphores (done)
  • Queues (done)

Why yet another async library? What is wrong with vibe.d?

  • asynchronous is a library and not a framework
  • it is not web-oriented, compatible with std.socket
  • arguably nicer API
  • event loop start/stop control
  • uses @Coroutine UDA to mark functions that could trigger a task (fiber) switch, although this is not enforced yet by the compiler.

Examples and tutorials

Some small examples can be found in the test directory or as unittests. For larger examples please use the Python/asyncio resources.

Please keep in mind that, in contrast with Python/asyncio, in D a coroutine MUST be called from within a Task, otherwise it causes a run-time error on the fiber switch. Basic rule: if not called from another coroutine, any coroutine call need to be wrapped by ensureFuture or EventLoop.createTask.

You can’t perform that action at this time.