{"id":20102812,"url":"https://github.com/42loco42/kaiso","last_synced_at":"2025-08-17T11:11:18.177Z","repository":{"id":50614737,"uuid":"453493740","full_name":"42LoCo42/kaiso","owner":"42LoCo42","description":"A TCP service router","archived":false,"fork":false,"pushed_at":"2022-03-25T09:29:26.000Z","size":531,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-23T05:43:32.136Z","etag":null,"topics":["middleware","nim","nim-lang","routing","tcp","tcp-server"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/42LoCo42.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}},"created_at":"2022-01-29T19:09:17.000Z","updated_at":"2023-01-06T16:11:12.000Z","dependencies_parsed_at":"2022-09-24T15:45:24.106Z","dependency_job_id":null,"html_url":"https://github.com/42LoCo42/kaiso","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/42LoCo42/kaiso","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/42LoCo42%2Fkaiso","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/42LoCo42%2Fkaiso/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/42LoCo42%2Fkaiso/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/42LoCo42%2Fkaiso/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/42LoCo42","download_url":"https://codeload.github.com/42LoCo42/kaiso/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/42LoCo42%2Fkaiso/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270837583,"owners_count":24654391,"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","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["middleware","nim","nim-lang","routing","tcp","tcp-server"],"created_at":"2024-11-13T17:33:08.770Z","updated_at":"2025-08-17T11:11:18.149Z","avatar_url":"https://github.com/42LoCo42.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kaiso - A TCP service router\nKaiso allows for many services to be offered on the same port.\n\nA client can send an empty line (CRLF) to request a list of services\nor a line containing such a service path to connect to that service.\nKaiso will then forward all data between the client socket and\na new connection to the targeted service.\n\nServices are available to kaiso in the form of UNIX domain sockets\nthat are placed somewhere below the `services` directory.\n\n## Additional tools\nExpose is the inverse function of kaiso: it exposes a kaiso service on a port,\nthus allowing programs to interact with this service without speaking the kaiso protocol.\n\nkaiso-inject is a wrapper for clients to connect to a service behind kaiso.\nIt targets the `connect(2)` function and injects the service path\nwhen a connection to the kaiso IP and port occurs.\n\nkaiso-passfd is a wrapper for servers to enable passing of client file descriptors.\nThis enables direct connection between client and service,\ntherefore data transfer speed is not limited by kaiso.\nkaiso-passfd is an advanced tool that will probably not work with every server.\nIts basic prerequisites are:\n- The file descriptor of the listener socket must not be random\n- The server must use a UNIX or TCP socket as the listener\n\n## Examples\nA client (netcat) connecting to the `foo` service.\nThese error messages of kaiso are informative; they occur on disconnection.\n![](./images/default.png)\n\nConnection via `expose`\n![](./images/expose.png)\n\nConnection via `kaiso-inject`\n![](./images/inject.png)\n\nSocat listening on a UNIX socket with passfd active\n\n![](./images/passfd-unix.png)\n\nThe simple python webserver with passfd and TCP transmutation active\n![](./images/passfd-tcp.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F42loco42%2Fkaiso","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F42loco42%2Fkaiso","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F42loco42%2Fkaiso/lists"}