| Crates.io | protontool |
| lib.rs | protontool |
| version | 0.1.3 |
| created_at | 2025-12-14 17:59:42.25988+00 |
| updated_at | 2025-12-19 14:51:45.631068+00 |
| description | A tool for configuring Wine/Proton prefixes to be used with Proton/Steam |
| homepage | |
| repository | https://github.com/nullorigin/protontool |
| max_upload_size | |
| id | 1984788 |
| size | 692,834 |
A comprehensive tool for managing Wine/Proton prefixes with built-in component installation (DLLs, fonts, runtimes), custom verb creation, intelligent error detection, and Steam game integration.
cargo build --release
The binaries will be placed in target/release/:
protontool - Main CLI toolprotontool-launch - Launch Windows executablesprotontool-desktop-install - Install desktop shortcutsprotontool APPID <verb> [verb...]
protontool -s GAME_NAME
protontool -l
protontool --gui
protontool --prefix ~/MyPrefix # Manage existing prefix
protontool --prefix ~/MyPrefix vcrun2022 # Install verbs to prefix
protontool --create-prefix ~/MyPrefix --proton 'Proton 9.0'
protontool --create-prefix ~/MyPrefix --proton 'Proton 9.0' --arch win32
protontool --delete-prefix ~/MyPrefix
protontool -c "wine myapp.exe" APPID
protontool-launch /path/to/app.exe
protontool-launch --appid APPID /path/to/app.exe
Create your own installation verbs using TOML files in ~/.protontool/verb/.
[verb]
name = "myapp"
description = "Install My Application"
category = "apps"
[[actions]]
type = "download"
url = "https://example.com/installer.exe"
filename = "installer.exe"
[[actions]]
type = "run"
executable = "installer.exe"
args = ["/S"]
[verb]
name = "tweaks"
description = "Apply performance tweaks"
category = "settings"
[[actions]]
type = "reg"
path = "HKCU\\Software\\Wine\\Direct3D"
name = "UseGLSL"
value = "enabled"
| Action | Description |
|---|---|
download |
Download a file from URL |
run |
Execute a Windows program |
copy |
Copy files to prefix |
reg |
Set registry values |
override |
Set DLL overrides |
winecfg |
Apply winecfg settings |
Protontool automatically logs all Wine output and detects known errors:
~/.protontool/log/┌─ wine ─────────────────────────────────────────
│ Code: WINE-SEH-NODLL
│ Details: DLL not found - missing dependency
└────────────────────────────────────────────────
Custom paths can be set at compile time using feature flags and environment variables:
# Custom Steam directory
protontool_DEFAULT_STEAM_DIR=/custom/steam \
cargo build --features custom_steam_dir
# Custom GUI provider (yad or zenity)
protontool_DEFAULT_GUI_PROVIDER=yad \
cargo build --features custom_gui_provider
# Custom Steam Runtime path
protontool_STEAM_RUNTIME_PATH=/custom/runtime \
cargo build --features custom_steam_runtime
| Variable | Description |
|---|---|
STEAM_DIR |
Path to custom Steam installation |
PROTON_VERSION |
Name of preferred Proton installation |
WINE |
Path to custom wine executable |
WINESERVER |
Path to custom wineserver executable |
STEAM_RUNTIME |
0 = disable, 1 = enable, or path to custom runtime |
protontool_GUI |
GUI provider (yad or zenity) |
| Variable | Description |
|---|---|
STEAM_APPID |
App ID of the current game |
STEAM_APP_PATH |
Path to the game's installation directory |
PROTON_PATH |
Path to the Proton installation |
Protontool uses ~/.protontool/ for all user data:
~/.protontool/
├── verb/ # Custom verb TOML files
├── pfx/ # Custom (non-Steam) prefixes
├── tmp/ # Temporary downloads
└── log/ # Log files with rotation
src/
├── main.rs # protontool entry point
├── lib.rs # Library root
├── bin/
│ ├── launch.rs # protontool-launch binary
│ ├── desktop_install.rs # Desktop shortcut installer
│ └── wine_extract.rs # Dev tool for Wine source extraction
├── cli/
│ ├── mod.rs # CLI logic, GUI handlers, verb creator
│ └── util.rs # Argument parsing
├── config.rs # Configuration and path defaults
├── gui.rs # Zenity/YAD dialog wrappers
├── log.rs # Logging with error detection
├── wine_data.rs # Auto-generated Wine debug data
├── steam.rs # Steam installation detection
├── util.rs # Utilities (shell_quote, which, etc.)
├── vdf/
│ ├── mod.rs
│ ├── parser.rs # Valve Data Format parser
│ └── vdict.rs # VDF dictionary structure
└── wine/
├── mod.rs # Wine module root, WineContext
├── prefix.rs # Prefix initialization (copies from default_pfx)
├── verbs.rs # Built-in verb registry
├── custom.rs # Custom TOML verb loader
├── registry.rs # Windows registry operations
├── download.rs # File download utilities
└── util.rs # Wine utilities
A development tool to extract debug information from Wine/Proton source code and regenerate wine_data.rs:
# Build and run wine-extract
cargo run --bin wine-extract -- \
--wine-path /path/to/wine \
--output src/wine_data.rs \
protontool
# Or regenerate all data
cargo run --bin wine-extract -- \
--wine-path /path/to/wine \
--output src/wine_data.rs \
all
This extracts:
Use this when Valve updates their Wine fork to pick up new debug channels.
zenity or yad (for GUI dialogs)curl or wget (for verb downloads)MIT