Phone Bridge

MovePhone

Move a phone's files onto the new handset and prove every byte arrived.

Free right now — no account, no card

Get MovePhone free Windows & Mac · one file, nothing to install

Preview

1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.

Interface design MovePhone, 1 of 1
Screenshot MovePhone running on Windows today

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

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