MovePhone
Move a phone's files onto the new handset and prove every byte arrived.
Free right now — no account, no card
Preview
1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.
Free while we’re in preview
Get MovePhone
Move a phone's files onto the new handset and prove every byte arrived.
The Mac button is for Apple Silicon. On an older Intel Mac, get this one instead.
One file, both ways. Double-click it for the window. Run the same file from a command prompt with arguments and it behaves as the command-line tool, because the engine is inside it. Nothing else to download and nothing to keep beside it.
Early preview. The window has been built and run, but not yet on a real Windows PC or Mac, so expect rough edges. The engine underneath it is fully tested.
- One file — no installer
- Runs on your machine, offline
- Source code published below
Free while in preview. It isn’t signed yet, so Windows or macOS will ask you to confirm the first time you open it. At launch, MovePhone is included in every plan along with the rest of the range.
Built for doing this fifty times
Both phones have to be mounted as folders first. MovePhone has no USB stack, no MTP, no adb. If your file manager can’t see the handset, neither can this.
Given that, it does one direction: old to new. Every file is hashed on the way out and hashed again on the way in, and the copy only takes its final name once the two agree. Each completed file appends one fsynced line to a ledger, so a 60 GB transfer that gets unplugged at 40 GB resumes exactly where it stopped. Run verify before you wipe the old handset, and again months later if you want to know it’s still good.
Despite the name, nothing is ever deleted from the source. That tree is opened read-only.
What isn’t on the mount
Messages, call history, contacts and app data aren’t files you can see, so they don’t move. Neither do photos that live only in iCloud or Google Photos. If a path already exists on the new phone with different content, the existing file is never overwritten; the incoming one lands beside it under a name derived from its own hash.
For two phones that have both been used since they last matched, PocketSync is the tool. This one has nothing to reconcile.
Reading on the job itself
- How to send a file from your phone to your computer Run a small web server on the computer and open its address on the phone. The file goes straight across you...
Advanced & technical details Command-line builds, source code, checksums and a recorded session — for developers and IT teams
A working command-line build of the transfer engine: content sniffing by magic bytes, a plan that separates genuinely new files from ones already there and from name collisions, and a verified copy that writes to a .part file, hashes while streaming and only renames into place on a match. An interrupted move resumes from its ledger without redoing finished work. The source is opened read-only and nothing moves without --apply. It works on a mounted phone folder; speaking USB protocols directly is on the roadmap.
Naming status
Working name only — brand verdict **RENAME** (High). Collision: MovePhone / Moviefone confusion. Use a more distinctive name.
What it draws on
Existing paid software whose best ideas shaped this program: iMazing, Wondershare MobileTrans, TouchCopy, Droid Transfer.
Command line
There is nothing extra to install. The program you download is the command-line tool as well: give it arguments instead of double-clicking it and it runs as one, with its output on your terminal. The standalone builds below are the same engine on its own, for machines where you would rather not ship a window at all.
movephone: no command given
movephone - verified content migration between two mounted phone trees (Techlosoft Device Migration Kit)
USAGE
movephone inventory --src <dir> [--json]
movephone plan --src <old-phone> --dst <new-phone> [--ledger <file.jsonl>] [--json]
movephone transfer --src <old-phone> --dst <new-phone> --ledger <file.jsonl> [--apply] [--json]
movephone verify --ledger <file.jsonl> [--json]
movephone help | -h | --help
COMMANDS
inventory Walk the source tree, identify every file by MAGIC BYTES (falling
back to the filename extension only when sniffing is inconclusive,
and saying which was used), hash it with SHA-256, and report totals
per content class plus the dedup-adjusted size.
plan Inventory both trees and classify every source item as
new / already-present-identical / name-collision-different-content /
duplicate-within-source. Prints bytes to move and a time estimate
derived from a MEASURED throughput sample. Changes nothing.
transfer Execute the plan. DRY RUN BY DEFAULT: without --apply it prints
exactly what it would do and writes nothing. Each file is streamed
to NAME.part while being hashed, fsynced, compared against the
source hash, and only then renamed into place. Every completed item
is appended to the ledger, so an interrupted run resumes.
verify Re-hash everything the ledger claims was transferred and report
drift (missing, resized or altered destination files).
FLAGS
--src <dir> The old phone: a mounted directory tree. Opened READ-ONLY.
--dst <dir> The new phone: a mounted directory tree. Written only under
--apply.
--ledger <file> Append-only JSON-lines record of completed items. Required by
transfer and verify, optional on plan (where it shows what a
resume would skip). Created on first use.
--apply Actually perform the transfer. Without it, transfer is a dry
run and the destination is not touched.
--json Machine-readable JSON output (all four reporting commands).
Short forms -s, -d and -l are accepted for --src, --dst and --ledger.
...
Recorded from the shipped binary, not written by hand.
Source
Every file the program is built from:
console.go · console_test.go · guided.go · inventory.go · main.go · main_test.go · plan.go · sniff.go · transfer.go · verify.go
SHA-256 checksums · build instructions & scope notes · full build plan