A minimal, single-binary CLI for changing display resolution. No dependencies, no installer — just drop the binary in your PATH and go.
| Platform | Support |
|---|---|
| Windows 7 / 8 / 10 / 11 | ✅ via Win32 API |
| Linux amd64 (X11) | ✅ via xrandr |
| Linux amd64 (Wayland) | ✅ via zwlr-output-management protocol |
| Linux arm64 (X11 + Wayland) | ✅ Raspberry Pi 4/5, Asahi Linux, ARM VMs |
| macOS | ✅ via CoreGraphics |
-
Grab
resctl.exefrom the latest release. -
Optionally verify the download against
checksums.txt(also in the release assets):# PowerShell $hash = (Get-FileHash resctl.exe -Algorithm SHA256).Hash.ToLower() $expected = (Select-String resctl.exe checksums.txt).Line.Split()[0] if ($hash -eq $expected) { "OK" } else { "MISMATCH" }
-
Open a terminal in the folder containing the download and run:
.\resctl.exe installThis copies the binary to
%USERPROFILE%\bin\resctl.exeand adds that folder to your userPATH. -
Restart your terminal — you're done.
git clone https://github.com/dever-labs/resctl
cd resctl
.\build.ps1 # installs goversioninfo, embeds resources, builds resctl.exe
.\resctl.exe installX11 requires
xrandr(x11-xserver-utilson Debian/Ubuntu,xorg-xrandron Arch).
Wayland works out of the box — the binary speaks thezwlr-output-management-unstable-v1protocol directly. No extra packages needed. Requires a compositor that implements that protocol (e.g. sway, wayfire, labwc, or any wlroots-based compositor).
-
Grab the binary for your architecture from the latest release:
resctl— amd64 (most desktops/laptops)resctl-linux-arm64— arm64 (Raspberry Pi 4/5, Asahi Linux, ARM cloud VMs)
-
Optionally verify the download against
checksums.txt(also in the release assets):sha256sum -c checksums.txt --ignore-missing # resctl: OK -
Run:
chmod +x resctl ./resctl install
This copies the binary to
~/bin/resctland adds~/binto yourPATHin.bashrc,.zshrc, or.profile. -
Restart your terminal — you're done.
git clone https://github.com/dever-labs/resctl
cd resctl
go build -ldflags="-s -w" -o resctl .
./resctl install-
Grab
resctl-macosfrom the latest release. -
Optionally verify the download against
checksums.txt(also in the release assets):sha256sum -c checksums.txt --ignore-missing # resctl-macos: OK -
Run:
mv resctl-macos resctl chmod +x resctl ./resctl install
This copies the binary to
~/bin/resctland adds~/binto yourPATHin.bash_profile,.zshrc,.config/fish/config.fish, or.profile. -
Restart your terminal — you're done.
git clone https://github.com/dever-labs/resctl
cd resctl
go build -ldflags="-s -w" -o resctl .
./resctl installresctl uninstall
resctl list List all supported resolutions (current marked with *)
resctl get Show the current resolution
resctl set <WxH[@Hz]> Change resolution
resctl toggle [res1 res2 ...] Cycle between resolutions
resctl install Copy binary to ~/bin and add to PATH
resctl uninstall Remove binary from ~/bin
resctl version Print the installed version
Resolution format: WxH or WxH@Hz — e.g. 1920x1080 or 2560x1440@144.
# See everything your monitor supports
resctl list
# What's active right now?
resctl get
# Switch to 1080p (keeps the current refresh rate if available)
resctl set 1920x1080
# Switch to 1440p at 144 Hz explicitly
resctl set 2560x1440@144
# Set up a two-resolution toggle and switch immediately
resctl toggle 1920x1080 2560x1440
# After that, each call to `toggle` cycles to the next entry
resctl toggleToggle state is saved and persists across reboots:
- Windows:
%APPDATA%\resctl\state.json - Linux:
$XDG_CONFIG_HOME/resctl/state.json(defaults to~/.config/resctl/state.json) - macOS:
~/Library/Application Support/resctl/state.json
- Windows — calls
EnumDisplaySettingsWandChangeDisplaySettingsWdirectly. No admin rights required for the primary display. - Linux (X11) — shells out to
xrandr. Targets the primary connected output. Requires an X11 session. - Linux (Wayland) — connects to the Wayland compositor socket and speaks the
zwlr-output-management-unstable-v1protocol natively. No external tools required. The session is detected automatically viaWAYLAND_DISPLAYorXDG_SESSION_TYPE. - macOS — calls CoreGraphics (
CGDisplayCopyDisplayMode,CGDisplayCopyAllDisplayModes, andCGDisplaySetDisplayMode) directly for the main display. No external tools required.
The easiest way to get started is with the included Dev Container — open the repo in VS Code or GitHub Codespaces and everything is set up automatically.
- Go 1.20+
- Windows build:
goversioninfo(go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@latest) - Linux build:
xrandrfor smoke-testing - macOS build: Xcode Command Line Tools for cgo and CoreGraphics
Windows:
.\build.ps1Or manually:
go install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@latest
goversioninfo -64 -o resource.syso # embed icon & version metadata
go build -ldflags="-s -w -X main.version=dev" -o resctl.exe .Linux:
go build -ldflags="-s -w -X main.version=dev" -o resctl .macOS:
go build -ldflags="-s -w -X main.version=dev" -o resctl .Cross-compile for Windows from Linux (Dev Container):
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -X main.version=dev" -o resctl.exe .Tests run without resource.syso present (the test linker cannot handle Windows COFF resource objects):
# Windows
Remove-Item resource.syso -ErrorAction SilentlyContinue
go test ./...# Linux / Dev Container
go test ./...# macOS
go test ./...Tag the commit you want to release, then create a release from the GitHub UI and attach the built binary as an asset:
$env:VERSION = "v1.0.0"
.\build.ps1MIT © Dever Labs