A cross-platform desktop app for controlling monitor brightness, contrast, dark mode, and volume -- all from one system tray popup. Works with both built-in laptop displays and external monitors via DDC/CI. Supports macOS, Windows, and Linux.
Grab the latest release from the Releases page.
| Platform | File |
|---|---|
| macOS Apple Silicon (ARM64) | Display DJ_x.x.x_aarch64.dmg |
| macOS Intel (x64) | Display DJ_x.x.x_x64.dmg |
| Windows (x64) | Display DJ_x.x.x_x64-setup.exe / .msi |
| Linux (x64) | Display DJ_x.x.x_amd64.deb / .AppImage |
- Monitor brightness -- one slider for all monitors, or expand for individual control
- Monitor contrast -- DDC contrast control for external monitors (enable in Settings)
- Dark mode toggle -- system-wide dark/light switch
- Volume control -- system volume slider with mute indicator
- Night mode schedule -- auto-set brightness and dark/light mode on a time schedule (e.g., dim at 9 PM, bright at 7 AM)
- Settings panel -- in-app UI for min brightness, show/hide contrast, monitor config, night mode schedule, and launch at login
- Global keyboard shortcuts -- work even when the app isn't focused (configurable via settings or
preferences.json) - Monitor renaming -- click a display name to rename it
- Profiles -- save and apply preset combinations of brightness, contrast, dark mode, and volume
- System tray app -- lives in your menu bar / system tray, no dock/taskbar clutter
Prerequisites: Node.js 18+, Rust 1.77+
git clone <repo-url>
cd display-dj2
npm install
npx tauri devThe first build takes a few minutes while Rust compiles from source. After that, incremental builds take ~5-15 seconds.
The app appears in your system tray (not as a regular window):
- macOS: menu bar, top-right
- Windows: system tray, bottom-right (click
^if hidden) - Linux: top panel (may need the AppIndicator extension)
Platform-specific dependencies (external monitor tools, Tauri build libraries, etc.) are covered in CONTRIBUTING.md.
| Command | What it does |
|---|---|
npx tauri dev |
Run the full app in dev mode with hot reload |
npx tauri build |
Production build (binary + installer) |
npm test |
Run frontend tests |
cd src-tauri && cargo test |
Run backend tests |
Config files live in ~/Library/Application Support/display-dj/ (macOS), %APPDATA%\display-dj\ (Windows), or ~/.config/display-dj/ (Linux).
preferences.json-- keyboard shortcuts, min brightness, night mode schedule, profiles, per-monitor metadata (labels, sort order)
| Keys | Command |
|---|---|
| Shift + Escape | Toggle Dark Mode |
| Shift + F1 | Brightness 10% + Dark Mode |
| Shift + F2 | Brightness 100% + Light Mode |
| Shift + F3-F5 | Brightness 0% / 50% / 100% |
| Shift + F10-F12 | Volume 0% / 10% / 100% |
- Not every external monitor supports DDC/CI (some budget models and certain HDMI connections)
- Built-in HDMI on base M1/M2 Macs doesn't support DDC/CI -- use USB-C/DisplayPort
- Linux global shortcuts may not work under Wayland (X11 works fine)
See CONTRIBUTING.md for the full development setup (per-platform), project structure, testing, and platform guides. See DEV.md for the architecture deep-dive: request lifecycle, layer-by-layer breakdown, data flow diagrams, and "where to edit" reference.
Use the Issues page. Please include your OS version, monitor model(s), and connection type.
Display and dark mode operations are handled by the display-dj CLI, which runs as a bundled HTTP server sidecar. The correct version is downloaded automatically during the build (via build.rs).
To manually download or build from source, see the display-dj CLI releases and the sidecar setup guide.
Tauri v2 (Rust) + React 18 + TypeScript + Vite 6 + display-dj CLI