{"id":21483350,"url":"https://github.com/cybershadow/ae","last_synced_at":"2026-01-27T23:48:05.276Z","repository":{"id":1027541,"uuid":"855632","full_name":"CyberShadow/ae","owner":"CyberShadow","description":"An auxiliary general-purpose D library","archived":false,"fork":false,"pushed_at":"2026-01-11T19:02:25.000Z","size":7523,"stargazers_count":177,"open_issues_count":13,"forks_count":39,"subscribers_count":13,"default_branch":"master","last_synced_at":"2026-01-11T23:07:09.643Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"D","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CyberShadow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2010-08-23T00:31:58.000Z","updated_at":"2025-12-23T07:27:31.000Z","dependencies_parsed_at":"2026-01-11T21:23:30.377Z","dependency_job_id":null,"html_url":"https://github.com/CyberShadow/ae","commit_stats":{"total_commits":3217,"total_committers":22,"mean_commits":"146.22727272727272","dds":0.5060615480261113,"last_synced_commit":"3f9b04fdd6171946d4ed5494d56ac36e9ab838ae"},"previous_names":[],"tags_count":206,"template":false,"template_full_name":null,"purl":"pkg:github/CyberShadow/ae","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberShadow%2Fae","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberShadow%2Fae/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberShadow%2Fae/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberShadow%2Fae/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CyberShadow","download_url":"https://codeload.github.com/CyberShadow/ae/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberShadow%2Fae/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28827902,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T23:29:49.665Z","status":"ssl_error","status_checked_at":"2026-01-27T23:25:58.379Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-23T12:46:33.792Z","updated_at":"2026-01-27T23:48:05.261Z","avatar_url":"https://github.com/CyberShadow.png","language":"D","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿[![test](https://github.com/CyberShadow/ae/actions/workflows/test.yml/badge.svg)](https://github.com/CyberShadow/ae/actions/workflows/test.yml)\n\nAbout this library\n==================\n\n*ae* (***a**lmost **e**verything*) is an auxiliary general-purpose D library.  Its design goals are composability and simplicity.\n\nAmong many things, it implements an asynchronous event loop, and several network protocols, such as HTTP / IRC / TLS.\n\nOverview\n========\n\nThe library is split into the following packages:\n\n * `ae.demo` – This package contains a few demos for various parts of the library.\n * `ae.net` – All the networking code (event loop, HTTP, NNTP, IRC) lives here.\n * `ae.sys` – Utility code which primarily interfaces with other systems (including the operating system).\n * `ae.ui` – Framework for creating 2D games and graphical applications (SDL, OpenGL).\n * `ae.utils` – Utility code which primarily manipulates data.\n\nNotable sub-packages:\n\n * `ae.sys.d` – Builds arbitrary versions of D. Shared by Digger, DAutoTest, and TrenD.\n * `ae.sys.net` – High-level synchronous API for accessing network resources (URLs). Includes implementations based on cURL, WinINet, and `ae.net`.\n * `ae.utils.functor` – Functor primitives and functions, allowing `@nogc` range manipulation and text formatting.\n * `ae.utils.graphics` – Contains a templated graphical context optimized for speed, and basic support for a few image formats.\n * `ae.utils.promise` – Implementation of Promises/A+, `async`/`await`, and related operations. Can be used on top of the `ae.net` asynchronous API.\n * `ae.utils.time` – Supplements `core.time` and `std.datetime` with extras such as PHP-like parsing / formatting and floating-point duration operations.\n\nGeneral concepts:\n\n- **Data**: Many modules that handle raw data (from the network / disk) do so using the `Data` structure, defined in `ae.sys.data`.\n  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.\n  Some modules use `DataVec`, a `Data` vector with deterministic lifetime, to minimize copying / reallocations when handling byte streams with unknown length.\n\n- **Networking**: *ae* uses asynchronous event-based networking.\n  A `select`-based event loop dispatches events to connection objects, which then propagate them to higher-level code as necessary.\n  `libev` support is also available.\n\n- **UI**: The `ae.ui` package contains basic support for cross-platform interactive applications using SDL.\n  There is a working game demo in `ae.demo.pewpew`.\n\nWhat uses this library?\n=======================\n\n- [DFeed](https://github.com/CyberShadow/DFeed) (forum.dlang.org) - networking, SQLite\n- [Digger](https://github.com/CyberShadow/Digger) - `ae.sys.d`\n- [DAutoTest](https://github.com/CyberShadow/DAutoTest) - `ae.sys.d`, web server\n- [btdu](https://github.com/CyberShadow/btdu) - utility functions, duration parsing, functors\n- [monocre](https://github.com/CyberShadow/monocre) - image processing\n- Community WormNET services for Worms Armageddon ([web snooper](https://snoop.wormnet.net/), community server, [HostingBuddy](https://worms2d.info/HostingBuddy))\n- Most of [my D projects](https://github.com/CyberShadow?language=d\u0026tab=repositories\u0026type=source)\n- [Find more uses on GitHub](https://github.com/search?l=D\u0026q=%22import+ae%22\u0026type=Code)\n\nDocumentation\n=============\n\nYou may peruse the documentation generated from DDoc on [ae.dpldocs.info](https://ae.dpldocs.info/).\n\nOther ways to get started with this library is to:\n\n- Play with the demo programs (in the `demo` directory)\n- Look at open-source projects using this library (see above)\n- Use your editor's \"go to definition\" feature to navigate the implementation.\n\nUsing this library\n==================\n\n- If you are using Dub, simply add a dependency to `ae` (or a subpackage) in your project.\n\n  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).\n\n  See `dub.sdl` for details.\n\n- 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.\n  In this circumstance, the best way is to simply use recursive compilation (`rdmd` or `dmd -i`).\n\n  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](https://github.com/CyberShadow/ForumAntiSpam).\n\nVersioning\n==========\n\nThere are currently no stable/development branches, and versioning is done only according to the number of commits in `master`.\n\nBreaking changes are prefixed with `[BREAKING]` in the commit message. \nEach such commit includes a rationale and instructions for updating affected code.\n\nTags are created regularly for the benefit of Dub packages (e.g. [Digger](https://github.com/CyberShadow/Digger/blob/master/dub.sdl)).\n\nThe bleeding-edge version can be found in the `next` branch (which may be regularly force-pushed).\n\nLicense\n=======\n\nExcept where stated otherwise, this library is licensed under the [Mozilla Public License, v. 2.0](http://mozilla.org/MPL/2.0/).\n(Approximate summary: you only need to publish the source code of the files from this library that you edited.)\n\nModules under licenses other than MPL are:\n\n- `ae.utils.digest_murmurhash3` - D port of a C MurmurHash3 implementation. **Public Domain**.\n- `ae.utils.graphics.fonts.font8x8` - Data for an 8x8 bitmap font created by Daniel Hepper. **Public Domain**.\n- `ae.utils.graphics.hls` - Code to convert between RGB and HLS. Ported from a Microsoft Knowledge Base article. **License [unclear](https://opensource.stackexchange.com/questions/4779/is-it-legal-to-use-code-from-microsoft-knowledge-base-article-in-an-open-source)**.\n- `ae.utils.text.parsefp` - Parse floating-point values from strings. Adapted from Phobos. **[Boost License 1.0](https://www.boost.org/LICENSE_1_0.txt)**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcybershadow%2Fae","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcybershadow%2Fae","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcybershadow%2Fae/lists"}