mrkeyoor.com_
Tue 01 Sept 17:43 UTC
Dev Toolsevaluationupdated 26 Aug 2026

magic-wormhole review

Magic Wormhole is a command-line tool and Python library for sending files, directories, or short text between two computers. The sender reads out a short one-use code, the receiver enters it, and the two clients arrange an encrypted direct or relayed transfer without exchanging accounts or SSH keys.

+24stars / 7d
Verdict

Our Magic Wormhole run installed 76 packages in 51 seconds and passed 462 tests with 0 failures, making it an easy recommendation for occasional person-to-person transfers. Keep the source copy until the receiver verifies a large directory, because issue #722 documents a completed-looking 31.53 GB attempt that left no files after interruption. Use the Python API, not scraped CLI text, when software rather than a person controls the exchange.

We ran it

Lab card: what happened when we ran magic-wormholeScreenshot of magic-wormhole (magic-wormhole.readthedocs.io/en/latest)
Install✓ · 51s76 packages · 106 MB
Build✓ · 11s
Tests✓ · 68s462 passed · 0 failed · 10 skipped of 462 (pytest)
Known vulns0(pip-audit)
Repo232 files~28,240 lines of source · 1.7 MB · 3 CI workflows

Answers from our run

Does magic-wormhole build from source?

Dependencies installed in 51 seconds (76 packages), and the build succeeded in 11 seconds. We cloned commit a76c504 into a clean Debian container with 3 CPUs and no project-specific setup.

Do magic-wormhole's tests pass?

Yes: 462 of 462 passed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does magic-wormhole have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use magic-wormhole?

Backup or migration jobs that must resume safely after interruption: issue #722 reports a 31.53 GB directory transfer that stalled at 100% and left no received files after the receiver stopped it.

What are the alternatives to magic-wormhole?

croc, LocalSend, OnionShare. Our Magic Wormhole run installed 76 packages in 51 seconds and passed 462 tests with 0 failures, making it an easy recommendation for occasional person-to-person transfers.

Setup5/551-second install and all 462 reported tests passed
Docs4/5Protocol and threat details are strong; some install text is dated
Community4/5August 26 push with current issue and PR updates
Maturity4/5Long-lived protocol with a current large-transfer failure report

Discussed on

  1. hnMagic Wormhole: get things from one computer to another, safely816 points
  2. hnMagic-Wormhole – Get things from one computer to another, safely744 points
  3. hnMagic Wormhole: Get things from one computer to another, safely304 points
  4. hnMagic Wormhole: Get things from one computer to another, safely304 points
  5. hnGet things from one computer to another, safely49 points

Who it’s for

People moving a file between computers when setting up SSH or cloud storage would take longer than the transfer.
Support staff who can relay a short spoken code to the person receiving a file.
Python developers building a two-party exchange around the Wormhole and Transit protocols.
Privacy-conscious users willing to install the Tor extra and use Magic Wormhole's own --tor mode.

Who it’s NOT for

Backup or migration jobs that must resume safely after interruption: issue #722 reports a 31.53 GB directory transfer that stalled at 100% and left no received files after the receiver stopped it.
Automation that needs stable JSON output: the CLI docs say output is written for humans and may change between releases, while issue #691 requests structured output.
Transfers that cannot depend on a shared rendezvous service: the security docs call the mailbox server a single point of failure, though you can configure another server.
Users who assume default mode hides network location: the Transit protocol exchanges address hints, while the documented --tor mode suppresses them.
Anyone likely to paste the one-use code into an observed public channel: the attack notes say learning that code enables a reliable interception attempt.

Setup reality

Our commit a76c504 install succeeded in 51 seconds, adding 76 packages and using 106 MB. The build passed in 11 seconds. Pytest finished in 68 seconds with 462 passed, 0 failed, and 10 skipped out of 462; pip-audit found 0 known vulnerabilities.

Basic transfers need Python 3.10 or newer on both endpoints plus access to the default mailbox and transit services. You can replace either service through options or environment variables. Tor use needs the optional dependency and a reachable Tor daemon, unless the tool launches one.

The checkout has 3 CI workflow files, no Dockerfile, and no directory literally named tests. Direct connections are attempted first, then a relay handles peers that cannot reach each other. The CLI is interactive by design, so unattended jobs need careful API use or wrappers that tolerate changing text output.

A one-use code replaces accounts and SSH setup

Magic Wormhole sends files, directories, or short text between 2 computers. The sender runs wormhole send, reads a short word code, and gives that code to the receiver. The receiver enters it with wormhole receive. The code is used once, so neither person needs an account, a shared cloud folder, an email attachment, or an SSH key exchange. That is the whole appeal.

The connection has more machinery than the conversation does. Both clients contact a mailbox service to find each other and perform a password-authenticated exchange. They then try direct TCP paths using address hints. If those paths fail because both peers sit behind NAT or allow only outbound connections, a transit relay carries the encrypted stream. The relay can observe addresses and traffic timing, but the protocol docs say it cannot read or alter records without detection.

The default code contains 16 bits of entropy. Magic Wormhole's attack notes explain that a network attacker or hostile mailbox server gets one guess and would usually cause a visible failure if it guesses incorrectly. Users who see repeated password errors can request a longer code with --code-length. Anyone who learns the code through the same compromised channel as the file invitation can impersonate a peer, so the code still needs a private route.

What happened when we ran it

Our sandbox installed Magic Wormhole from commit a76c504 in 51 seconds. That pulled 76 Python packages and occupied 106 MB on disk. The build completed in 11 seconds, which puts this closer to an ordinary Python utility than a service stack. No credentials or secrets were present in the unprivileged Debian container.

Pytest finished in 68 seconds with 462 passed, 0 failed, and 10 skipped out of 462. Pip-audit reported 0 known vulnerabilities in the installed dependency set. Those are clean results for the exact commit and environment we ran; they do not measure transfer speed, relay availability, or how the tool behaves with a particular NAT and firewall combination.

The repository held 232 files, roughly 28,240 source lines, and 1.7 MB before installation. Our scan found 3 CI workflow files, no Dockerfile, and no directory literally named tests, even though the invoked pytest suite completed. A container recipe is not necessary for the normal packaged command, but teams embedding the library must own their Python environment and deployment image.

Large directory transfers need a retained source copy

Issue #722 describes a Magic Wormhole 0.24.0 transfer of a 31.53 GB directory containing 10,633 items between macOS and Linux. The progress display reached 100%, then both ends waited without completing. After the receiver was interrupted, the reporter found none of the transferred files. It is a single report, not our lab result, but its failure mode matters because the progress display looked finished before confirmation.

For ordinary handoffs, wait for both clients to report completion and verify the received file before deleting the source. Large directory moves deserve an archive or an independent file list and checksums, particularly when a retry would be expensive. Magic Wormhole is designed as a transfer tool, not a resumable backup system. Its README says files can be arbitrary in size, but that statement does not promise recovery from an interrupted finalization step.

Issue #691 identifies a different boundary: the CLI has no structured output mode. The project's own CLI documentation says commands expect a human and do not try to keep output machine-readable or predictable between releases. Shell automation that scrapes progress or confirmation sentences is therefore brittle by design. Developers should use the Python API, or pick a tool with a documented JSON contract, when another program must make decisions from transfer state.

Tor mode hides address hints only when both sides use it correctly

Normal Transit negotiation shares candidate IP addresses and ports so the peers can attempt a direct connection. The Tor documentation warns that running the command under torsocks or tsocks does not remove those hints. Magic Wormhole's own --tor mode does. It looks for common Tor control or SOCKS endpoints, and --launch-tor can start a temporary daemon if Tor is already installed.

When both clients use Tor, the current implementation does not create onion-service listeners. The docs say file transfers then use the transit relay because neither endpoint advertises a listening address. That protects network location at the cost of a relay dependency and whatever delay Tor adds. The page describes onion-service connections as a future possibility, so buyers should not treat direct Tor transfers as a present feature.

Self-hosting is possible but split across separate repositories. One service provides mailboxes and another runs the transit relay. Both clients must agree on the mailbox, while either side may suggest a relay. Operating those components removes dependence on the public defaults, but it also gives your team availability, abuse control, upgrades, and service discovery to manage. The attack notes explicitly identify the mailbox as a denial-of-service target and single point of failure.

The August 26 push matters more than missing GitHub releases

GitHub recorded a push on August 26, 2026, with open issues and pull requests updated during the same month. The repository had 22,872 stars and 178 open issues and PRs combined when fetched. GitHub's latest-release endpoint returned no release object, so health is better judged from the fresh push and issue work than from that empty release feed.

The core idea has stayed useful because the human workflow is hard to beat: install a command, say a short code, and send the file. Our 462 passing tests support trying it. The caveats are equally concrete. Keep codes private, use the built-in Tor mode when location privacy matters, retain large originals through confirmation, and do not build automation around prose intended for a terminal user.

Alternatives

ProjectWhat it isPick it when
crocA cross-platform relay-assisted file transfer tool that also uses short codes.pick this instead when you prefer a single Go binary and want another code-based transfer workflow.
LocalSend gh↗A graphical local-network file sharing app for desktop and mobile devices.pick this instead when both devices share a LAN and a visual interface matters more than terminal use.
OnionShareA Tor-based desktop and command-line tool for private file sharing and receiving.pick this instead when routing through Tor is the main requirement rather than an optional transfer mode.

What people are saying

  1. [velocity-scout] magic-wormhole/magic-wormhole

Sources

  1. Magic Wormhole repository and README
  2. Magic Wormhole welcome and protocol overview
  3. Magic Wormhole known attacks
  4. Magic Wormhole CLI behavior
  5. Large transfer interruption report
  6. Structured CLI output request

More dev tools reviews

workmux · v2rayNG · SecLists · hashcat · eslint · fastfetch · the whole board →