缺少文本消息发送、文件夹发送(只能发 tar 包需对方手动解压)和 Tor 支持;目前没有托管文档,需本地 cargo doc --open 查看;采用 EUPL v1.2 协议,商用闭源需联系作者
magic-wormhole.rs
magic-wormholeEUPL-1.2活跃维护用 Rust 重写的 Magic Wormhole 命令行工具,通过简短口令在两台机器间安全传文件,还支持端口转发等增强功能。
Rust implementation of Magic Wormhole, with new features and enhancements
Magic Wormhole 的 Rust 实现,用于在两台电脑间安全传文件,并支持 NAT 穿透直连
用 Rust 重写的 Magic Wormhole 命令行工具,通过简短口令在两台机器间安全传文件,还支持端口转发等增强功能。
核心能力
- 跨 NAT 和防火墙建立直连传输
- 传输完成后自动把代码复制到剪贴板
- 除文件传输外还支持端口转发(实验性)
- 可同时把文件发给多个人(实验性)
- 支持模糊补全 wormhole 代码
容易踩的坑
- 0.8.1Version 0.8.1最新正式版2026-05-07 · 2026-05-07 00:27 UTC
Security
- Fixed RUSTSEC-2024-0436
- Fixed RUSTSEC-2026-0097
Changed
- dev: Replace the
macro_rules_attributetest helper to remove the unmaintainedpastedependency
- 0.8.0Version 0.8.02026-05-06 · 2026-05-06 20:15 UTC
查看更新说明
Added
- cli: Add colors support
- lib:
transit::TransitRoleenum withFollowerandLeadervariants for use withTransitConnector::connect
Changed
- lib: Switched from async-std to smol/async-io
- lib: Remove explicit entropy feature and make it the default
- lib: Undeprecate direct access to Transit connections and unify the connection functions.
TransitConnector::connectis now the only way to set up the connection, and accepts aTransitRoleenum rather than anis_leaderboolean.leader_connectandfollower_connectare removed from the API. - lib:
transit::init()is now undeprecated. - lib: Renamed
transit::Abilities::ALL_ABILITIEStomagic_wormhole::transit::Abilities::ALL - lib:
Keynow has anas_refimplementation for the innercrypto_secretbox::Keyinstead of a public field - lib:
rendezvous::RendezvousError::IOnow contains a boxed tungstenite error to reduce error enum sizes
Removed
- lib:
Wormhole::connect_with(out)_code,WormholeWelcome, useMailboxConnection::create()and thenWormhole::connect()instead - lib:
Wormholepublic struct fields. Use the provided accessor methods instead. - lib:
GenericKey, implementKeyPurposeon a custom struct instead - lib:
transit:TransitKey,TransitRxKeyandTransitTxKey - lib:
rendezvous::RendezvousServerwith no replacement - lib:
transit::log_transit_connection, use the Display implementation of TransitInfo instead - lib:
AppIDpublic field access: UseAppID::new()andAsRef<str>::as_ref()instead - lib:
MailboxConnection::mailbox(), theMailboxtype was always private and therefore not useful - lib:
transit::RelayHint:can_merge,merge,merge_mut,merge_intowith no replacement - lib:
transit::TransitConnector::can_noise_cryptowith no replacement (noise cryptography is not a stable protocol) - lib:
transfer::PeerMessage, this enum type had lots of fields with private types and was therefore not very useful - lib:
transfer::v1::ReceiveRequest:filenameandfilesizefields: Use the public getter methods - lib:
From<Nameplate>forStringandAsRef<str>forNameplate: Use thestd::fmt::Displayimplementation - lib:
From<Code>forStringandAsRef<str>forCode: Use thestd::fmt::Displayimplementation - lib:
Code::split: UseCode::nameplateandCode::password
- 0.7.7Version 0.7.72026-03-10 · 2026-03-10 00:08 UTC
查看更新说明
Fixed
- Fixes compilation error with cargo doc
- 0.7.6Version 0.7.62025-04-05 · 2025-04-05 12:28 UTC
查看更新说明
Security
- Fixed RUSTSEC-2025-0004
- Fixed RUSTSEC-2025-0009
- Fixed RUSTSEC-2025-0022
- 0.7.5Version 0.7.52025-01-12 · 2025-01-12 12:16 UTC
查看更新说明
Fixed
- cli: Command line arguments completion would generate completions for magic-wormhole-cli, not wormhole-rs
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Rusty Wormhole
Get things from one computer to another, safely.
This is a Rust port of the Python version at https://github.com/magic-wormhole/magic-wormhole.
Comparison with the Python implementation
Features that are missing:
- Text message sending
- Folder sending (we can send folders, but it will send a tar ball which the other side will have to manually unpack)
- Tor support
New features that exceed the other implementations:
- Can do direct connections across the internet (NATs) and firewalls
- Automatically copies your code to the clipboard
- Port forwarding in addition to file transfer (experimental)
- Send a file to multiple people (experimental)
- Fuzzy wormhole code completion
Getting started
If you want to toy with the CLI, cargo run -- --help will get you started. The code sits in ./cli/src. For more instructions see cli/README.md.
If you'd like to use Wormhole in your application, cargo doc --open will tell you how to use it. There aren't any hosted docs at the moment.
If you don't fear touching code and want to contribute, ./src/lib.rs, ./src/transfer.rs and ./src/transit.rs are rather easy to get into. The protocol specification will probably be useful to you.
Applications using Wormhole Rust as library
- Warp, a GUI client using Gtk
- Wormhole File Transfer, a Android client using Flutter
- Wyrmhole, a cross-platform GUI using Tauri
- rvIRC, a vim-based IRC client with filesharing
(feel free to add yours)
License
This work is licensed under the EUPL v1.2 or later. Contact the owner(s) for use in proprietary software.