{"id":13466975,"url":"https://github.com/etcimon/libasync","last_synced_at":"2026-03-15T10:48:07.308Z","repository":{"id":20116077,"uuid":"23385889","full_name":"etcimon/libasync","owner":"etcimon","description":"Cross-platform event loop library of asynchronous objects","archived":false,"fork":false,"pushed_at":"2024-07-04T18:26:13.000Z","size":4088,"stargazers_count":148,"open_issues_count":5,"forks_count":30,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-03-26T00:36:00.871Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/etcimon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2014-08-27T10:31:43.000Z","updated_at":"2025-01-25T03:28:52.000Z","dependencies_parsed_at":"2024-10-29T20:04:30.585Z","dependency_job_id":null,"html_url":"https://github.com/etcimon/libasync","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/etcimon/libasync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etcimon%2Flibasync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etcimon%2Flibasync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etcimon%2Flibasync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etcimon%2Flibasync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/etcimon","download_url":"https://codeload.github.com/etcimon/libasync/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etcimon%2Flibasync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30540718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-15T07:17:37.589Z","status":"ssl_error","status_checked_at":"2026-03-15T07:17:31.738Z","response_time":61,"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-07-31T15:00:51.910Z","updated_at":"2026-03-15T10:48:07.274Z","avatar_url":"https://github.com/etcimon.png","language":"D","funding_links":[],"categories":["D","Web Frameworks"],"sub_categories":["Bare metal / kernel development"],"readme":"[![CI](https://github.com/etcimon/libasync/actions/workflows/ci.yml/badge.svg)](https://github.com/etcimon/libasync/actions/workflows/ci.yml)\r\n\r\nAbout\r\n-----\r\n\r\nThe libasync asynchronous library is written completely in D, features a cross-platform event loop and enhanced connectivity and concurrency facilities for extremely lightweight asynchronous tasks. It embeds naturally to D projects (DMD \u003e= 2.076.0, LDC \u003e= 1.18.0), allows you to target a wide range of architectures through LDC, compiles statically with your project and has an open source license (MIT).\r\n\r\nA fully functional, tested vibe.d driver is available in [the latest version of vibe.d](https://github.com/rejectedsoftware/vibe.d/), you can enable it by appending `\"subConfigurations\": { \"vibe-d\": \"libasync\"}` in your project's dub.json configuration file.\r\n\r\n### Features\r\n\r\nThe following capabilities have been tested in a production environment:\r\n\r\n(*) _Unit tests confirmed on Mac, Linux, Windows_ - Platforms used were Mac OS X (10.8+, 10.9+), Linux (Fedora 20+) and Windows 7+ 32/64 bit, although it should be compatible to 99% of Desktop OS users.\r\n\r\n(*) _Compiles with DMD \u0026 LDC_ (DMD 2.076.0+, LDC 1.18.0+)\r\n\r\n- **Multi-threading** support - EventLoop can be launched and run from an unlimited number of threads!\r\n\r\n- **Asynchronous TCP connection** - handles multiple requests at a time in each individual thread\r\n\r\n- **Buffered TCP connection** - Allows callbacks to be attached to a byte sized future\r\n\r\n- **Asynchronous TCP listener** - delivers a new connection to the delegate of your choice\r\n\r\n- **File Operations** - executes file read/write/append commands in a thread pool, notifies of completion in a handler\r\n\r\n- **DNS resolver** - runs blocking DNS resolve operations in a thread pool, savings are the duration of a ping.\r\n\r\n- **File/Folder Watcher** - watches directories for file changes (CREATE, DELETE, MODIFY, RENAME/MOVE)\r\n\r\n- **UDP connection** - receives or sends packets from/to multiple peers\r\n\r\n- **Timer** - sets a periodic or one-shot/periodic timer with high-precision (μs) to call a select delegate\r\n\r\n- **Signal** - Wakes up the event loop in a foreign thread and passes a message to its delegate\r\n\r\n- **Notifier** - Thread-local and lock-less adaptation of **Signal** which queues a message intended for a local delegate\r\n\r\n### Limitations\r\n\r\nSome or all of these limitations are possibly being implemented currently and may be available in a future release.\r\n\r\n- **One EventLoop per thread** - There is a hard limit of one event loop per thread\r\n- **Manual error management** - The entire library is `nothrow` and error management must be built on top of it.\r\n- **No embedded HTTP or TLS handlers** - The support fort HTTP, TLS (and other protocols) is only available through vibe.d with Tasks as of yet.\r\n\r\nInstallation Instructions\r\n-------------------------\r\n\r\n- Download and install DMD from [dlang.org](http://dlang.org/download.html)\r\n- Use Git to clone this repository\r\n- Run `dub test` to test the library on your operating system (submit any issue with a log report by uncommenting `enum LOG = true` in `types.d`)\r\n- Add the library to your project by including it in the dependencies, using `import libasync`\r\n- The recommended editor is Visual Studio Code with the Code-D extension\r\n- On another note, you can also try the vibe.d libasync built-in driver by adding `\"subConfigurations\": { \"vibe-d\": \"libasync\" }` to your vibe.d dub.json.\r\n\r\nTutorial\r\n--------\r\n\r\nThere are many examples available in the `examples/` older. They must be tested by starting the server before the client.\r\n\r\nAll other usage examples are available in `source/libasync/test.d`. \r\n\r\nDocumentation has been written throughout the code.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetcimon%2Flibasync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fetcimon%2Flibasync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetcimon%2Flibasync/lists"}