Get started · What it tells you · Command line · How it works · Limits · PyPI
Unreal Engine 5 games keep their files in IoStore containers, and pak mods replace some of those files. After a game update, a mod that replaces a file the update changed can crash the game or quietly undo a fix, and you only notice once you play. pakwatch remembers your game's files. After an update it shows which mods replace files that changed, so you know which ones to check for a new version.
|
After an update Which of your mods replace game files the update changed or removed, and how many files it changed in all. |
Mod conflicts Files two mods both replace. The game loads one version, so the other mod loses that part. |
Turn mods off Move a mod out of the game until its author catches up, and put it back with one click. |
|
Shareable report Copy the report as Markdown for a mod's author or a bug report, without your local paths. |
IoStore and .pak mods Reads only the tables of contents. No AES key, about a second for a whole game. |
Steam aware Finds the Unreal Engine games in your Steam libraries and names the build before and after an update. |
Example data: the games are real, the mods and the update are made up for the picture.
Get started
Download pakwatch.exe from the latest release and run it, or install it from PyPI with Python 3.11 or newer:
pip install pakwatch
pakwatch
pakwatch opens in your browser and lists the Unreal Engine games in your Steam libraries. Pick one, or type the folder of a game that isn't on Steam.
The first check remembers the game as it is now, so run it while your mods work. Open pakwatch again after the next game update. The report then also says how many game files the update changed and, for Steam games, which build it went from and to.
From the report you can turn a mod off until its author catches up. pakwatch moves the mod's files out of the game, and Turn On puts them back where they were. Copy Report puts the whole report on the clipboard as Markdown, ready for a comment to the mod's author or a bug report, without any of your local paths.
What it tells you
| The update changed or removed a game file this mod replaces. Look for a newer version of the mod. | |
| The mod is newer than the update, so its author has probably caught up. | |
| None of the files it replaces changed. | |
| It replaces nothing, so an update can't clash with it. | |
| Two mods replace the same file. The game loads one version, and the other mod loses that part. |
On the command line
Give it the game's folder and it prints the same report. Here it checks a game before an update, then after one, then prints the report as Markdown:
Example data, real pakwatch output.
The exit code is 0 when everything is fine, 1 when the update touched a mod or two mods collide, and 2 when the folder can't be read, so scripts and mod managers can act on it. Add --markdown to get the shareable version of the report instead. pakwatch --no-browser starts the window without opening it and prints its address.
How it works
- pakwatch reads only the tables of contents (
.utoc) of the game's containers. It never opens the data in.ucas, so it needs no AES key, and a whole game takes about a second. - Every file in a container has a content hash. pakwatch keeps the hashes of all game files, a few MB per game in
%LOCALAPPDATA%\pakwatch, and compares them after an update. - A mod is any
*_Pcontainer, or anything in a subfolder ofPakssuch as~mods. - Mods packed as a plain
.pakwork too. Their index lists file paths without hashes, so pakwatch turns each path into the package id the game uses (CityHash64 of the package name) and matches it against the game's files. - The report compares with the game as it was before the last update, so it keeps showing what that update touched until the next one.
Privacy and safety
pakwatch only reads files, except when you press Turn Off or Turn On. Those move one mod's files between the game's Paks folder and %LOCALAPPDATA%\pakwatch, and never delete or overwrite anything. pakwatch never connects to the internet. The window is a page served on 127.0.0.1 with a one-time key, so other sites open in your browser can't use it, and it shuts down shortly after you close the tab.
Limits
- It works with IoStore games, which is most Unreal Engine 5 games. The game's own
.pakfiles aren't read, because their file index is usually encrypted. A mod with an encrypted index is listed under "Couldn't read". - A changed file doesn't always break a mod, and an unchanged one doesn't prove it works. Treat the list as the places to check first.
- When a game encrypts its file index, file names come from the mod's own index, which is usually readable.
pakwatch.exeisn't signed, so Windows SmartScreen may ask before its first start.
License
Metadata
Release files for pakwatch 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pakwatch-0.1.1.tar.gz | 38.4 kB | With provenance | Details for pakwatch-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pakwatch-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for pakwatch-0.1.1-py3-none-any.whl |
Total release size: 71.9 kB
Release files / pakwatch-0.1.1.tar.gz
| Download URL | pakwatch-0.1.1.tar.gz |
|---|---|
| Size | 38.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2440e2c1dffbb13a7e9c58288921c27d9e24325b2f138d6984d8db2fd6163274
|
|
BLAKE2b-256 checksum How to use checksums |
073945bb1f1b36804e961110b7ec715dba5cdf7a722ed6c3db5d75bdd1ef9ed9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logRelease files / pakwatch-0.1.1-py3-none-any.whl
| Download URL | pakwatch-0.1.1-py3-none-any.whl |
|---|---|
| Size | 33.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
974835f1c9253e5cd9df94a0dac94c908b9a9a7283c9005f4329d617bdbbce46
|
|
BLAKE2b-256 checksum How to use checksums |
f08f6f212cda54456937db4d1f66bfa246365384c744f68420e4aac757a84549
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logSecurity for pakwatch 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for pakwatch-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.