FreeDisplay
Free & open-source alternative to BetterDisplay for macOS. DDC brightness/contrast control, HiDPI virtual displays, display arrangement, color profiles, auto brightness sync, keyboard brightness key interception with native OSD — all core BetterDisplay features, zero cost.
Install / Use
/learn @huberdf/FreeDisplayREADME
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.dmgfrom 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:
xcodegenfor project generation (editproject.yml, not.xcodeproj)- Swift 6 with
SWIFT_STRICT_CONCURRENCY: minimal - MVVM architecture (View → ViewModel → Service)
License
MIT License — see LICENSE for details.
Acknowledgments
- Inspired by BetterDisplay, MonitorControl, and Lunar
- CGVirtualDisplay bridging header based on Chromium's virtual_display_mac_util.mm
Related Skills
node-connect
347.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
