GridJapan fork / macOS menu bar app

Give macOS a display
that isn't really there.

Create HiDPI virtual displays without a physical monitor, right from a free macOS menu bar app. You can also control brightness and contrast on real monitors via DDC.

macOS 14+ Swift 6 ・ SwiftUI Free and open source
3 physical + 3 virtual displays. macOS treats them all as real
3 physical + 3 virtual displays. macOS treats them all as real

gjPiPWindow, fully supported.

FreeDisplay (GridJapan fork) fully supports gjPiPWindow. We tuned it for running three virtual displays full time, fixing four bugs in the official version and adding four feature sets: resolution persistence, presets, per-display identity, and per-display closing.

01

Virtual displays appear in System Settings

real to macOS

To macOS, the virtual displays FreeDisplay creates are real displays. They sit alongside physical monitors in System Settings, with selectable resolutions and a 75Hz refresh rate.

6 displays in Arrange Displays
6 displays in Arrange Displays
Choose the resolution and 75Hz refresh rate
Choose the resolution and 75Hz refresh rate
02

Features

HiDPI Virtual Displays

Create displays without a physical monitor, and run multiple at the same time.

DDC Brightness + Contrast

Control external monitor hardware settings directly through IOKit I2C.

Brightness Keys + HUD

Use the keyboard brightness keys with external monitors and show the HUD.

Automatic Brightness

Adjust brightness automatically based on time of day.

Arrangement + Main Display

Set the display layout and switch the main display.

Color Profiles

Switch ICC profiles per display.

Image Tuning

Adjust gamma, contrast, color temperature, and color inversion in software.

Presets

Save and restore display configurations.

03

Fixed and added for running three side by side

for the gjPiP rig

This fork was built to keep three virtual displays running side by side in gjPiP. Along the way, it fixes four bugs found in the official version and adds four missing features. Details are in README.

FIXED

Changing brightness via DDC crashed instantly

An @MainActor closure ran on the DDC queue and failed Swift's isolation checks. Pressing a brightness key once was enough to reproduce it.

FIXED

The menu only showed "Quit"

ScrollView had no ideal height. Because the window-style MenuBarExtra sizes itself from the ideal height, all menu content disappeared.

FIXED

Setting an external monitor as the main display snapped back after 0.5 seconds

The change itself triggered auto-arrangement, which pulled the display away from the origin.

FIXED

A third virtual display at the same resolution could not be created

The duplicate guard checked width and height instead of ID.

ADDED

Remember and keep the selected resolution

FreeDisplay remembers the resolution selected in System Settings and keeps it after restart. In the official version, it can silently revert after a while.

ADDED

Added resolution presets

Added 1920×1200 and 2048×1280 as creation-time options.

ADDED

Individual identity for virtual displays

Each display now has its own name and serial, so macOS can correctly remember and restore arrangements for all three.

ADDED

Close displays one at a time

Previously, displays could only be closed all at once. Now you can close each one individually.

04

View invisible screens with gjPiP

works together

A virtual display has no physical monitor. Viewing and controlling it is the job of the companion app gjPiP. Show any display in live PiP and control it with your mouse through PiP.

Control a virtual display through PiP
Control a virtual display through PiP
05

Install

Build from source. The repository includes an Xcode project, so if Xcode is installed, you can build it directly.

# Clone and build (creates build/FreeDisplay.dmg)
git clone https://github.com/GridJapan/FreeDisplay.git
cd FreeDisplay
./build.sh

# Open the DMG and move FreeDisplay.app to Applications.
# Because it is unsigned, launch it the first time by right-clicking → "Open".
PermissionPurpose
AccessibilityUsed to intercept the keyboard brightness keys when using external monitors.

No network connection is used, except optional update checks against GitHub Releases.