A lightweight, open-source macOS menu bar app for managing displays and creating virtual monitors.
Simple display management that lives in your menu bar and stays out of the way.
Turn monitors off for real: they go dark and leave the desktop, and come back with one click. Prefer to keep one on? Mirror it onto the main display instead. A 15-second countdown protects your last visible screen.
Create virtual monitors with custom resolutions and device presets — iPhone, iPad, Mac, TV, and more.
Change your primary monitor from the menu bar. Menu bar and dock reposition automatically.
Pick the resolution and zoom of any display from its row: Retina "looks like" sizes, native sizes and refresh rates. Virtual displays can be Retina and remember the mode you choose.
Automatically handles display state across sleep cycles. Your setup is restored without manual intervention.
Prevents the ColorSync deadlock with identical monitors on macOS Sequoia, and gives virtual displays a stable identity so they don't leak ICC profiles or keep colorsyncd busy.
macOS limits resolution when no physical monitor is connected. SimpleDisplay creates virtual displays that the system treats as real screens — perfect for remote access, testing, and headless setups.
Full resolution over any remote desktop. Works best with Remote Display, our remote desktop for macOS whose virtual monitors resize to your window; also with Screen Sharing, VNC, Parsec, AnyDesk or TeamViewer.
Run Mac minis and Mac Studios with no monitor attached at any resolution.
Test layouts at specific device resolutions without extra hardware.
Keep apps running on a virtual display while working on your main screen.
SimpleDisplay uses macOS private frameworks to give you control that the built-in settings don't offer.
Uses Apple's private CGVirtualDisplay API to create displays that appear as real monitors to macOS — useful for screen sharing specific resolutions, testing responsive layouts, or keeping apps running on a "hidden" screen.
Deactivates it at the window-server level via CGSConfigureDisplayEnabled, the same private API displayplacer uses. The display goes dark and leaves the desktop while staying connected; SimpleDisplay keeps a greyed-out row so you can turn it back on.
These capabilities aren't available through public frameworks. SimpleDisplay can't be distributed on the Mac App Store, but it can do things no App Store app can.
Every action is also a simpledisplay:// URL, and the simpledisplayctl command wraps them for shell scripts, Shortcuts, launchd agents, or an SSH session into a Mac with no monitor attached. The URL launches the app if it isn't running, so there is no extra background process.
Create, resize and remove virtual displays, and turn any display off, on or into a mirror, by name or ID with simpledisplayctl. Install it from a checkout with make cli-install.
open, create, remove, reconfigure, enable, disable (with an optional headless confirmation), mirror, unmirror, mode and status. Every value is validated before the app acts on it, and malformed URLs show a one-line banner instead of failing silently.
Run the CLI over SSH to drive the SimpleDisplay running on that Mac, for example to set a resolution before connecting with Remote Display or Screen Sharing.
Download the DMG or build from source — your choice.
Grab the latest DMG from GitHub Releases. Open it, drag to Applications, and you're done.
First launch
Since v1.6.1 the app is signed with a Developer ID and notarized by Apple, so it opens like any other app. Older builds were blocked on first launch: go to System Settings → Privacy & Security and click Open Anyway, once.
Clone the repo and build with a single command. Requires Xcode Command Line Tools.
SimpleDisplay uses private Apple APIs. Here's what that means in practice.
Cannot be distributed on the Mac App Store — private APIs are not allowed by Apple's review guidelines.
Virtual display refresh rate is capped at 60 Hz (API limitation).
Enable/disable and main-display state are tracked by a stable per-display UUID, but the identical-monitor ColorSync fix and simpledisplayctl remove --name match displays by name, so two monitors with the same name may not be distinguishable there.
The CGVirtualDisplay and CGSConfigureDisplayEnabled APIs are undocumented and may change or be removed in future macOS versions.
Virtual displays can't be mirror sources: on macOS 26 that crashes the window server, so SimpleDisplay refuses it. Mirror a physical display onto a virtual one instead.
SimpleDisplay is free software. Built with insights from the macOS display management community, including BetterDisplay, DeskPad, and displayplacer. Contributions of all kinds are welcome.