Free & open-source alternative to BetterDisplay — all the core display management features, zero cost.
BetterDisplay is a great app, but its best features are locked behind a paid Pro license. FreeDisplay implements the most essential BetterDisplay features as a completely free, open-source macOS menu bar app.
Download Latest Release | Report an Issue
| BetterDisplay Feature | FreeDisplay | Notes |
|---|---|---|
| DDC Brightness & Contrast | ✅ | Hardware control via IOKit I2C (Intel) / IOAVService (Apple Silicon) |
| Software Brightness (Gamma) | ✅ | Per-display gamma table control with smooth transitions |
| Keyboard Brightness Keys for External Displays | ✅ | Intercepts brightness keys when cursor is on external display, shows native macOS OSD |
| Auto Brightness Sync | ✅ | Syncs external display brightness with built-in display changes |
| HiDPI Virtual Displays | ✅ | Creates HiDPI dummy displays via CGVirtualDisplay private API |
| Display Arrangement | ✅ | Position displays (external above built-in, etc.) |
| Resolution & HiDPI Switching | ✅ | Browse and switch all available display modes including HiDPI |
| ICC Color Profile Management | ✅ | Switch color profiles per display via ColorSync |
| Image Adjustment (Gamma/Temperature) | ✅ | Software contrast, color temperature, RGB channels, invert |
| Display Presets | ✅ | Save & restore full display configurations with one click |
| Virtual Display (Dummy) | ✅ | Create headless virtual displays |
| Notch Management | ✅ | Hide the MacBook notch with a black overlay |
| Launch at Login | ✅ | Via SMAppService |
- Screen streaming / PiP — rarely used, adds complexity
- EDID override — requires SIP disabled
- XDR/HDR extra brightness — requires specific hardware
Coming soon
- Download
FreeDisplay.dmgfrom Releases - Open the DMG and drag FreeDisplay.app to Applications
- First launch: right-click → Open (unsigned app, one-time approval)
brew install xcodegen
git clone https://github.com/huberdf/FreeDisplay.git
cd FreeDisplay
xcodegen generate
xcodebuild -scheme FreeDisplay -configuration Release build| Permission | Why |
|---|---|
| Accessibility | Required for brightness key interception on external displays |
No internet connection required (except optional update checks via GitHub Releases API).
- Swift 6 + SwiftUI (MenuBarExtra)
- IOKit — DDC/CI I2C for hardware brightness/contrast
- CoreGraphics — Display enumeration, resolution, arrangement
- ColorSync — ICC color profile management
- CGVirtualDisplay — Virtual display creation (private API, macOS 14+)
- CoreDisplay — Built-in display brightness reading (private API, via dlopen)
- Zero third-party dependencies
FreeDisplay/
├── App/ # AppDelegate, app entry point
├── Models/ # DisplayInfo, DisplayMode, DisplayPreset
├── Services/ # System-level services (DDC, brightness, resolution, gamma, etc.)
└── Views/ # SwiftUI views for each feature section
FreeDisplay sits in your menu bar and talks directly to your displays:
- External monitors: Uses DDC/CI protocol over I2C (Intel) or IOAVService (Apple Silicon) to control hardware brightness, contrast, and other settings
- Built-in display: Uses CoreGraphics gamma tables for software brightness adjustment
- Brightness keys: Installs a CGEventTap to intercept keyboard brightness keys and route them to the display under your mouse cursor
- Auto brightness: Polls the built-in display brightness via CoreDisplay private API and proportionally adjusts external displays
- HiDPI: Creates virtual displays via CGVirtualDisplay private API, or writes display override plists for persistent HiDPI
Issues and PRs welcome. This project uses:
xcodegenfor project generation (editproject.yml, not.xcodeproj)- Swift 6 with
SWIFT_STRICT_CONCURRENCY: minimal - MVVM architecture (View → ViewModel → Service)
MIT License — see LICENSE for details.
- Inspired by BetterDisplay, MonitorControl, and Lunar
- CGVirtualDisplay bridging header based on Chromium's virtual_display_mac_util.mm