Open Source · GPL-3.0 · macOS 14+

Your displays,
under control.

A lightweight, open-source macOS menu bar app for managing displays and creating virtual monitors.

< 2 MB
Download size
GPL-3.0
License
Universal
Apple Silicon & Intel

Everything you need, nothing you don't

Simple display management that lives in your menu bar and stays out of the way.

Enable / Disable Displays

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.

Virtual Displays

Create virtual monitors with custom resolutions and device presets — iPhone, iPad, Mac, TV, and more.

Set Main Display

Change your primary monitor from the menu bar. Menu bar and dock reposition automatically.

Resolution & Zoom

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.

Sleep / Wake Safe

Automatically handles display state across sleep cycles. Your setup is restored without manual intervention.

ColorSync Fix

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.

Real monitors, created in software

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.

Remote access

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.

Headless Macs

Run Mac minis and Mac Studios with no monitor attached at any resolution.

Responsive testing

Test layouts at specific device resolutions without extra hardware.

Hidden screens

Keep apps running on a virtual display while working on your main screen.

iPhone iPad MacBook 1080p 4K Ultrawide Custom
✓ Created "iPad Pro 11" 2420×1668 @ 60Hz
✓ Reconfigured to 2732×2048 @ 60Hz

Displays:
  ● Mi Monitor    3440×1440  main
  ○ J560T09 (1)  disabled
  ● iPad Pro 11"  2732×2048  virtual

Built on Apple's display APIs

SimpleDisplay uses macOS private frameworks to give you control that the built-in settings don't offer.

Virtual monitors

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.

Disabling a display

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.

Why private APIs?

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.

// Virtual display creation
let desc = CGVirtualDisplayDescriptor()
desc.name = "iPad Pro 11"

// Real display disable
CGSConfigureDisplayEnabled(
  config, displayID, false
)

Scriptable from the terminal

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.

Command line

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.

URL scheme

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.

Remote Macs

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.

Read the automation docs
# virtual displays by name or id; turn any display off, on or into a mirror
$ simpledisplayctl create --width 2732 --height 2048 --name "iPad Pro" --hidpi
$ simpledisplayctl reconfigure --id 3 --width 1600 --height 1200
$ simpledisplayctl remove --name "iPad Pro"
$ simpledisplayctl mirror --name "DELL U2723QE" # physical display → mirror of main
$ simpledisplayctl disable --id 2 --headless # off, confirmed up front

# the same actions as URLs, from anything that can open one
$ open "simpledisplay://disable?name=J560T09"
$ open "simpledisplay://status" # → /tmp/simpledisplay-status.json

# drive a headless Mac over SSH
$ ssh user@mac "simpledisplayctl create --width 1920 --height 1080 --name Remote"

Up and running in seconds

Download the DMG or build from source — your choice.

Recommended

Download

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.

Download latest release
For developers

Build from source

Clone the repo and build with a single command. Requires Xcode Command Line Tools.

# clone & build
git clone https://github.com/SamuelRioTz/SimpleDisplay.git
cd SimpleDisplay
make dmg

# run
open .build/SimpleDisplay.app

# optional: install the CLI
make cli-install
View on GitHub

Known limitations

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.

GPL-3.0

Built in the open

SimpleDisplay is free software. Built with insights from the macOS display management community, including BetterDisplay, DeskPad, and displayplacer. Contributions of all kinds are welcome.