Published on 2026-06-17

fake a non-retina screen on Chrome

My Mac is Retina. So are my external screens. Plenty of people still browse on plain 1x displays though, and things that look crisp on Retina can fall apart there: hairline borders, 1px lines, downscaled images. I kept an old non-retina monitor around just to check that.

Then Alain posted this in our dev channel:

TIL you can start chrome with --force-device-scale-factor=1 if you want to quickly check how everything renders on a non-retina screen

Turns out --force-device-scale-factor is a real Chromium flag. The source comment reads:

// Overrides the device scale factor for the browser UI and the contents.const char kForceDeviceScaleFactor[] = "force-device-scale-factor";

So it renders the whole browser at the factor I pass, not just the page. Set it to 1 and Chrome draws like a non-retina screen.

On a Mac, Chrome is not on the path, so I launch it through open:

# quit Chrome completely first (Cmd+Q), then:open -a "Google Chrome" --args --force-device-scale-factor=1

The gotcha is that --args only takes effect on a fresh launch. If Chrome is already running, open just brings the existing window forward and drops the flag. Quitting Chrome first is the easiest way around that. My old monitor can finally go in a drawer.

down the rabbit hole

Quitting is the easiest way, not the only one. Alain found -n in man open:

$ man open  # ...  -n  Open a new instance of the application(s) even if one is already running.

So why quit at all?

Because Chrome is not a normal Mac app. It keeps a single instance per profile, guarded by a lock in the user data directory. A second open against that same profile sees the lock, hands its command line to the running Chrome, and exits. The startup-only flag goes with it. -n does not change that.

Pointing the new instance at its own profile sidesteps the lock:

open -n -a "Google Chrome" --args \  --user-data-dir="$(mktemp -d)" \  --force-device-scale-factor=1 http://localhost:4321

Now a 1x Chrome sits next to my Retina one, no quitting. That throwaway profile is signed out with no extensions, which for a render check is fine.

P.S. my old eyes

I wear glasses now, the kind that come with age.

When a screen renders non-retina, my brain does not blame the screen. It blames my eyes. It assumes I forgot my glasses and pushes them to focus harder, on a blur that focusing cannot fix. A while in Chrome’s non-retina mode and I am worn out. Low-res icons on an otherwise sharp page do it too.

So supporting retina properly is not just polish. It is accessibility.