A fork of huberdf/FreeDisplay — a free & open-source alternative to BetterDisplay.
All credit for the original app goes to @huberdf. This fork adds three things and is otherwise unchanged.
Download · Original project · Report an issue
On macOS 26 the menu bar icon appears but the panel opens completely blank, which
makes the app unusable. MenuBarExtra(.window) proposes an indefinite size and the
panel's unconstrained ScrollView collapses to zero height. Giving it a definite
height fixes it.
Use an iPad as a vertical display over Sidecar.
Sidecar itself cannot be rotated — CGDisplayRotation is read-only, macOS shows no
Rotation control for Sidecar displays, and physically turning the iPad just makes
iPadOS crop the picture. So this doesn't rotate the Sidecar display. It creates a
portrait virtual display, captures it with ScreenCaptureKit, rotates the frames,
and streams them full-screen to the iPad — which stays locked in landscape. Same
approach as BetterDisplay's rotated Sidecar.
Requires Screen Recording permission. The app lists the prerequisites in the UI.
The original is Chinese-only. This fork moves every string into a String Catalog with English and 简体中文, and adds a language picker in Settings that switches live, without relaunching. It follows your system language by default.
I am not actively developing this fork. It exists because I wanted a vertical iPad display and a menu that wasn't blank. It works for me; I'm sharing it in case it's useful to you.
The menu bar fix and Sidecar portrait mode have been submitted upstream as PR #9 (in Chinese, matching the original project's language). The localization is not part of that PR and lives only here — someone else appeared to be working on localization upstream.
If the upstream project picks up these changes, use it instead of this fork.
Issues and PRs here may go unanswered. Feel free to fork this fork.
-
Download
FreeDisplay.dmgfrom Releases -
Open it and drag FreeDisplay.app to Applications
-
First launch: right-click the app → Open, then confirm.
The build is not signed with an Apple Developer ID and is not notarized, so Gatekeeper blocks a normal double-click. Right-click → Open is the one-time override. If macOS says the app "is damaged", clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/FreeDisplay.app
brew install xcodegen
git clone https://github.com/kimberlake/FreeDisplay.git
cd FreeDisplay
xcodegen generate
xcodebuild -scheme FreeDisplay -configuration Release buildThe project builds with ad-hoc signing by default, so it needs no Apple
Developer account. To sign with your own certificate instead, create
Local.xcconfig in the repo root (it's gitignored):
CODE_SIGN_IDENTITY = Apple Development
CODE_SIGNING_REQUIRED = YES
DEVELOPMENT_TEAM = YOURTEAMID
Worth knowing: macOS ties permissions to the code signature, and an ad-hoc signature changes on every build — so Screen Recording may need re-approving after each rebuild. A real certificate keeps it stable.
| Permission | Why |
|---|---|
| Accessibility | Required for brightness key interception on external displays |
| Screen Recording | Required for Sidecar portrait mode (captures the virtual display to stream it) |
No internet connection required (except optional update checks via GitHub Releases API).
Please contribute to the original project rather than this fork — this one is not actively maintained.
The codebase 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.
- Original app by @huberdf — this is only a fork
- Inspired by BetterDisplay, MonitorControl, and Lunar
- CGVirtualDisplay bridging header based on Chromium's virtual_display_mac_util.mm