A lightning fast game launcher for eXoDOS, eXoWin3x, and eXoWin9x collections mounted locally. Runs on Linux, macOS, and Windows. Browse, search, and launch 7,600+ DOS games, 1,140+ Windows 3.x games, and 635+ Windows 9x games with DOSBox and 86Box integration within a couple of seconds. Sub-second filtering/searching, local game caching with on-the-fly ZIP extraction, and automatic config adaptation for cached game copies.
- CLI interface with 7 subcommands:
list,run,info,cache,config,scan,resolve - TUI interface (default) with fuzzy search, sortable/scrollable game list, game details panel, an in-app settings screen, and a per-game config override editor
- DOSBox and 86Box auto-detection across native installs, Flatpak, and Snap (Linux), Homebrew/.app (macOS), or Program Files/PATH (Windows)
- Multi-collection support for eXoDOS (DOS), eXoWin3x (Windows 3.x), and eXoWin9x (Windows 9x) with per-platform filtering
- Auto-extraction of XML catalog, game metadata, and game data from eXoDOS/eXoWin3x/eXoWin9x zips
- Binary index caching for fast startup with large catalogs (bincode serialization)
- Game file caching with zip extraction and recursive copy support
- Win3.1 base sharing via hardlinks — a shared Windows 3.1 base is extracted once and hardlinked into each Win3x game cache, saving significant disk space
- Win9x VHD parent sharing — shared 86Box/DOSBox-X parent virtual disks (~2 GB) are extracted once and hardlinked (or copy-on-write reflinked, on filesystems that support it) into a small per-game child VHD at launch
- Config adaptation rewrites relative paths in DOSBox conf and 86Box cfg files for cached game copies, confined to the cache directory
- A DOSBox variant: DOSBox-X (recommended), DOSBox Staging, or classic DOSBox
- An eXoDOS v6 collection (mounted locally or, if you prefer, extracted)
- Optionally, an eXoWin3x collection for Windows 3.x games
- Optionally, an eXoWin9x collection for Windows 9x games — needs 86Box (preferred) or DOSBox-X (fallback for some titles)
- Install a DOSBox variant (DOSBox-X recommended), and 86Box if you have an eXoWin9x collection
- Mount (preferred) or extract (why?!) your eXoDOS v6 collection
- Install eisoDOS:
make install(Linux/macOS) orcargo install --path crates/eisodos(all platforms) - Configure: set
source_pathin your config file to your eXoDOS directory (and optionallywin3x_source_pathfor eXoWin3x,win9x_source_pathfor eXoWin9x)- Linux/macOS:
~/.config/eisodos/config.toml - Windows:
%APPDATA%\eisodos\config.toml
- Linux/macOS:
- Run:
eisodos
# Show config file location and current settings
eisodos config show
# Edit the config file
# Set source_path to your eXoDOS root directory
$EDITOR ~/.config/eisodos/config.toml # Linux/macOS
notepad %APPDATA%\eisodos\config.toml # WindowsExample config.toml:
# Linux/macOS
source_path = "/mnt/exodos"
win3x_source_path = "/mnt/exowin3x" # optional
win9x_source_path = "/mnt/exowin9x" # optional
# Windows (mapped network drive or local path)
source_path = "Z:\\eXoDOS"
win3x_source_path = "Z:\\eXoWin3x" # optional
win9x_source_path = "Z:\\eXoWin9x" # optionaleisodos will automatically:
- Extract the XML catalog from
Content/XODOSMetadata.zip(Content/XOWin3xMetadata.zipfor Win3x,Content/XOWin9xMetadata.zipfor Win9x) - Extract game metadata from
Content/!DOSmetadata.zip(Content/!Win3Xmetadata.zip,Content/!Win9Xmetadata.zip) on demand - Extract game data from
eXo/eXoDOS/*.zip(eXo/eXoWin3x/*.zip,eXo/eXoWin9x/<year>/*.zip) when launching games - For Win3x games, create a shared Windows 3.1 base and hardlink common files to save disk space
- For Win9x games, extract shared 86Box/DOSBox-X parent VHDs once and hardlink (or CoW-reflink) them into each game's cache
Other optional settings — editable in the TUI settings screen (F2) or directly in the TOML:
| Field | Purpose |
|---|---|
preferred_dosbox |
Force a specific DOSBox variant instead of auto-priority (dosbox-x > staging > classic) |
dosbox_path |
Explicit path to a DOSBox executable; skips auto-detection |
eighty_six_box_path |
Explicit path to an 86Box executable; preferred for Win9x games |
mt32_rom_dir |
Directory with MT-32 ROM/SoundCanvas files, rewritten into DOSBox conf for MT-32 sound |
If your eXoDOS collection lives on a NAS or network share, mount it first.
Linux (SMB)
sudo mount -t cifs //nas/exodos /mnt/exodos -o username=USER,uid=$(id -u),gid=$(id -g)To mount at boot, add to /etc/fstab:
//nas/exodos /mnt/exodos cifs username=USER,password=PASS,uid=1000,gid=1000 0 0
Linux (NFS)
sudo mount -t nfs nas:/volume1/exodos /mnt/exodosTo mount at boot, add to /etc/fstab:
nas:/volume1/exodos /mnt/exodos nfs defaults 0 0
macOS
Open Finder, press Cmd+K, and enter smb://nas/exodos or nfs://nas:/volume1/exodos. The share appears under /Volumes/exodos.
Or via terminal:
# SMB
mount_smbfs //USER@nas/exodos /Volumes/exodos
# NFS
sudo mount -t nfs nas:/volume1/exodos /Volumes/exodosWindows
Map a network drive in File Explorer (right-click "This PC" > "Map network drive") to \\nas\exodos, or via command line:
net use Z: \\nas\exodos /persistent:yesThen set source_path in your config to the mount point (/mnt/exodos, /Volumes/exodos, or Z:\eXoDOS).
eisodos scanThis parses the LaunchBox XML and creates a binary index for fast lookups.
eisodos resolveShows all detected DOSBox and 86Box installations and which one is selected.
eisodosOpens a terminal UI with:
- Search: Type to fuzzy-search game titles (always active)
- Navigate: Up/Down arrow keys, PageUp/PageDown (jump 20), Home/End
- Launch: Enter to run selected game
- Sort: Tab to cycle sort order
- Platform filter: Ctrl+P to cycle All → DOS → Win3x → Win9x → All
- Cached-only filter: Ctrl+F to show only cached games
- Delete cache: Delete key or Ctrl+D to remove cached game files
- Settings: F2 to edit source paths, preferred DOSBox, MT-32 dir, and other config in-app
- Per-game config editor: F3 to override a game's DOSBox conf/86Box cfg fields (F4 opens it in your external
$EDITOR) - Clear search: Esc
- Quit: Ctrl+Q or Ctrl+C
eisodos list # List all games (DOS + Win3x + Win9x)
eisodos list "doom" # Fuzzy search for games
eisodos list --platform dos # List DOS games only
eisodos list --platform win3x # List Win3x games only
eisodos list --platform win9x # List Win9x games only
eisodos info "DOOM" # Show game details
eisodos run "DOOM" # Launch a game
eisodos run "Minesweeper" --platform win3x # Launch a Win3x game
eisodos scan # Rebuild the game index
eisodos resolve # Show DOSBox/86Box installations
eisodos config show # Show configuration
eisodos config path # Print config file path
eisodos cache list # List cached games
eisodos cache remove <game-id> # Remove a game from cache
eisodos cache clear # Clear entire cache
eisodos cache update # Re-adapt DOSBox/86Box configs for all cached games
eisodos cache clear-bases # Remove shared Win3.1/Win9x base files (VHD parents)<exodos_root>/
xml/all/MS-DOS.xml <- Game catalog (auto-extracted from XODOSMetadata.zip)
eXo/eXoDOS/
!dos/<game_folder>/ <- Game metadata (auto-extracted on demand)
dosbox.conf
*.bat
<game>.zip <- Game data (auto-extracted on launch)
Content/
XODOSMetadata.zip <- Source for catalog XML
!DOSmetadata.zip <- Source for game metadata
<exowin3x_root>/
xml/Windows 3x.xml <- Game catalog (auto-extracted from XOWin3xMetadata.zip)
eXo/eXoWin3x/
!win3x/<game_folder>/ <- Game metadata (auto-extracted on demand)
dosbox.conf
*.bat
<game>.zip <- Game data (each contains a full Windows 3.1 install)
Content/
XOWin3xMetadata.zip <- Source for catalog XML
!Win3Xmetadata.zip <- Source for game metadata
Win3x games run Windows 3.1 inside DOSBox. Each game zip includes a full Windows 3.1 installation (~243 files), but eisodos optimizes this by extracting a shared base once and hardlinking common files into each game's cache directory.
<exowin9x_root>/
xml/all/1994-1996.9x <- Game catalog (auto-extracted from XOWin9xMetadata.zip)
eXo/eXoWin9x/
!win9x/<year>/<game_folder>/ <- Game metadata (auto-extracted on demand)
Play.cfg (86Box) or Play.conf (DOSBox-X)
*.bat
<year>/<game>.zip <- Game data: VHD + media (auto-extracted on launch)
eXo/util/
utilWin9x.zip <- Shared 86Box/DOSBox-X parent VHDs (nested zip)
Content/
XOWin9xMetadata.zip <- Source for catalog XML
!Win9Xmetadata.zip <- Source for game metadata
Win9x games run inside 86Box (preferred) or DOSBox-X (fallback) using a VHD parent/child differencing setup: shared parent VHDs (~2 GB total, each a full Windows 9x install) are extracted once and hardlinked — or copy-on-write reflinked, on filesystems that support it — into a small per-game child VHD at launch.
cargo build --releaseThe binary is at target/release/eisodos.
# Linux/macOS
make install # Installs to ~/.local/bin/eisodos
sudo make install PREFIX=/usr/local # System-wide install
# All platforms (via cargo)
cargo install --path crates/eisodosscripts/release.sh 0.3.0 # accepts v0.3.0 tooThis bumps the version in both Cargo.toml files, commits, creates an annotated git tag, and pushes everything. The binary's --version output is derived from the git tag at build time via build.rs, so it always stays in sync.
Two-crate workspace:
- eisodos-core - Library with game catalog parsing (eXoDOS + eXoWin3x + eXoWin9x), DOSBox/86Box resolver, game runner, cache management, and configuration
- eisodos - Binary with CLI (clap) and TUI (ratatui/crossterm), supporting per-platform filtering, an in-app settings screen, and per-game config overrides
- The TUI holds the full merged game list (DOS + Win3x + Win9x) in memory for the session. Acceptable at the current catalog size (~9,000 games) but not index-backed.
- MT-32/SoundFont paths (.\mt32) in some DOSBox configs may not resolve if the shared MT-32 files are not in the game cache.
- Win9x launches copy (or CoW-reflink, on filesystems that support it) a shared parent VHD into a per-game child VHD every launch. On non-CoW filesystems (e.g. ext4) this is a ~350-450 MB copy per launch, adding a few seconds of I/O.
MIT License. See LICENSE for details.