FreeDisplay
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
What BetterDisplay Features Does This Replace?
| 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 |
Not Included (intentionally)
- Screen streaming / PiP — rarely used, adds complexity
- EDID override — requires SIP disabled
- XDR/HDR extra brightness — requires specific hardware
Screenshots
Coming soon
Installation
Option 1: Download DMG
- Download
FreeDisplay.dmg from Releases
- Open the DMG and drag FreeDisplay.app to Applications
- First launch: right-click → Open (unsigned app, one-time approval)
Option 2: Build from Source
brew install xcodegen
git clone https://github.com/huberdf/FreeDisplay.git
cd FreeDisplay
xcodegen generate
xcodebuild -scheme FreeDisplay -configuration Release build
Permissions
| Permission |
Why |
| Accessibility |
Required for brightness key interception on external displays |
No internet connection required (except optional update checks via GitHub Releases API).
Tech Stack
- 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
Project Structure
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
How It Works
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
Contributing
Issues and PRs welcome. This project uses:
xcodegen for project generation (edit project.yml, not .xcodeproj)
- Swift 6 with
SWIFT_STRICT_CONCURRENCY: minimal
- MVVM architecture (View → ViewModel → Service)
License
MIT License — see LICENSE for details.
Acknowledgments
评论