{"id":29139091,"url":"https://github.com/usagi-coffee/unison","last_synced_at":"2026-04-29T06:37:15.321Z","repository":{"id":301999444,"uuid":"1010892104","full_name":"usagi-coffee/unison","owner":"usagi-coffee","description":"Flexible UDP transport layer designed for bi-directional multi-path delivery","archived":false,"fork":false,"pushed_at":"2025-10-06T09:16:55.000Z","size":136,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-29T06:36:45.138Z","etag":null,"topics":["iptables","nfqueue","rust","udp","wireguard"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/usagi-coffee.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-30T02:02:00.000Z","updated_at":"2026-04-05T21:51:24.000Z","dependencies_parsed_at":"2025-06-30T03:34:30.448Z","dependency_job_id":"eb8a65f4-0033-4968-a7b1-a52c5838257c","html_url":"https://github.com/usagi-coffee/unison","commit_stats":null,"previous_names":["usagi-coffee/unison"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/usagi-coffee/unison","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi-coffee%2Funison","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi-coffee%2Funison/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi-coffee%2Funison/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi-coffee%2Funison/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/usagi-coffee","download_url":"https://codeload.github.com/usagi-coffee/unison/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/usagi-coffee%2Funison/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32414422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T06:29:02.080Z","status":"ssl_error","status_checked_at":"2026-04-29T06:29:00.631Z","response_time":110,"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":["iptables","nfqueue","rust","udp","wireguard"],"created_at":"2025-06-30T15:00:58.950Z","updated_at":"2026-04-29T06:37:15.308Z","avatar_url":"https://github.com/usagi-coffee.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Unison\n\n\u003e Proof of Concept - expect bugs and breaking changes.\n\nFlexible UDP transport layer designed for bi-directional multi-path delivery.\n\n## Features\n\n- Packet duplication across multiple interfaces for redundancy\n- Packet deduplication, with out-of-order handling\n- Packet fragmentation across multiple interfaces for parallel transmission and reassembly\n- Seamless bidirectional handling of UDP traffic\n- Source IP masquerading and restoration for single-source IP–dependent protocols like SRT\n\n## Planned Features\n\n- Configurable heuristics for adaptive multi-path delivery\n- Packet retransmissions for lost packets/fragments\n\n## Installation\n\n```bash\ncargo install --git https://github.com/usagi-coffee/unison --locked\n```\n\n## Client\n\nThis configirations duplicates the UDP traffic that targets port `8888` through `eth0` and `eth1`.\n\n```bash\nunison --ports 8888 --interfaces eth0 eth1\n```\n\n## Server\n\nUsually server needs only one interface, in this case we just use`eth0` for receiving and sending the packets back if needed, the duplicated traffic comes over port `8888`.\n\n```bash\nunison --server --ports 8888 --interfaces eth0\n```\n\n## Consistent Source IP/Port\n\nSome protocols like SRT, RTP, or other connection-oriented UDP protocols require all packets to originate from a single consistent source IP and port by reading the ip and udp header. When using multi-path transport, this consistency can be lost and can lead to session instability or rejections.\n\nUnison supports \"snat-like\" source address and port rewriting to preserve consistency. This is done at the ip/udp header level and ensures that the target socket sees all packets as coming from the same source.\n\n```bash\n# Packets will appear as to come from 10.64.0.1:1337 to sockets on the server\nunison --server --snat 10.64.0.1:1337 --ports 8888 --interfaces eth0\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusagi-coffee%2Funison","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fusagi-coffee%2Funison","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fusagi-coffee%2Funison/lists"}