{"id":18014822,"url":"https://github.com/zevv/janet-dns","last_synced_at":"2026-03-19T02:53:49.103Z","repository":{"id":164858283,"uuid":"640256436","full_name":"zevv/janet-dns","owner":"zevv","description":"Asynchronous DNS resolver library for the Janet language.","archived":false,"fork":false,"pushed_at":"2023-05-14T20:33:18.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-13T13:17:15.553Z","etag":null,"topics":["async","dns","janet","resolver"],"latest_commit_sha":null,"homepage":"","language":"Janet","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/zevv.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":"2023-05-13T13:46:49.000Z","updated_at":"2023-05-13T19:48:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"21c50489-65a6-4810-b1a6-97709cef0443","html_url":"https://github.com/zevv/janet-dns","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zevv/janet-dns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fjanet-dns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fjanet-dns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fjanet-dns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fjanet-dns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zevv","download_url":"https://codeload.github.com/zevv/janet-dns/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevv%2Fjanet-dns/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29175823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T20:14:21.878Z","status":"ssl_error","status_checked_at":"2026-02-06T20:14:21.443Z","response_time":59,"last_error":"SSL_read: 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":["async","dns","janet","resolver"],"created_at":"2024-10-30T04:11:13.545Z","updated_at":"2026-02-06T21:01:34.098Z","avatar_url":"https://github.com/zevv.png","language":"Janet","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## Introduction\n\nThis is a proof-of-concept async DNS resolver library for the Janet programming\nlanguage. This code is not at all production ready, as it only implements the\nhappy path and has virtually no error handling.\n\n## Description\n\nAddress resolution is a complicated task that is usually performed by the libc\nstandard library using `getaddrinfo()` or similar calls. The Janet standard\nlibrary also uses this call for resolving when calling `net/address`; this can\nbe problematic because `getaddrinfo()` can potentially block for several\nseconds, effectively blocking the current Janet thread and it's event loop as\nwell.\n\nThis library implements a very simply DNS resolver that does not rely on the\nlibc standard library functions; instead it communicates directly with DNS\nservers to perform the lookup, allowing for proper async behavior that will not\nblock the event loop.\n\nNote that the resolving behavior of this library is by no means standard and\nmight differ from the underlying libc implementation; also, it will only use\nDNS for resolution and does not implement any other source like a local hosts\nfile.\n\n\n## Example\n\n```janet\n(import ./resolver)\n\n# Create resolver instance\n\n(def res (resolver/new \"8.8.4.4\"))\n\n# Call the :resolve method to perform a DNS lookup\n\n(defn test[]\n  (ev/sleep 0.1)\n  (pp (:resolve res \"nyt.com\"))\n  (ev/sleep 0.1)\n  (pp (:resolve res \"google.com\" :AAAA)))\n\n\n(ev/call test)\n```\n\n## TODO and Open questions\n\n- Improve error handling\n- Acquire DNS server IPs from system resolver configuration\n- Cache resceived answers with proper time-to-live\n- Implement TCP/53\n- Primary/secondary server fallback\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevv%2Fjanet-dns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzevv%2Fjanet-dns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevv%2Fjanet-dns/lists"}