{"id":15652170,"url":"https://github.com/zkat/conserv","last_synced_at":"2026-02-10T21:01:51.684Z","repository":{"id":65998140,"uuid":"2163087","full_name":"zkat/conserv","owner":"zkat","description":null,"archived":false,"fork":false,"pushed_at":"2015-01-13T08:47:29.000Z","size":357,"stargazers_count":33,"open_issues_count":1,"forks_count":3,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2025-08-31T13:41:39.684Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":false,"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/zkat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-08-05T23:22:32.000Z","updated_at":"2025-07-08T01:20:49.000Z","dependencies_parsed_at":"2023-02-19T20:55:24.349Z","dependency_job_id":null,"html_url":"https://github.com/zkat/conserv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zkat/conserv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkat%2Fconserv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkat%2Fconserv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkat%2Fconserv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkat%2Fconserv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zkat","download_url":"https://codeload.github.com/zkat/conserv/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zkat%2Fconserv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29316368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T20:44:44.282Z","status":"ssl_error","status_checked_at":"2026-02-10T20:44:43.393Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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-10-03T12:41:37.831Z","updated_at":"2026-02-10T21:01:51.663Z","avatar_url":"https://github.com/zkat.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quickstart\n\nSetting up Conserv is painless using [Quicklisp](http://quicklisp.org). If the library isn't\navailable on Quicklisp yet, you can get it by doing\n`$ git clone git://github.com/zkat/conserv.git` before trying to quickload it.\n\n```lisp\nCL-USER\u003e (ql:quickload 'conserv)\n         ...\n         ...\n         ...\nCL-USER\u003e (defclass echo () ())\n#\u003cSTANDARD-CLASS ECHO\u003e\nCL-USER\u003e (defmethod conserv.tcp:on-socket-data ((driver echo) data)\n           (write-sequence data conserv.tcp:*socket*))\n#\u003cSTANDARD-METHOD CONSERV:ON-SOCKET-DATA (ECHO T)\u003e\nCL-USER\u003e (conserv:with-event-loop ()\n           (conserv.tcp:server-listen (make-instance 'echo)\n                                      :host \"127.0.0.1\"\n                                      :port 1337))\n```\n\nNow in a terminal...\n\n    $ netcat localhost 1337\n    hello world!\n    hello world!\n\n# Introduction\n\nConserv is an event-based networking library inspired by the networking modules of\n[Node.js](http://nodejs.org). It aims to provide a simple, easy-to-use API for implementing and\nusing network protocols. Conserv currently includes a TCP client and server API and an HTTP/1.1\nserver with CONNECT/Upgrade support (allowing implementation of proxies and websocket servers that\nshare a port with a regular web application, for example).\n\n# Events\n\nEvents are the bread and butter of writing applications using Conserv. These take the form of\ngeneric functions with default behavior. All event functions accept one or more DRIVER arguments,\nwhich are used for dispatching these events. Once a class is defined and the desired events are\nimplemented for it, you simply provide the Conserv server/client with an instance of the driver, and\nit'll take care of the rest.\n\n# Packages\n\nConserv splits its various supported protocols between several packages. Documentation for\nindividual packages can be found under docs/\u003cpackage-name\u003e.md\n\n  * conserv - Includes the basic event library. with-event-loop, add-timer, exit-event-loop, and so on.\n  * conserv.tcp - TCP client/server\n  * conserv.http - HTTP server\n\n# License\n\nConserv is free software, licensed under the MIT license. See the included COPYING file for\nlicensing details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkat%2Fconserv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzkat%2Fconserv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzkat%2Fconserv/lists"}