Skip to main content

pakwatch

See which of your mods a game update touched, before you find out in the game.

Tests Python 3.11+ MIT license

pakwatch in the browser, example data

Example data: the games are real, the mods and the update are made up for the picture.

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.

What it tells you

Needs a lookThe update changed or removed a game file this mod replaces. Look for a newer version of the mod.
Updated by its authorThe mod is newer than the update, so its author has probably caught up.
FineNone of the files it replaces changed.
Only adds filesIt replaces nothing, so an update can't clash with it.
Replaced by more than one modTwo mods replace the same file. The game loads one version, and the other mod loses that part.

Get started

Download pakwatch.exe from the latest release and run it, or install it 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.

On the command line

Give it the game's folder and it prints the same report:

> pakwatch "C:\Program Files (x86)\Steam\steamapps\common\MyGame"
304,986 game files. The game changed since 2026-11-03T21:40:12Z; mods compared with that version.

! zzz_Swords_P: patch touched, replaces 9 game files, adds 8
    changed: MyGame/Content/Weapons/BP_Sword.uasset

  zzz_Shields_P: ok, replaces 2 game files, adds 0

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 *_P container, or anything in a subfolder of Paks such as ~mods.
  • Mods packed as a plain .pak work 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 .pak files 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.

License

MIT

Metadata

Release files for pakwatch 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pakwatch 0.1.0
File Size Uploaded Provenance Actions
pakwatch-0.1.0.tar.gz 36.8 kB With provenance Details for pakwatch-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pakwatch 0.1.0
File Interpreter ABI Platform Actions
pakwatch-0.1.0-py3-none-any.whl Python 3 none any Details for pakwatch-0.1.0-py3-none-any.whl

Total release size: 69.3 kB

Release files / pakwatch-0.1.0.tar.gz

Download URL pakwatch-0.1.0.tar.gz
Size 36.8 kB
Tags Source
SHA-256 checksum
How to use checksums
724fc5913ae8afec79fc2084d4558a644534e3370ec733a054121510e6bf18bc
BLAKE2b-256 checksum
How to use checksums
49f830bccb63aa9fdcef07b8af3b407dc4bb86a5af166f1154a832ec02d998ce
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 log

Release files / pakwatch-0.1.0-py3-none-any.whl

Download URL pakwatch-0.1.0-py3-none-any.whl
Size 32.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
918fd1ef09a9212ee1ff01341ee785332ca34be7fd62d2ebcebdf42d2b119027
BLAKE2b-256 checksum
How to use checksums
cbe5c293dc314ed7f0b3dc2d9f3c79b24d404fd7580d53b538b37ffa88c9b036
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 log

Security for pakwatch 0.1.0

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.

Select from 2 files

Attestation for pakwatch-0.1.0.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 log

A 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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page