EngineShelf
Download
A shelf of real browsers

Four engines.
Every version.
One click away.

Pick a version of Chromium, Firefox, Edge or WebKit, press Launch, and it opens as an ordinary desktop browser — tabs, bookmarks, DevTools and all. No account, no build step, nothing to configure.

Download for your platform
Other platforms
0
versions on the shelf
0
years of engines
0
browsers, three engines
Firefox 154
Edge 151
WebKit 26.5
localhost:4173 Chromium 152
Why people keep one of these around

Modern browsers are excellent liars.

They quietly polyfill, gracefully degrade and make your site look finished — right up until it meets an engine from 2019, where an unsupported CSS declaration is dropped, not degraded, and a layout falls apart in a way nothing on your machine will ever show you.

Kiosks & devices

POS terminals, scanners and industrial tablets ship a System WebView years behind the OS. It is the engine that decides whether your CSS survives.

The same engine on your desk, in a window you can click around in.

The support ticket

A customer on a locked-down browser reports a bug you cannot reproduce anywhere.

Open their engine, load the page, see it happen.

The browserslist claim

Your config promises support for an old floor. Nobody has ever checked.

Two minutes to find out whether the promise is true.

The regression hunt

Something broke somewhere between two releases.

90, 105 and 120 open side by side, bisected by eye.

Sixty seconds to your first old browser

1

Open it

Double-click the launcher. The manager opens in your normal browser: every version, what is installed, what each one costs in disk.

2

Pick a version

Press Launch on any row. The first launch of a version downloads it — 90–300 MB, a few minutes, once. Every launch after that is instant.

3

Use it

A real browser window opens. Type a URL, open DevTools, log in, keep the profile. Close the launcher window when you are done.

One row, one press. Beside the name is what that version was first to support and the day it shipped, which is how a row actually gets picked. The download happens once; after that the same button opens a 2019 engine in about the time a tab takes.
Tip

Type a URL in the box at the top of the manager and every version you launch opens straight to it. localhost:4173 is fine — it is the fastest way to compare four engines on the same page.

A look around

Three versions in flight, one window.

Downloads, launches, profile resets and Docker containers all report into the same strip along the bottom — and the log remembers every one of them.

Theme
The same window in the light theme Four engines on one shelf, each row led by its engine's mark and followed by what that release was first to support: Chromium 152, Firefox 154, WebKit 26.5 open and offering Stop and Open, Chromium 151, Edge 151 installed. Along the bottom, the job log has a tab per job — Chromium 105, WebKit 26.5, Firefox 115 — showing curl's download meter at 43 percent, with 100 MB of 232 MB transferred and 16 seconds left
One version downloading, two already open. Every row carries what that release was first to support, the download shows the bytes and the time left rather than a spinner, the log keeps a tab per job, and the bar at the bottom follows whichever one you picked. The window follows your system theme, or pins to one from the header — which is what the switch above is doing to this shot.
Four browsers, three engines

Every engine that still ships on the desktop.

How far back each one reaches is not a choice anyone made here — it is however much its vendor still publishes, and they differ a lot. Worth knowing before you go looking.

Chromium
back to 2017 · milestone 60

Every build in the Chromium snapshot archive, which prunes nothing — so any revision works, not just the catalogued milestones.

On Apple Silicon the pre-2021 builds have no arm64 archive and go through Rosetta, where they crash at random. The container edition runs the Linux build instead.

Firefox
back to 2017 · Firefox 57

Every release Mozilla has ever shipped is still on ftp.mozilla.org, including each ESR line.

An old Firefox trusts only the certificate authorities it shipped with, so EngineShelf turns on the OS trust store for it — without that, a 2019 build rejects most of today’s HTTPS.

Edge
back to 2021 in a container

Chromium underneath, so not a fifth engine — what it adds is Edge’s own Tracking Prevention defaults and a build matching the WebView2 runtime Windows kiosks ship.

Microsoft’s enterprise feed holds about six months and gates every file behind a per-file GUID, so natively that is all mac and Windows can reach. The Linux package pool has kept every build since 2021, which is what the container uses.

WebKit
back to 2021

The engine Safari is built on, from Playwright’s build CDN — the closest thing to Safari that can be downloaded.

Not Safari: a minimal shell around the engine, with no Safari interface or media stack. It catches a CSS property Safari has not shipped; it will not reproduce anything specific to Safari itself.

Four shelves, one scrubber

Every version each vendor still publishes.

How far back a shelf reaches is not a choice anyone made here. Chromium’s archive prunes nothing, so every milestone since 2017 is on it — and so is any other snapshot revision in between. The other three go back exactly as far as Mozilla, Microsoft and Playwright still host, which is not very far for two of them. Pick an engine, drag the scrubber, or click a year.

Chromium 74
74.0.3729.0 · r638880 x86_64 · Rosetta
2019

No flexbox `gap` (84), `aspect-ratio`/`:is()` (88), optional chaining (80).

32 features first supported here.

./engineshelf.sh run 74
2017–2018
60 · 65 · 70

Hard floors for very old WebViews.

2019–2020
74 · 76 · 80

No flexbox gap; optional chaining arrives in 80.

2020–2021
85 · 90

Flexbox gap, aspect-ratio, :is().

2021–2022
95 · 100 · 105

Container queries and :has() arrive in 105.

2023
110 · 115 · 120

dvh, CSS nesting, view transitions, subgrid.

2024
125 · 130

Near-current — the control when you are bisecting.

For terminal people

The manager is a front end for the CLI.

Both do the same things, so they cannot drift apart. Flags for run: --size 1280x800, --gpu / --no-gpu, --no-restart, and anything after -- goes straight to Chromium.

Windows runs the same commands through .\engineshelf.ps1.

zsh — EngineShelf
$
Docker edition

The Linux build in a container, shown in a browser tab.

Runs the Linux x86_64 build in a container and shows its desktop in a tab of your normal browser, over noVNC. All four engines, the same commands as the native launcher.

Each version gets its own image, container, profile volume and port, so several can run side by side. Docker is optional, and the native launcher is what most people should use.

./engineshelf-docker.sh start 74
./engineshelf-docker.sh start edge:95
./engineshelf-docker.sh start firefox:52
./engineshelf-docker.sh stop 74
./engineshelf-docker.sh logs 74
./engineshelf-docker.sh rebuild 74
./engineshelf-docker.sh list
./engineshelf-docker.sh purge 74

Why it earns its gigabyte differs per engine. For Chromium it never touches Rosetta, so on Apple Silicon it sidesteps both the stack-profiler crash and the startup abort that stops the oldest milestones reaching a window at all — and it now covers every milestone on the shelf, not only the ones catalogued by hand. For Edge it is the only route to an old build at all — the feed that serves mac and Windows holds about six months, while the Linux package pool has kept every build since 2021. For WebKit, Playwright deleted the older macOS archives and never published some; the Linux ones are still there.

Inside the container, localhost is the container. Use http://host.docker.internal:4173 to reach a server running on your own machine.

Download

Every download is self-contained.

The launcher finds everything it needs inside the package. Nothing to install, nothing to keep together, no loose folder of files to lose.

Latest release
EngineShelf
Pick the build for your platform below
Go to releases
All platforms
macOS
Latest release

Unzip → double-click EngineShelf.app

Windows
Latest release

Unzip → double-click EngineShelf.bat

Linux
Latest release

Extract → run ./EngineShelf

Need an older build, the changelog or the checksums? Every version EngineShelf has shipped stays available.
All releases

Runs on — macOS 10.13+ on Intel and 11+ on Apple Silicon · Windows 10/11, using the PowerShell 5.1 that ships with them · Linux x86_64. The manager wants Python 3 on macOS and Linux; the command line does not.

Paranoid, sensibly so? shasum -c SHA256SUMS.txt verifies the download against the published checksums.

Good to know

The honest caveats.

It really is a browser

Address bar, tabs, bookmarks, history, downloads, DevTools — all there, and each version keeps its own profile between launches. Do bear in mind that the old ones really are old. Sites built for a modern engine may refuse to load, render strangely, or nag you to upgrade. That is the browser being honest, not the tool misbehaving.

Point it at a production build, not your dev server

Vite, Next.js and friends ship your source untranspiled and skip the CSS-fallback step, so an old engine chokes on the dev server even when your shipped build is perfectly fine. A blank page on localhost:3000 usually means "the dev server is modern", not "my code is broken". Build the site the way you deploy it, serve the output, and open that.

Stability on Apple Silicon

Chromium publishes native arm64 macOS builds from roughly M92 on, so 95 and later run natively. 60 through 90 have no arm64 build, so they run through Rosetta. Those builds run with --disable-gpu by default, which removes the GPU-process crash completely.

Chromium's stack sampling profiler occasionally segfaults under Rosetta and there is no switch to turn it off, so the launcher relaunches the browser and lets Chromium restore your tabs, up to 5 times. A build that never reaches a window is the other case and is not retried: the oldest milestones now abort in their first second against this year's system allocator, so the shelf records that, says so on the row, and offers the container instead. Use --no-restart if you would rather it stop and show the log.

Nothing listens outside your machine

The server binds to 127.0.0.1 and every request must carry a token generated for that run, so a web page you happen to have open cannot drive your browser installs. Closing the launcher window stops the manager; browsers it opened keep running.

Keeping disk under control

Each version is a separate 90–300 MB download. The ··· menu on any installed row can reset the profile, delete the browser but keep the profile, or delete both. A running total across every browser and profile sits at the top of the manager, so it is obvious when to clear something out.

Contact

Found something? Say so.

Windows reports especially welcome — nothing on the Windows side has been run on Windows yet.

Email
1m93.contact@gmail.com

For anything that does not belong in a public issue.

GitHub
github.com/1m93

Issues, releases and the source, all in one place.