protondl is a modern, headless Python library for downloading and managing compatibility tools (like GE-Proton, Proton-Tkg, DXVK, and vkd3d-proton) for Steam, Lutris, and other Linux game launchers.
Inspired by the logic of ProtonUp-Qt, protondl decouples the core management logic from the GUI, providing a modular and developer-friendly API for automation, CLI tools, or custom integrations.
The goal of this project is to port all functionality from ProtonUp-Qt into a headless library that is indepenent from the Qt GUI to allow for future use in different projects. This is more of a side project that I will work on here and there. Please use ProtonUp-Qt instead for managing your compatibility tools!
- Launcher Discovery: Automatically detects Native, Flatpak, and Snap installations of Steam and other launchers.
- Modular Architecture: Easily extendable for new compatibility tools or launchers.
- Async-First: Built with httpx and asyncio for non-blocking downloads.
- Headless by Design: No Qt/GUI dependencies in the core library.
- Modern Tooling: Powered by uv, ruff, and mypy for a rock-solid developer experience.
| Tool Type | Steam | Lutris | Heroic Games Launcher | Bottles |
|---|---|---|---|---|
| ⚛️ Proton | ✅ | ✅ | ✅ | ✅ |
| 🍷 Wine | ❌ | ✅ | ✅ | ✅ |
| 🇽 VKD3D | ❌ | ✅ | ✅ | ❌ |
| 9️⃣ DXVK | ❌ | ✅ | ✅ | ❌ |
- GE-Proton (Proton)
- Wine-Tkg (Wine)
- Proton-Tkg (Proton)
- DXVK (DXVK)
- DXVK Async (DXVK)
- DXVK (nightly) (DXVK)
- vkd3d-proton (VKD3D)
uv tool install "protondl[cli] @ git+https://github.com/DavidoTek/protondl@main"
uvx run protondl-
List your launchers to find your target ID:
protondl list-launchers
-
List compatibilty tools available for the launcher:
protondl list-tools 1
-
Find available versions for a tool:
protondl list-versions GE-Proton
-
Install it. Provide the launcher id, tool, version, and optionally the architecture:
protondl install 1 GE-Proton GE-Proton11-3 --arch x86_64
-
List installed games, the compatibility tools used by them, and the areweanticheatyet.com, ProtonDB and Steam Deck status:
protondl list-games 1 --awacy --protondb --deck-status
-
Automatically update all compatibility tools to the newest version:
protondl update-all 1 --yes-install --yes-batch-update
import asyncio
from protondl.launchers import detect_all_launchers
from protondl.installers.ge_proton import GEProtonInstaller
async def main():
# Detect Steam -> add more checks here since there can be multiple launchers
launchers = detect_all_launchers()
steam = launchers[0]
# Initialize Installer
ge = GEProtonInstaller()
# Install latest GE-Proton
await ge.install(version="latest", launcher=steam)
asyncio.run(main())protondl uses the uv package manager for high-performance dependency management.
-
Clone and Install
git clone https://github.com/DavidoTek/protondl.git cd protondl uv sync uv run protondl --help -
Code Quality & Standards
We use Ruff for linting/formatting and Mypy for strict type checking.
- Format code:
uv run ruff format . - Lint code:
uv run ruff check --fix . - Type check:
uv run mypy src tests - Unit tests:
uv run pytest tests
- Format code:
-
Pre-commit Hooks
Ensure your code is compliant before every commit:
uv run pre-commit install
src/protondl/
├── cli/ # Rich-powered terminal interface
├── core/ # Abstract Base Classes and Enums (The Contract)
├── installers/ # Tool-specific logic (GE-Proton, Luxtorpeda)
├── launchers/ # Launcher discovery (Steam, Lutris, etc.)
├── services/ # Online service (AWACY, ProtonDB)
└── util/ # Utility functions (downloads, etc.)
The project was originally inspired by AUNaseef's protonup for which I created an initial GUI. Since the library didn't have the necessary features and upstreaming was slow, I started with the development of ProtonUp-Qt. Thanks to the many ProtonUp-Qt contributers, the project was able to grow and become as feature rich as it is today. While ProtonUp-Qt is well working, the original idea of having a headless library and a separate GUI was lost. This is where protondl comes in. The idea is to port the features of ProtonUp-Qt into a headless library, featuring modern CLI and API interfaces.
protondl is a library for downloading community-provided compatibility tools for Linux gaming. Please note that protondl is neither affiliated with nor liable for the compatibility tools provided by the individual authors. For downloading the compatibility tools, protondl uses the official APIs of the platforms used for hosting the compatibility tools. Please read and agree to the terms of service and data privacy policy of the platforms before using protondl. Use protondl at your own risk.
The following services and data sources are used by protondl:
- GitHub (API) for downloading compatibility tool releases
- GitLab (API) for downloading compatibility tool releases
- areweanticheatyet.com via GitHub API
- ProtonDB