Porterage Download

Porterage vs OpenMTP

Porterage and OpenMTP, difference by difference

OpenMTP is the app most people find first, and it is the reason this one exists. Both reach the phone by the same route, so every difference between them is a decision about what to do with that connection. Eight of those decisions go Porterage's way, four go OpenMTP's, and one, raw speed, has not been measured yet. Every claim about OpenMTP on this page was read out of its own shipped code, and the line under each one says where.

Checked on 18 September 2026 against Porterage 0.1.1 and OpenMTP 3.3.0, and read again on 21 September alongside the two other apps people suggest — every build downloaded from its own release page

They talk to the phone the same way

This is the first thing to get out of the way, because the usual comparison gets it wrong. OpenMTP's current engine is not the old library everyone blames.

Porterage 0.1.1

A native Mac app in Swift and AppKit. It implements MTP itself and drives the cable through libusb. One universal binary, nothing else installed, no runtime underneath it.

OpenMTP 3.3.0

An Electron app — Chromium 100 and Node — wrapped around an engine of its own called Kalam, written in Go, which also drives the cable through libusb. An older mtp-cli engine ships alongside it as a fallback for phones Kalam cannot see.

Checked, not assumed

Kalam is the default: OpenMTP's own settings state starts at mtpMode: MTP_MODE.kalam, and its description of the other mode is “Previous generation MTP kernel. Use this if Kalam mode doesn't detect your phone.” Kalam's library links libusb.dylib directly, shipped next to it in the bundle. So the two apps reach the phone by the same route, and none of the differences below is a protocol advantage. Each one is a decision about what to do with the same connection — which is why they could be read rather than guessed at.

Eight things Porterage does that OpenMTP does not

In the order you would meet them: open a folder, look at it, copy something, change your mind, lose the cable, hit a name that is taken, run out of room, and wonder what left the machine. Each row names what each app does and what the claim rests on.

  • A folder opens in one pass

    MTP can describe a whole folder in one request per property. Asking about each file separately costs a round trip per file, and a camera folder holds hundreds.

    OpenMTP asks the phone for the list of handles, then sends a separate GetObjectInfo for every file in it, plus a second request again for any file whose size the first one could not carry.

    Porterage implements GetObjectPropList, which answers for the whole folder at once: one request per property rather than per file.

    0.4 s for 337 files · 3.2 s for 345 asked one at a time

  • The photo grid shows the photos

    A folder of camera photos is the reason most people plug the cable in at all, and filenames like IMG_20260912_134522.jpg do not tell you which one you want.

    OpenMTP draws one icon per file extension, so every photo in the folder is the same generic JPEG glyph. You pick by name.

    Porterage shows the picture, by three routes, so the grid fills even for screenshots and downloads that carry no embedded thumbnail.

    36 ms each off the phone · about 15% need fetching and scaling on the Mac

  • It still answers after the two hundredth file

    The phone raises an interrupt event for every object written. Leave that queue unread and it fills: copies slow to a crawl and then MTP stops answering altogether, and a USB reset does not bring it back; only unplugging the cable does.

    OpenMTP never reads it. Its engine does find the phone's event endpoint while connecting and keeps the address, and then never transfers on it. Every read and write it makes is a bulk transfer on the other two endpoints.

    Porterage polls that endpoint between slices and after every operation, waiting 10 ms each time: long enough to keep the queue clear, short enough not to be felt.

    Drained: 59 ms per small file, held across 1 000 in a row · undrained: 1 100 ms from the eleventh file, wedged for good at about 211

  • A copy can be stopped

    MTP has a Cancel Request for this. Without it, stopping means simply not sending any more bytes, which leaves the phone waiting for the rest of a file it has already made room for.

    OpenMTP cannot. Its engine exports no cancel of any kind, and the progress window it puts up has no button, ignores Escape and cannot be clicked away.

    Porterage sends the Cancel Request, then asks for the device status until the phone answers that it is ready again.

    Stopped at 25% and at 90%: returned in 0.3–0.4 s, nothing left on the phone, the next copy fine

  • An interrupted copy does not look finished

    Cables get knocked out. What matters afterwards is whether you can tell which files actually arrived, and whether you have to start the big one over.

    OpenMTP creates the file under its real, final name and writes into it from the first byte. Lose the cable and a half file sits in the folder looking complete; copying it again starts from zero.

    Porterage writes name.part and gives it the real name only once the last byte lands. Copy it into the same folder again and it carries on from the bytes already there.

    Stopped at 50%: the .part held 256 MiB, the rest came at 37.9 MiB/s, SHA-256 identical

  • A name that is taken is a question about that file

    Dropping a hundred photos into a folder that already holds twenty of them should not be a choice between overwriting all of it and copying none of it.

    OpenMTP shows one dialog for the whole drop — “Replace and merge the existing items?” — which does not say which files clash. Confirming replaces every one of them; refusing copies nothing at all. On the phone each replacement deletes first and writes second, so a copy that fails has already removed the original.

    Porterage names the file and offers Keep Both, Replace or Skip — asked once for the whole drop, in both directions, before a byte is written.

    Both clash questions, both directions, checked · Keep Both writes name (2).ext

  • A drop that will not fit is refused before it starts

    The phone will not protect you here: it accepts a declared size far larger than it can hold and only fails once it has actually run out, minutes in. Its reported free space, though, is exact to the byte.

    OpenMTP does not look. It adds up the drop for its own progress bar and starts sending. Its engine can read the phone's free space, which OpenMTP prints in the title bar, but nothing in the copy path ever consults it.

    Porterage weighs the whole drop against the phone's free space first and says how much is missing, without copying anything.

    A 200 GiB drop refused up front · 64 MiB written moved free space by exactly 64.1 MiB, and back on delete

  • Nothing leaves the Mac

    A file transfer app has no reason to talk to the internet, and what a phone is and what is on it are not ordinary usage statistics.

    OpenMTP reports usage unless you turn it off. The shipped build starts with it on and sends, to Mixpanel, a hashed machine id, the Mac's OS version, the phone's maker, model and MTP version, and after every copy its direction, file count, average speed and elapsed time.

    Porterage makes no network connections at all — not for usage, not for crashes, not even to see whether a new version exists. There is nothing to turn off.

    enableAnalytics: true in OpenMTP's shipped settings · one switch in its Settings turns it off

Five of these eight are about what happens when something goes wrong: an interruption, a clash, a full phone, a change of mind, a queue nobody drained. That is where the work went, and it is not the part a feature list shows.

How that was checked

None of it came from using the two windows side by side with a stopwatch, and none of it came from either app's README.

OpenMTP. The 3.3.0 disk image was downloaded from its own releases and the application bundle opened. The build ships its source maps, so its own code could be read rather than its minified output. Its MTP work is done by a separate compiled library, Kalam, written in Go: that library's published source was read for how each operation works, and every claim here was then checked against the compiled library actually sitting in the bundle, whose symbol table names which code paths shipped. Where those two disagree, the binary wins. OpenMTP is MIT licensed and open about all of it, which is the only reason a page like this can be written at all — its source is here, and its engine's is here.

Porterage. Every figure on this page was measured on a Redmi 9T against a MacBook Air M1, through the app's own engine rather than a prototype, and each one is written down with the conditions it was taken under in NOTES.md in its repository. Several findings there contradict the documentation, and a few record things that went wrong.

What this method cannot tell you. Reading code establishes what an app does, not how fast it does it, and it cannot know how either app behaves on a phone neither of them has met. Porterage has been tested properly against exactly one phone model.

What actually lands on the Mac

The same job, wrapped very differently. Both figures are the shipped artefacts for Apple silicon, weighed rather than quoted.

The download

Porterage 2.1 MBone universal dmg
OpenMTP 126.2 MBApple silicon dmg

Both bars share one scale. Porterage ships one file for both architectures; OpenMTP ships a separate build per architecture, the Intel one 128.2 MB. Sixty times the download.

Installed, in Applications

Porterage 4.2 MBboth architectures
OpenMTP 368.2 MBApple silicon only

Both bars share one scale. 195.5 MB of OpenMTP's install is the Electron framework and its helper processes; 172.5 MB is the application bundle. Eighty-eight times the disk.

Row by row

What each one does first, then what each one is. Every line was taken from the two shipped builds, from the published source of OpenMTP's own MTP engine, or from their release pages, on 18 September 2026.

Porterage 0.1.1 OpenMTP 3.3.0
Drains the phone's event queue Yes, every 10 ms between slices No, its USB layer has no interrupt call
Lists a folder in one request Yes, GetObjectPropList No, one GetObjectInfo per file
Photo thumbnails Yes, the real picture by three routes No, one icon per file extension
Stop a copy in progress Yes, MTP's Cancel Request No, the progress window has no control
Resumes an interrupted copy Yes, to the Mac: .part then continue No, the part file takes the real name and restarts
Answer to a name already taken Keep Both, Replace or Skip, the file named One yes-or-no for the whole drop
Checks free space first Yes, the whole drop, before anything is sent No
Sends usage data None, no network connections at all On by default, to Mixpanel; switchable off
Download 2.1 MB, one file for both architectures 126.2 MB Apple silicon, 128.2 MB Intel
Installed size 4.2 MB 368.2 MB
Runs on Apple silicon and Intel, from one binary A separate build per architecture
Minimum macOS 14.0 10.11
Signed and notarised No, macOS blocks the first launch Yes, opens normally
First released 17 September 2026 December 2018
Built as Native Swift and AppKit Electron 18.3.15, on Chromium 100
Talks to the phone via Its own MTP implementation over libusb Kalam, a Go engine, over libusb — with mtp-cli as a fallback
Licence Apache-2.0 MIT
Price Free Free

Eleven rows to three, and the three OpenMTP holds are the three a new app cannot simply decide to win: a signing certificate, support for Macs too old to run Sonoma, and seven years of use.

Where OpenMTP is ahead

Four of these are not close, and pretending otherwise would make the rest of this page worth less.

  • It opens without a detour.

    OpenMTP is signed with a Developer ID and notarised, so macOS lets it run on the first double-click. Porterage is not signed yet: macOS blocks it, and you have to allow it once in System Settings → Privacy & Security.

  • It runs on far older Macs.

    macOS 10.11 and later, against 14.0 for Porterage. If your Mac cannot run Sonoma, Porterage is not an option at all.

  • It has seven years behind it.

    First released in December 2018, 7,372 stars on GitHub, and roughly 65,000 downloads of the current Apple silicon build. Porterage was released on 17 September 2026 and has been tested properly against one phone model.

  • It is a finished product.

    Settings, themes, an in-app updater, and years of reported edge cases already found and fixed. Porterage is at 0.1.1 and says so on its own front page.

The other two apps people suggest

Ask for a way to move files between an Android phone and a Mac and two other names come back. Both were downloaded and read the same way, and opening them settles something: OpenMTP and Porterage are the only two of the four that ask nothing of the phone’s developer settings. The other two both begin by telling you to unlock Developer Options, in their own words, before they will talk to a phone at all.

  • AndroidFileSync 2.3.2

    It does not speak MTP. The string mtp does not appear in its binary once; it drives the phone through the Android Debug Bridge instead, and ships Google’s adb to do it — 19.1 MB of the 39 MB you install. That route reaches storage MTP does not expose, which is a real advantage, and it costs you Developer Options and an Allow USB debugging prompt to get there. Its own bundle is ad-hoc signed with no team identifier, so macOS refuses it outright rather than offering the usual allow-once detour.

  • AirSync 4.0.1

    It is not a file-transfer app with extras; it is a phone-companion app that also browses files. Counted in its binary: notification 1,965 times, call 415, battery 303. Browsing files is one item on its menu. It works over the network rather than the cable, which is why its setup is the longest of the four — tap Build number seven times, enable USB debugging, enable Wireless debugging, then pair by QR code. It is notarised, it ships 35 languages against Porterage’s one, and it has a paid tier.

  • Why neither is in the table

    A row-by-row table only means something when both apps are doing the same job. Scoring a cable-bound MTP browser against a Wi-Fi notification bridge would flatter whichever one the table was built around. They are listed here because they are the real alternatives, not because they lost a comparison nobody ran.

Read on 21 September 2026 from the current release of each, downloaded from its own project page. Nothing was launched, nothing was timed, and no phone was involved — these are facts about the builds, not about how fast either one moves a file.

What is not on this page yet

Speed. The one thing a comparison is usually for, and the one thing not measured here.

The figures above are measurements of Porterage, and of the two ways of asking a phone for a folder. Neither is a stopwatch held against OpenMTP, and this site will not present them as one. Nobody has run the two apps back to back over the same cable on the same folder.

That run is straightforward when it happens, because Kalam exposes its listing and transfer calls directly and so can be timed without a stopwatch on a window. The numbers go here whichever way they come out. Until then, the honest summary is that OpenMTP asks for more round trips and never clears the event queue, and what that costs in seconds on your phone is not known.

Which one to install

On what is known today, rather than on which page you happen to be reading.

Reach for OpenMTP

  • Your Mac is older than macOS 14
  • You want an app that just opens, with no security detour
  • You would rather have the mature one than the new one

Reach for Porterage

  • You copy small files by the hundred and want the pace to hold
  • You pick photos by looking at them, not by filename
  • You want a clash, an interruption or a full phone handled, not reported
  • You would rather nothing about your phone left the Mac

They install side by side and neither one needs anything on the phone, so trying both costs a download — 2.1 MB against 126.2 MB of it. Only one can hold the cable at a time: quit the other before plugging in.

Try the 2 MB one first. It is a small download to undo.

Free, open source, macOS 14 or later. If it cannot reach your phone it will tell you which of the five states it is in, and what to do about it.