acp

ContextualistMIT活跃维护

用一条命令像 cp 一样在终端完成点对点文件传输,借助 NAT 穿透和打洞技术跨网络直连,无需中转服务器。

Make terminal personal file transfers as simple as `cp`

v0.3.3发布于 2026-07-20 05:59 UTC241star10fork同步于 2026-11-07 07:34 UTC

怎么上手

由 README 提炼,执行前请确认
curl -fsS https://acp.hya.moe/get | sh
硬件要求按 README 说明

README 未说明硬件要求,仅说明支持 Linux、macOS、Windows 平台

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

像 cp 一样简单的个人终端文件传输工具,无需每次复制粘贴令牌

用一条命令像 cp 一样在终端完成点对点文件传输,借助 NAT 穿透和打洞技术跨网络直连,无需中转服务器。

核心能力

  • 无需每次传输复制粘贴 token 或验证码
  • 基于 serverless 边缘函数的分布式 rendezvous 服务
  • ChaCha20-Poly1305 端到端加密
  • P2P 直连,支持局域网与广域网 NAT 穿透
  • 支持多文件与目录传输,gzip 压缩,跨 Linux/macOS/Windows

容易踩的坑

Windows 暂无 PowerShell 安装脚本,需手动下载可执行文件并加入 Path;安装脚本默认写入 /usr/local/bin,可能需要相应权限;若出现 rendezvous timeout,说明至少一侧处于防火墙或严格 NAT 后无法 P2P 直连

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.3.3
  1. v0.3.3最新正式版2026-07-20 · 2026-07-20 05:59 UTC

    To update, run

    acp --update

    Changelog

    • 579b477d0281df41ab8753a7cbcb8f7807e52e2c tweak: config: assign a less transient domain to the service
  2. v0.3.22026-07-20 · 2026-07-20 05:40 UTC
    查看更新说明

    To update, run

    acp --update

    Changelog

  3. v0.3.12024-11-01 · 2024-11-01 22:26 UTC
    查看更新说明

    To update, run

    acp --update

    Changelog

    • 101145209273531bcaad3242a561ca1f44aa568f Merge pull request #14 from Contextualist/feat-logreaderr
    • 818be1a66e92cfc7686f83e02b48c66edc7aa2b2 feat: tar: log instead of abort on file access error
    • d2bbce047c7ca36a102a742f9cd79163caace12e feat: tui: auxiliary logger during file transfer
    • df780850bebfc8e36099bfce1b33ae79fd0ba976 tweak: config: check for config dir creation error
  4. v0.3.02023-09-24 · 2023-09-24 23:57 UTC
    查看更新说明

    See also the release announcement for v0.3.0

    Changelog

    • 6b0d92d Merge pull request #8 from Contextualist/feat-tailscale
    • 775c033 feat: acp: support multiple connection strategies
    • 2d6bfb6 feat: stream: add Tailscale support
    • 74612f3 refactor: config: move from cmd/acp to pkg/config
    • d712e33 refactor: pnet: clarify function HolePunching
    • 3ba994d refactor: stream: adapt HolePunching into interface
    • 23650fc tweak: config: infer strategy during setup
    • f9b431c tweak: config: only print out the fields that are common across devices
    • bf42db6 tweak: tailscale: guard against missing status json fields
  5. v0.2.12023-09-05 · 2023-09-05 20:05 UTC
    查看更新说明

    Changelog

    • c017e82 feat: acp: read from stdin / write to stdout
    • d14c823 feat: acp: self update

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    acp

    demo.gif

    Highlights (aka "Why making another file-transfer tool?"):

    • Designed for personal use; no need to copy-paste a token / code for each transfer
    • Rendezvous service runs distributively on serverless edge function, a robust solution with low latency worldwide. (How does this work?)

    Other features:

    • End-to-end encryption (ChaCha20-Poly1305)
    • P2P connection: LAN or WAN, with NAT transversal
    • Compression (gzip)
    • Cross platform: Linux, macOS, Windows
    • Support transfering multiple files and directories
    • Optional Tailscale integration

    See also comparison table with similar tools.

    Get started

    Linux, macOS

    On any of your machine, run

    curl -fsS https://acp.hya.moe/get | sh
    

    It sets up the current machine by downloading an executable and generating an identity. By default the install path is /usr/local/bin; you can change it by curl -fsS 'https://acp.hya.moe/get?dir=/path/to/bin' | sh At the end, it prints out the command for setting up your other machines. You can run acp --setup any time you want to see the command.

    Windows

    Currently there is no installation script for PowerShell (PR welcomes :) You can download the released executable and put it on your Path. Then run acp --setup to generate an identity.

    Usage

    # sender
    acp path/to/files
    
    # receiver, to $(pwd)
    acp
    # or receive to/as specified target
    acp -d path/to/target
    

    You can run the sender and receiver in arbitrary order. Whenever both sides are up and running, they will attempt to establish a P2P connection. If you see messages such as rendezvous timeout, at least one side is behind a firewall or a strict NAT that prohibits P2P connection.

    For advanced configuration and self-hosting, check out the docs here.

    Similar projects

    trzszscpacppcpcroc
    can share files to other people /receiver needs to enter a tokenOO
    LANOOOOO
    WAN (local ↔︎ remote)OOOPO
    WAN (remote ↔︎ remote)POPO
    relayPPO
    p2pOOO
    distributiveOO

    O: supported; P: partial support or limited usablity; (void): not supported or not relevant

    Don't judge a tool based on its apparent set of features. This table only lists a few features, intending to differentiate the target scenarios of these tools.

    Acknowledgement

    Apart from the dependencies listed in go.mod, this project is also built upon

    • Deno Deploy exposes low-level connection infomation and provides a fantastic BroadcastChannel API that makes "serverless" TCP hole-punching possible
    • mholt/archiver: tar/untar implementation
    • libp2p/go-reuseport: address reuse for TCP hole-punching
    • egoist/bina: installation script
    • Tailscale, as one of the connection option, provides a painstaking implementation of NAT traversal and a distributive relay service

    Disclaimer

    This project is not associated with Deno Land Inc. or Tailscale Inc.