ae 0.0.3576

CyberShadow's ArmageddonEngine utilites for almost everything

To use this package, run the following command in your project's root directory:

Manual usage
Put the following dependency into your project's dependences section:


About this library

ae (*almost everything*) is an auxiliary general-purpose D library. Its design goals are composability and simplicity.

Among many things, it implements an asynchronous event loop, and several network protocols, such as HTTP / IRC / TLS.


The library is split into the following packages:

  • ae.demo – This package contains a few demos for various parts of the library.
  • – All the networking code (event loop, HTTP, NNTP, IRC) lives here.
  • ae.sys – Utility code which primarily interfaces with other systems (including the operating system).
  • ae.ui – Framework for creating 2D games and graphical applications (SDL, OpenGL).
  • ae.utils – Utility code which primarily manipulates data.

Notable sub-packages:

  • ae.sys.d – Builds arbitrary versions of D. Shared by Digger, DAutoTest, and TrenD.
  • – High-level synchronous API for accessing network resources (URLs). Includes implementations based on cURL, WinINet, and
  • ae.utils.functor – Functor primitives and functions, allowing @nogc range manipulation and text formatting.
  • – Contains a templated graphical context optimized for speed, and basic support for a few image formats.
  • ae.utils.promise – Implementation of Promises/A+, async/await, and related operations. Can be used on top of the asynchronous API.
  • ae.utils.time – Supplements core.time and std.datetime with extras such as PHP-like parsing / formatting and floating-point duration operations.

General concepts:

  • Data: Many modules that handle raw data (from the network / disk) do so using the Data structure, defined in See the module documentation for a description of the type; the quick version is that it is a type equivalent to void[], with a few benefits. Some modules use DataVec, a Data vector with deterministic lifetime, to minimize copying / reallocations when handling byte streams with unknown length.
  • Networking: ae uses asynchronous event-based networking. A select-based event loop dispatches events to connection objects, which then propagate them to higher-level code as necessary. libev support is also available.
  • UI: The ae.ui package contains basic support for cross-platform interactive applications using SDL. There is a working game demo in ae.demo.pewpew.

What uses this library?


You may peruse the documentation generated from DDoc on

Other ways to get started with this library is to:

  • Play with the demo programs (in the demo directory)
  • Look at open-source projects using this library (see above)
  • Use your editor's "go to definition" feature to navigate the implementation.

Using this library

  • If you are using Dub, simply add a dependency to ae (or a subpackage) in your project.

The main package has no additional dependencies, with the rest of the library being split out into sub-packages which have additional dependencies (such as OpenSSL).

See dub.sdl for details.

  • If you are not using Dub, note that this library has multiple entry points and many optional dependencies, so compiling and linking all *.d files into a single library will not work. In this circumstance, the best way is to simply use recursive compilation (rdmd or dmd -i).

You can achieve strong versioning and avoid configuring compiler import paths by setting it up as a git submodule in your project's root, as seen here.


There are currently no stable/development branches, and versioning is done only according to the number of commits in master.

Breaking changes are prefixed with [BREAKING] in the commit message. Each such commit includes a rationale and instructions for updating affected code.

Tags are created regularly for the benefit of Dub packages (e.g. Digger).

The bleeding-edge version can be found in the next branch (which may be regularly force-pushed).


Except where stated otherwise, this library is licensed under the Mozilla Public License, v. 2.0. (Approximate summary: you only need to publish the source code of the files from this library that you edited.)

Modules under licenses other than MPL are:

  • ae.utils.digest_murmurhash3 - D port of a C MurmurHash3 implementation. Public Domain.
  • - Data for an 8x8 bitmap font created by Daniel Hepper. Public Domain.
  • - Code to convert between RGB and HLS. Ported from a Microsoft Knowledge Base article. License [unclear](
  • ae.utils.text.parsefp - Parse floating-point values from strings. Adapted from Phobos. [Boost License 1.0](
Sub packages:
ae:zlib, ae:sqlite, ae:openssl, ae:libpng, ae:sdl2, ae:windows, ae:x11, ae:sys-net-ae, ae:sys-net-cachedcurl, ae:sys-net-curl, ae:sys-net-system, ae:sys-net-wininet, ae:sys-net-test, ae:app-main-posix, ae:app-main-windows, ae:app-main
0.0.3576 2024-Jul-18
0.0.3574 2024-Jul-05
0.0.3573 2024-Jul-02
0.0.3572 2024-Jun-19
0.0.3569 2024-Jun-12
Show all 202 versions
Download Stats:
  • 0 downloads today

  • 7 downloads this week

  • 80 downloads this month

  • 24031 downloads total

Short URL: