{"id":18875388,"url":"https://github.com/contextualist/acp","last_synced_at":"2025-10-16T16:02:22.988Z","repository":{"id":65298116,"uuid":"589366209","full_name":"Contextualist/acp","owner":"Contextualist","description":"Make terminal personal file transfers as simple as `cp`","archived":false,"fork":false,"pushed_at":"2024-11-01T22:25:20.000Z","size":443,"stargazers_count":232,"open_issues_count":2,"forks_count":10,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-28T12:02:17.373Z","etag":null,"topics":["deno-deploy","edge-function","file-transfer","hole-punching","nat-traversal","p2p","tailscale"],"latest_commit_sha":null,"homepage":"","language":"Go","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/Contextualist.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-01-15T23:17:39.000Z","updated_at":"2025-03-25T11:20:30.000Z","dependencies_parsed_at":"2023-11-19T01:28:18.545Z","dependency_job_id":"333aab99-6806-4fad-944c-6c8cd3d29a15","html_url":"https://github.com/Contextualist/acp","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Contextualist%2Facp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Contextualist%2Facp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Contextualist%2Facp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Contextualist%2Facp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Contextualist","download_url":"https://codeload.github.com/Contextualist/acp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247174468,"owners_count":20896078,"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":["deno-deploy","edge-function","file-transfer","hole-punching","nat-traversal","p2p","tailscale"],"created_at":"2024-11-08T06:07:14.984Z","updated_at":"2025-10-16T16:02:22.908Z","avatar_url":"https://github.com/Contextualist.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# acp\n\n![demo.gif](media/demo.gif)\n\nHighlights (aka \"Why making another file-transfer tool?\"):\n\n- Designed for personal use; no need to copy-paste a token / code for each transfer\n- Rendezvous service runs distributively on [serverless edge function](https://stackoverflow.blog/2023/02/23/how-edge-functions-move-your-back-end-close-to-your-front-end/),\n  a robust solution with low latency worldwide. ([How does this work?](docs/mechanism.md))\n\nOther features:\n\n- End-to-end encryption (ChaCha20-Poly1305)\n- P2P connection: LAN or WAN, with NAT transversal\n- Compression (gzip)\n- Cross platform: Linux, macOS, Windows\n- Support transfering multiple files and directories\n- Optional [Tailscale integration](docs/advanced.md#tailscale-integration)\n\nSee also [comparison table with similar tools](#similar-projects).\n\n\n## Get started\n\n### Linux, macOS\n\nOn any of your machine, run\n\n```bash\ncurl -fsS https://acp.deno.dev/get | sh\n```\n\nIt sets up the current machine by downloading an executable and generating an identity.\nBy default the install path is `/usr/local/bin`; you can change it by `curl -fsS 'https://acp.deno.dev/get?dir=/path/to/bin' | sh`\nAt the end, it prints out the command for setting up your other machines.\nYou can run `acp --setup` any time you want to see the command.\n\n### Windows\n\nCurrently there is no installation script for PowerShell (PR welcomes :)\nYou can download the released executable and put it on your `Path`.\nThen run `acp --setup` to generate an identity.\n\n\n## Usage\n\n```bash\n# sender\nacp path/to/files\n\n# receiver, to $(pwd)\nacp\n# or receive to/as specified target\nacp -d path/to/target\n```\n\nYou can run the sender and receiver in arbitrary order.\nWhenever both sides are up and running, they will attempt to establish a P2P connection.\nIf you see messages such as `rendezvous timeout`, at least one side is behind a firewall or a strict NAT that prohibits P2P connection.\n\nFor advanced configuration and self-hosting, check out [the docs here](docs/advanced.md).\n\n\n## Similar projects\n\n|                                                              | [trzsz](https://github.com/trzsz/trzsz) | scp  | **acp** | [pcp](https://github.com/dennis-tra/pcp) | [croc](https://github.com/schollz/croc) |\n| ------------------------------------------------------------ | --------------------------------------- | ---- | ------- | ---------------------------------------- | --------------------------------------- |\n| can share files to other people /\u003cbr/\u003ereceiver needs to enter a token |                                         |      |         | O                                        | O                                       |\n| LAN                                                          | O                                       | O    | O       | O                                        | O                                       |\n| WAN (local ↔︎ remote)                                         | O                                       | O    | O       | P                                        | O                                       |\n| WAN (remote ↔︎ remote)                                        |                                         | P    | O       | P                                        | O                                       |\n| relay                                                        |                                         |      | P       | P                                        | O                                       |\n| p2p                                                          |                                         |      | O       | O                                        | O                                       |\n| distributive                                                 |                                         |      | O       | O                                        |                                         |\n\nO: supported; P: partial support or limited usablity; (void): not supported or not relevant\n\nDon't judge a tool based on its apparent set of features.\nThis table only lists a few features, intending to differentiate the target scenarios of these tools.\n\n\n## Acknowledgement\n\nApart from the dependencies listed in [`go.mod`](go.mod), this project is also built upon \n\n- [**Deno Deploy**](https://deno.com/deploy) exposes low-level connection infomation and provides a fantastic `BroadcastChannel` API that makes \"serverless\" TCP hole-punching possible\n- [**mholt/archiver**](https://github.com/mholt/archiver): tar/untar implementation\n- [**libp2p/go-reuseport**](https://github.com/libp2p/go-reuseport): address reuse for TCP hole-punching\n- [**egoist/bina**](https://github.com/egoist/bina): installation script\n- [**Tailscale**](https://tailscale.com), as one of the connection option, provides a painstaking implementation of NAT traversal and a distributive relay service\n\n## Disclaimer\n\nThis project is not associated with Deno Land Inc. or Tailscale Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontextualist%2Facp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcontextualist%2Facp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontextualist%2Facp/lists"}