brightctrl --version

brightctrl 0.2.3

brightctrl logo

brightctrl

Monitor brightness, straight from your terminal.

Adjust the brightness of your external monitors without leaving the keyboard. A single native binary — no ddcutil, no Node.js, no runtime dependencies. Linux talks DDC/CI directly over i2c; Windows uses the Monitor Configuration API.

npx brightctrl

# or grab a binary from the latest release

brightctrl
The brightctrl terminal interface listing three external monitors with their i2c devices, aliases, and brightness bars set to 50 percent

brightctrl --help

Description

  • One native binary — no ddcutil, no Node.js, no runtime deps.
  • DDC/CI straight over i2c on Linux; Monitor Configuration API on Windows.
  • A TUI when you want one, a CLI when you're scripting.
  • Name a monitor once, then target it by alias instead of an id.
  • Sync every monitor at once, or drop to 1% steps.
  • Config is plain TOML at ~/.config/brightctrl/config.toml.

Commands

brightctrl
open the interactive TUI
brightctrl list
monitors with ids, aliases, brightness
brightctrl get <target>
print brightness (0-100)
brightctrl set <target> <0-100>
set brightness
brightctrl alias <id> <name>
name a monitor
brightctrl alias <id>
remove the alias

# <target> is a monitor number (1), an id (GSM7707), or an alias (left).

# press ? in the TUI

Keys
↑ ↓ / k j
Pick a monitor
← → / h l
Brightness down / up
1 – 9
Select monitor by number
/
Type an exact value (0-100)
p
Precise mode — 1% steps
s
Sync — all monitors at once
m
Set brightness to 0
r
Refresh monitor list
?
Help
q
Quit

Install

npm / npxLinux & Windows, x64
npx brightctrl
Arch (AUR)
yay -S brightctrl
ScoopWindows
scoop install brightctrl
WinGetWindows
winget install shahriyardx.brightctrl
Cargofrom source
cargo install --git https://github.com/shahriyardx/brightctrl
Linux setup

# DDC/CI needs the i2c module and group access — once.

sudo modprobe i2c-dev
echo i2c-dev | sudo tee /etc/modules-load.d/i2c.conf
sudo usermod -aG i2c $USER   # then log out and back in

# On Windows: nothing to do — just enable DDC/CI in your monitor’s OSD if list comes up empty.

Config
# ~/.config/brightctrl/config.toml
[aliases]
GSM7707 = "left"
27M2N5500 = "main"
LG-HDR-4K = "up"

# Aliases live here. Set them with brightctrl alias — or edit the file.

cat Cargo.toml

Rust · ratatui · clap · ddc · serde · toml — Linux i2c and the Windows Monitor Configuration API, from one source tree. MIT.