{"id":13626687,"url":"https://github.com/lithdew/pike","last_synced_at":"2025-04-23T22:04:08.023Z","repository":{"id":46309640,"uuid":"299261264","full_name":"lithdew/pike","owner":"lithdew","description":"Async I/O for Zig","archived":false,"fork":false,"pushed_at":"2023-03-25T23:18:24.000Z","size":192,"stargazers_count":135,"open_issues_count":13,"forks_count":8,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-23T22:04:00.819Z","etag":null,"topics":["async","epoll","io","iocp","kqueue","linux","mac","networking","signal","tcp","udp","windows","zig"],"latest_commit_sha":null,"homepage":"","language":"Zig","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/lithdew.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":"2020-09-28T09:41:06.000Z","updated_at":"2025-03-31T21:16:17.000Z","dependencies_parsed_at":"2024-06-11T17:04:11.048Z","dependency_job_id":"93a3647f-7d63-4f4a-9f93-2d538e5b2fe4","html_url":"https://github.com/lithdew/pike","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lithdew%2Fpike","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lithdew%2Fpike/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lithdew%2Fpike/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lithdew%2Fpike/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lithdew","download_url":"https://codeload.github.com/lithdew/pike/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250522302,"owners_count":21444511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["async","epoll","io","iocp","kqueue","linux","mac","networking","signal","tcp","udp","windows","zig"],"created_at":"2024-08-01T21:02:26.589Z","updated_at":"2025-04-23T22:04:07.514Z","avatar_url":"https://github.com/lithdew.png","language":"Zig","readme":"# pike\n\nA minimal cross-platform high-performance async I/O library written in [Zig](https://ziglang.org).\n\n## Features\n\n- [x] Reactor/proactor-based I/O notification support\n    - [x] epoll (linux)\n    - [x] kqueue (darwin)\n    - [x] i/o completion ports (windows)\n- [x] Async POSIX socket support\n    - [x] `bind`, `listen`, `connect`, `accept`\n    - [x] `read`, `recv`, `recvFrom`\n    - [x] `write`, `send`, `sendTo`\n    - [x] get/set socket options\n- [x] Async Windows socket support\n    - [x] `bind`, `listen`, `connect`, `accept`\n    - [x] `read`, `recv`, `recvFrom`\n    - [x] `write`, `send`, `sendTo`\n    - [x] get/set socket options\n- [x] Async signal support\n    - [x] signalfd for epoll (linux)\n    - [x] EVFILT_SIGNAL for kqueue (darwin)\n    - [x] SetConsoleCtrlHandler for i/o completion ports (windows)\n- [x] Async event support\n    - [x] sigaction (posix)\n    - [x] SetConsoleCtrlHandler (windows)\n\n## Design\n\n### Notifier\n\nA `Notifier` notifies of the completion of I/O events, or of the read/write-readiness of registered file descriptors/handles.\n\nShould a `Notifier` report the completion of I/O events, it is designated to wrap around a proactor-based I/O notification layer in the operating system such as I/O completion ports on Windows.\n\nShould a `Notifier` report the read/write-readiness of registered file descriptors/handles, it is designated to wrap around a reactor-based I/O notification layer in the operating system such as epoll on Linux, or kqueue on Darwin-based operating systems.\n\nThe `Notifier`'s purpose is to drive the execution of asynchronous I/O syscalls upon the notification of a reactor/proactor-based I/O event by dispatching suspended asynchronous function frames to be resumed by a thread pool/scheduler (e.g. [kprotty/zap](https://github.com/kprotty/zap)).\n\n### Handle\n\nA `Handle`'s implementation is specific to a `Notifier` implementation, though overall wraps around and represents a file descriptor/handle in a program.\n\nSubject to the `Notifier` implementation a `Handle`'s implementation falls under, state required to drive asynchronous I/O syscalls through a `Handle` is kept inside a `Handle`. \n\nAn example would be an intrusive linked list of suspended asynchronous function frames that are to be resumed upon the recipient of a notification that a file descriptor/handle is ready to be written to/read from.","funding_links":[],"categories":["Zig","Systems Programming"],"sub_categories":["Asynchronous Runtime"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flithdew%2Fpike","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flithdew%2Fpike","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flithdew%2Fpike/lists"}