A command-line tool to manage and play DOS games via DOSBox.
Project description
DOSCtl
A command-line tool to manage and play DOS games via DOSBox.
Installation
Requirements: Python 3.8+, DOSBox
# Install DOSBox
brew install dosbox # macOS
sudo apt install dosbox # Ubuntu/Debian
# Install DOSCtl
pip install dosctl
Other install methods
# From GitHub
pip install git+ssh://git@github.com/xesco/dosctl.git
# Development (editable)
git clone git@github.com:xesco/dosctl.git
cd dosctl
pip install -e ".[dev]"
Getting Started
- List games — the game catalog downloads automatically on first run:
dosctl list - Search for a game:
dosctl search "Dune" --sort-by year
- Play a game by its ID. On first run,
dosctldownloads, installs, and asks you to pick the executable:dosctl play <game-id>
Commands
Every game has a unique 8-character ID (shown in list/search output). Use it for all operations.
dosctl list
Lists all available games.
| Flag | Description |
|---|---|
-s, --sort-by [name|year] |
Sort by name or year |
-i, --installed |
Only show installed games |
dosctl search <query>
Searches for games. Query is optional if --year is used.
| Flag | Description |
|---|---|
-y, --year <year> |
Filter by year |
-c, --case-sensitive |
Case-sensitive search |
-s, --sort-by [name|year] |
Sort by name or year |
dosctl play <game-id> [command-parts...]
Runs a game. Downloads and installs it if needed. On first run, prompts for the main executable; the choice is saved for future runs.
You can override the saved executable by passing command parts directly, or use --configure to re-pick interactively:
dosctl play 62ef2769 # Use saved default
dosctl play 62ef2769 --configure # Re-pick executable interactively
dosctl play 62ef2769 setup.exe # Run a specific executable
dosctl play 62ef2769 game.exe -level 5 # Pass arguments to the executable
Some games include floppy-based installers that expect source files on A: and install to C:. Use -a to mount the game directory as both drives:
dosctl play 62ef2769 install.bat C: -a # Run installer with floppy mode
dosctl play 62ef2769 STARCON2/GAME.EXE # Then run the installed game normally
dosctl inspect <game-id>
Shows installed files for a game. Use -e, --executables to show only .exe/.com/.bat files.
dosctl delete <game-id>
Deletes an installed game and its downloaded archive.
dosctl refresh --force
Re-downloads the master game list from the Internet Archive.
Configuration
Data is stored in platform-appropriate directories:
| Platform | Base directory |
|---|---|
| Linux/macOS | ~/.local/share/dosctl/ |
| Windows | %USERPROFILE%\AppData\Local\dosctl\ |
<base-dir>/
downloads/ # Downloaded .zip archives
installed/ # Extracted games
collections/ # Game list cache
Collection Backend
Games are sourced from the Total DOS Collection Release 14 on the Internet Archive. The catalog is downloaded on first use; individual games are downloaded on demand when you run them.
Disclaimer
This tool does not host or distribute any games — it manages content from external sources. You are responsible for ensuring you have legal rights to any content you use. Windows support is experimental; Linux and macOS are the primary platforms.
See LICENSE for the full MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dosctl-1.3.0.tar.gz.
File metadata
- Download URL: dosctl-1.3.0.tar.gz
- Upload date:
- Size: 25.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e245477ad8146d05035fc95592ecd37efca20625b38e2b1daa948a8bc4e429d1
|
|
| MD5 |
4779fbdb107aa70de6d0d05ef5fd2b89
|
|
| BLAKE2b-256 |
f1c0b92056d9686ad24ae32cd296d53a5bda5efad8808dced8ecd03eb1e9d6d9
|
Provenance
The following attestation bundles were made for dosctl-1.3.0.tar.gz:
Publisher:
semantic-release.yml on xesco/dosctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dosctl-1.3.0.tar.gz -
Subject digest:
e245477ad8146d05035fc95592ecd37efca20625b38e2b1daa948a8bc4e429d1 - Sigstore transparency entry: 937924626
- Sigstore integration time:
-
Permalink:
xesco/dosctl@6a8b442c454e1c67cc4b535cf96c7b3c0c7f35e1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/xesco
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
semantic-release.yml@6a8b442c454e1c67cc4b535cf96c7b3c0c7f35e1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file dosctl-1.3.0-py3-none-any.whl.
File metadata
- Download URL: dosctl-1.3.0-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77888b615f82ede97c65593bb0d83eca27f8d48951d44045f647703f35e0bd4f
|
|
| MD5 |
2b1badc9044166dab78f7ca91d7c9160
|
|
| BLAKE2b-256 |
e3dd33340df6a85ea81294c5dec94e5a99e5ce8d4adc3df5b443087ec3d928ea
|
Provenance
The following attestation bundles were made for dosctl-1.3.0-py3-none-any.whl:
Publisher:
semantic-release.yml on xesco/dosctl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dosctl-1.3.0-py3-none-any.whl -
Subject digest:
77888b615f82ede97c65593bb0d83eca27f8d48951d44045f647703f35e0bd4f - Sigstore transparency entry: 937924670
- Sigstore integration time:
-
Permalink:
xesco/dosctl@6a8b442c454e1c67cc4b535cf96c7b3c0c7f35e1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/xesco
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
semantic-release.yml@6a8b442c454e1c67cc4b535cf96c7b3c0c7f35e1 -
Trigger Event:
push
-
Statement type: