This project automates the process of matching ymir releases with your World of Warcraft client versions and helps you launch the correct ymir executable for your client. Below is a detailed explanation of the main configuration variables and the workflow.
This code is everything but production code or good, anyone is free to submit PRs, open issues or fork it, just for me that I kept opening out-dated ymir than not sniffing anything. Thanks to: @mdx7 for implementing a ymir version parametre and helping figuring out how to get the client's build.
Specifies the name and path for the CSV file where ymir release information will be saved. Example: ymir_versions.csv.
Specifies the name and path for the CSV file that will store client path definitions. Example: pathDefines.csv.
Defines the directory where the ymir executables are located. The script will look here to find and run the correct ymir executable.
Sets the number of threads used by pefile when extracting version information from client executables. Increasing this value may speed up version extraction on powerful hardware.
A dictionary mapping ymir executable names to human-readable client names. Usually, you do not need to modify this.
A dictionary mapping ymir executable names to the paths of your WoW client executables. This is used as a base reference for the code. In the future, this may be loaded from a CSV instead of being hardcoded.
Each entry contains:
- ymir executable name
- WoW client path
- WoW executable name
- Human-readable comment (for code and CSV)
- Version column (automatically extracted from the client)
Install the required Python packages:
pip install -r requirements.txtTo run the script:
ymir_launcher.py-
Fetches ymir Releases:
- Retrieves the list of ymir releases from GitHub, including their names (for readability) and supported builds.
- Saves this information to a CSV file (default:
ymir_versions.csv).
-
Checks Executable Versions:
- For each ymir executable, runs it with
--versionto determine its version. - If the command fails or times out, the
Current Versioncolumn in the CSV is set to "No --version output". - The CSV will have:
Version: The version from the GitHub releaseCurrent Version: The version found from the local executable
- For each ymir executable, runs it with
-
Generates
pathDefines.csv:- Creates a CSV listing each ymir executable, the WoW client path, executable name, and a human-readable name.
- Checks all defined paths; if a client version is found, it is added to the
versioncolumn (this process may take a few seconds to several minutes depending on your hardware).
TODO: Actual ask or check if the path already exist and to use the python or csv one (allowing easier editing.)
-
Matches Versions:
- Compares the
versioncolumn inpathDefines.csvwith theCurrent Versioninymir_versions.csv. - If they match, the client is considered up-to-date and will be displayed in the selection list.
Example selection menu:
1 - Classic Era 2 - MoP Classic 3 - TBC Classic 4 - Retail Q - Quit - Compares the
-
Launching ymir:
- After selecting a version, the script clears the respective client's cache and launches the corresponding ymir executable.
- You must still launch the WoW client manually through Battle.net.
- This process ensures your client and ymir versions are matched and up-to-date.
- Make sure your WoW client is updated before running this script for best results.
Examples/
├── pathDefines.csv
└── ymir_versions.csv
ymir/ (not included in this repo)
├── ymir_classic_era.exe
├── ymir_classic_era_ptr.exe
├── ymir_classic_mop.exe
├── ymir_classic_mop_ptr.exe
├── ymir_classic_tbc.exe
├── ymir_classic_tbc_ptr.exe
├── ymir_classic_titan.exe
├── ymir_ptr.exe
└── ymir_retail.exe
Click to see how it fully looks on run-time
> ymir-python-script> python ymir_launcher.py
---------------------------------------------------------------------------------------
# Name Version Github Date Added Date
---------------------------------------------------------------------------------------
1 Retail 12.0.1.66838 2026-02-10T20:12:37Z 2026-04-21T15:11:17.560625+00:00
2 Retail PTR 12.0.1.65769 2026-02-10T20:12:37Z 2026-04-21T15:11:17.560625+00:00
3 MoP Classic 5.5.3.66839 2025-12-09T22:27:14Z 2026-04-21T15:11:17.560625+00:00
4 MoP Classic PTR 5.5.3.66382 2025-12-09T22:27:14Z 2026-04-21T15:11:17.560625+00:00
5 Titan Classic 3.80.1.66991 2026-04-10T12:25:44Z 2026-04-21T15:11:17.560625+00:00
6 TBC Classic 2.5.5.66765 2025-12-06T12:30:05Z 2026-04-21T15:11:17.560625+00:00
7 TBC Classic PTR 2.5.5.65000 2025-12-06T12:30:05Z 2026-04-21T15:11:17.560625+00:00
8 Classic Era 1.15.8.66564 2025-10-21T12:46:29Z 2026-04-21T15:11:17.560625+00:00
9 Classic Era PTR 1.15.8.64057 2025-10-21T12:46:29Z 2026-04-21T15:11:17.560625+00:00
---------------------------------------------------------------------------------------
Created directory: ./Examples
Saved 9 entries to ./Examples\ymir_versions.csv
Checking executables in: ./ymir
Found executables: ['ymir_classic_era.exe', 'ymir_classic_era_ptr.exe', 'ymir_classic_mop.exe', 'ymir_classic_mop_ptr.exe', 'ymir_classic_tbc.exe', 'ymir_classic_tbc_ptr.exe', 'ymir_classic_titan.exe', 'ymir_ptr.exe', 'ymir_retail.exe']
----------------------------------------------------------------------------------------------------------------------
# Name Version Github Date Added Date Current Version
----------------------------------------------------------------------------------------------------------------------
1 Classic Era 1.15.8.66564 2025-10-21T12:46:29Z 2026-04-21T15:11:17.560625+00:00 1.15.8.66564
2 Classic Era PTR 1.15.8.64057 2025-10-21T12:46:29Z 2026-04-21T15:11:17.560625+00:00 No --version output
3 MoP Classic 5.5.3.66839 2025-12-09T22:27:14Z 2026-04-21T15:11:17.560625+00:00 5.5.3.66839
4 MoP Classic PTR 5.5.3.66382 2025-12-09T22:27:14Z 2026-04-21T15:11:17.560625+00:00 5.5.3.66382
5 TBC Classic 2.5.5.66765 2025-12-06T12:30:05Z 2026-04-21T15:11:17.560625+00:00 2.5.5.66765
6 TBC Classic PTR 2.5.5.65000 2025-12-06T12:30:05Z 2026-04-21T15:11:17.560625+00:00 2.5.5.65000
7 Titan Classic 3.80.1.66991 2026-04-10T12:25:44Z 2026-04-21T15:11:17.560625+00:00 3.80.1.66991
8 Retail PTR 12.0.1.65769 2026-02-10T20:12:37Z 2026-04-21T15:11:17.560625+00:00 12.0.1.65769
9 Retail 12.0.1.66838 2026-02-10T20:12:37Z 2026-04-21T15:11:17.560625+00:00 12.0.1.66838
----------------------------------------------------------------------------------------------------------------------
Updated 'Current Version' for 9 executables in ./Examples/ymir_versions.csv
Wrote 9 entries to ./Examples\pathDefines.csv
C:\Program Files (x86)\World of Warcraft\_classic_era_\WowClassic.exe
C:\Program Files (x86)\World of Warcraft\_classic_\WowClassic.exe
C:\Program Files (x86)\World of Warcraft\_classic_ptr_\WowClassicT.exe
C:\Program Files (x86)\World of Warcraft\_anniversary_\WowClassic.exe
C:\Program Files (x86)\World of Warcraft\_classic_era_ptr_\WowClassicT.exe
C:\Program Files (x86)\World of Warcraft\_ptr_\WowT.exe
C:\Program Files (x86)\World of Warcraft\_retail_\Wow.exe
Updated 'version' column for 9 entries in ./Examples\pathDefines.csv
1 - Classic Era
2 - MoP Classic
3 - TBC Classic
4 - Retail
Q - Quit
Select a client to launch (number or Q to quit): 1
Removing cache: C:\Program Files (x86)\World of Warcraft\_classic_era_\Cache [Was already deleted]
The system cannot find the file specified.
Launching ymir: **\ymir\ymir_classic_era.exe
> ymir-python-script>
MIT - do whatever you want with it. See LICENSE for details.
Disclaimer: This README was generated with the help of GitHub Copilot.