ae 0.0.3000

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:

Travis AppVeyor

About this library

ae (*almost everything*) is an auxiliary general-purpose D library which contains code shared across my projects.

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
  • – Contains a templated graphical context optimized for speed, and basic support for a few image formats.
  • 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 an array of Data, 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?


The best way 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.

You may also peruse the documentation generated from DDoc on, though please note that documenting and adding examples to all public symbols is a work in progress.

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).


Most of 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: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.3569 2024-Jun-12
0.0.3565 2024-Apr-27
0.0.3557 2024-Apr-05
0.0.3544 2024-Mar-13
0.0.3543 2024-Mar-12
Show all 198 versions
Download Stats:
  • 2 downloads today

  • 16 downloads this week

  • 49 downloads this month

  • 23930 downloads total

Short URL: