A lightweight, native macOS menu-bar app for switching display resolutions on Apple Silicon Macs.
- Menu-bar only — no Dock icon, always one click away.
- All displays — built-in and external monitors listed automatically.
- Smart labels — model name + serial for disambiguation of identical monitors.
- One-click switch — pick a resolution and it applies immediately.
- 10-second safety revert — if you can’t see or dismiss the confirmation dialog, the previous resolution is restored automatically.
- Hot-plug aware — displays added or removed update the menu in real time.
- HiDPI badge — Retina modes clearly marked.
| Requirement | Value |
|---|---|
| macOS | 14.0 (Sonoma) or later |
| Architecture | Apple Silicon (arm64) |
| Xcode | 15.0+ |
- Open
SlighRes.xcodeprojin Xcode 15+. - Select the SlighRes scheme and My Mac destination.
- Product → Run (⌘R).
- The app appears as a display icon (🖥) in the menu bar.
xcodebuild -project SlighRes.xcodeproj \
-scheme SlighRes \
-configuration Release \
-arch arm64 \
buildThe built .app bundle lands in the derived-data build directory.
If you prefer SPM over the Xcode project, create a Package.swift at the
repo root:
// swift-tools-version:5.9
import PackageDescription
let package = Package(
name: "SlighRes",
platforms: [.macOS(.v14)],
targets: [
.executableTarget(
name: "SlighRes",
path: "SlighRes/Sources",
resources: [
.process("../Resources/Assets.xcassets")
]
)
]
)Then swift build.
SlighRes/
├── Sources/
│ ├── App/
│ │ └── SlighResApp.swift # @main entry, MenuBarExtra + Settings
│ ├── Models/
│ │ ├── DisplayInfo.swift # Per-display model
│ │ └── DisplayMode.swift # Per-resolution model
│ ├── Services/
│ │ ├── DisplayService.swift # CoreGraphics wrapper
│ │ └── RevertSafetyManager.swift # 10-sec countdown + revert
│ ├── ViewModels/
│ │ └── DisplayViewModel.swift # @Observable state
│ └── Views/
│ ├── MenuBarView.swift # Main dropdown UI
│ └── SettingsView.swift # Preferences window
├── Resources/
│ └── Assets.xcassets/ # App icon, accent colour
├── Info.plist
└── SlighRes.entitlements
- On launch the app enumerates active displays via
CGGetActiveDisplayList. - For each display it reads modes with
CGDisplayCopyAllDisplayModesand filters to usable, deduplicated modes. - The menu shows each display as a section; clicking a mode calls
CGConfigureDisplayWithDisplayMode. - After a switch,
RevertSafetyManagershows anNSAlertwith a 10-second countdown. If the user doesn’t click Keep, the previous mode is restored. - A
CGDisplayReconfigurationCallbackfires whenever displays are connected, disconnected, or reconfigured — the menu refreshes automatically.
See docs/SIGNING.md for details. TL;DR:
- For personal use, ad-hoc signing is fine:
codesign --force --deep --sign - SlighRes.app
- For sharing, sign with a Developer ID certificate and notarize with
notarytool.
Personal use. No warranty.