Colophon

How Legacy Store is made.

Legacy Store is a preservation archive of iOS applications from the App Store's first fifteen years — the delisted, the abandoned, the quietly removed, and the merely old. It exists so that a person holding a first-generation iPad or an iPhone 3G can find an app that still runs on it, know before downloading whether it will actually launch, and install it straight onto the device. It is also a time machine: a record of how each app — and the App Store around it — looked and changed, year over year, screenshot by screenshot.

Everything here is open source, and everything about how it works is written down. This page is the long version.

What this is, and why it exists

There are roughly 65,000 distinct iOS app binaries in the archive, deduplicated by content hash from over 90,000 archived file copies held on the Internet Archive. Around a third of those copies are exact duplicates of one another; the archive treats the binary — identified by its hash — as the thing worth knowing about, and folds the copies together.

The problem this solves is specific and, if you have ever tried it, familiar. Many archived .ipa files are still FairPlay-encrypted: they install onto a jailbroken or sideload-capable device without complaint, then refuse to launch. The old way to find a working copy is to tap link after link until one happens to run. Legacy Store answers the question up front — will this actually run on my device? — for every app, before you spend a download on it. On a listing it shows each version's copies with their install status, hides the copies that are no longer on the Internet Archive, and, when you visit on an old iPhone or iPad, reads your iOS version and can hide the versions too new to install on it.

The archive is metadata-only. It never re-hosts the app binaries themselves; those live on the Internet Archive, and Legacy Store links out to them. What Legacy Store contributes is the analysis, the history, and the index that makes the whole collection navigable.

Where the data comes from

Three public sources, used politely:

New Internet Archive dumps are ingested automatically on a regular schedule. When new items appear, they are diffed against what's already known by file hash, and only genuinely new binaries enter the analysis pipeline. Nothing is scraped twice.

How each app is analyzed

This is the part the project is quietly proud of.

To decide whether an app will run, you do not need the whole app. You need the first few hundred kilobytes of its Mach-O executable — the compiled program's header. So that is all Legacy Store fetches. Using HTTP range requests against the raw .ipa on the Internet Archive, the pipeline reads the Zip archive's directory from the tail, locates the executable inside it, and pulls just enough of it to parse the header. A typical binary is understood from well under a megabyte of transfer, with no full download and no server-side extraction.

From that header it reads:

Icons get their own care. The pipeline prefers Apple's high-resolution iTunesArtwork where present, and otherwise extracts the app's icon from loose PNGs or from the compiled Assets.car asset catalog. Apple's iOS-optimized "CgBI" PNGs — which ordinary image viewers can't read — are converted back to standard PNG. Every icon is content-addressed by the hash of its bytes, deduplicated across every app and version that shares it, and served from a CDN rather than from Apple's long-dead artwork servers. Because a single icon is tied to the exact binary it came out of, listings can show the oldest icon an app ever shipped by default, and switch to the icon closest to a given version or chart date when you're looking at a moment in time.

Because the analysis is a property of the binary, not of any one archived copy, each distinct binary is scanned exactly once. The raw artifacts pulled during that scan — the plists, the parsed header, the file manifest — are kept in object storage, so any new field wanted later can be derived from them without ever crawling the Internet Archive again.

The time machine

The second half of the archive reconstructs history.

Top Charts. Historical Top Free, Top Paid, Top Grossing, and New app charts, rebuilt from archived App Store chart feeds — dense from around 2010, with near-weekly resolution in the early years and coverage continuing into the 2020s. You can pick a chart and a date and see what the App Store looked like that week — real rankings, complete with period prices, developers, and artwork, and a link to the exact Wayback capture each was rebuilt from. Device-segmented charts (separate iPhone and iPad lists) and editorial feature placements are recovered alongside them.

Rating history. By reading archived iTunes Lookup responses over time, the archive reconstructs how an app's rating count and average moved year over year — so a popular app's page can show its ratings climbing from a few thousand in 2013 to a few hundred thousand later.

Reviews. Period-authentic customer reviews, recovered from archived review feeds with their original stars, titles, bodies, authors, approximate dates, and the app version each was written against. This coverage is opportunistic by nature — it exists only where someone historically fetched the feed — so it is present for some apps and absent for others, honestly.

Per-version store pages. For each app, the archive assembles a sequence of its App Store listing as it changed release to release: descriptions, screenshots, "What's New" notes, prices, and release dates. Reading these in order is like flipping through the app's own changelog as its makers wrote it.

Screenshots that came back. Many old screenshot URLs are dead in the web archive. Apple, however, rarely deletes the underlying images. Legacy Store checks Apple's live CDN first — often recovering an original-resolution image from a URL the archive only ever saw as a thumbnail — and falls back to the Wayback Machine's raw capture, recording an honest miss only when an image is genuinely gone. Recovered images are content-addressed and deduplicated like everything else.

Version history and downloads

Every version of every app carries the App Store download identifier Apple assigned it (the externalVersionId). Because those identifiers are handed out in order over time, they can be dated by calibration: given the known dates of the identifiers around it, any version's release moment can be placed on the timeline even when no dated archived page survives for it. That is what lets the archive line up a moment in history with the exact .ipa you'd want to install to match it.

Downloads themselves go two ways. On a legacy iOS device, Legacy Store serves an itms-services:// install manifest for true over-the-air installation straight onto the hardware. On a desktop browser, it hands you the .ipa directly. In both cases the file itself is fetched from the Internet Archive — Legacy Store points the way, it doesn't hold the goods.

How it's built

The analysis pipeline that feeds all of this runs continuously and unattended, scanning new binaries and folding in new archived pages on a schedule.

Ethics, privacy, and method

A few principles govern the whole thing:

Acknowledgements

Legacy Store stands on other people's work and is glad to say so.

The project's codename, if you were wondering, is Jangle — Apple's codename for the iTunes Store was "Jingle," and alliteration is fun.