Skip to content

Releases: Yoruxyv/RepoDitor

RepoDitor v0.2.1

Choose a tag to compare

@github-actions github-actions released this 21 Aug 10:53
a07f54c

RepoDitor v0.2.1

RepoDitor v0.2.1 is a focused save-safety hotfix.

Fixed

RepoDitor now rejects upgrade, health, and Run values that cannot be represented by the save format's declared signed 32-bit integer containers.

Runtime testing established the critical boundary:

  • 2,147,483,647 is accepted and loads successfully in R.E.P.O.
  • 2,147,483,648 can result in a game-unusable save.

Validation is enforced before unsupported values can be written, including at the Python mutation layer and Electron boundary, with renderer-side validation preventing invalid pending edits.

Existing save protections remain intact, including stale-file detection, exact-byte backups, staged verification, and atomic replacement.

Scope

This release intentionally contains the save-safety hotfix only.

The experimental update-notification feature is not included in v0.2.1.

Installation

RepoDitor is a standalone Windows save editor for R.E.P.O.

It runs separately from the game and does not require BepInEx, a mod loader, or installation into the R.E.P.O. game directory.

Unsigned Windows build

This release is currently unsigned while RepoDitor's code-signing approval is pending.

Windows SmartScreen may display an Unknown Publisher or unrecognized-app warning.

Download RepoDitor only from the official GitHub repository and verify the published SHA-256 checksum before running the installer.

The release contains:

  • RepoDitor-Setup-0.2.1-x64.exe
  • RepoDitor-Setup-0.2.1-x64.exe.sha256

RepoDitor v0.2.0 — Faster, Safer, and More Game-Aware

Choose a tag to compare

@github-actions github-actions released this 21 Aug 05:56
eb2e91a

RepoDitor v0.2.0 — Faster, Safer, and More Game-Aware

RepoDitor v0.2.0 is a substantial update over v0.1.1 focused on packaged-app performance, evidence-backed editing, presentation caching, safer mutation boundaries, a more polished desktop experience, and much stronger contributor documentation.

This release keeps RepoDitor's core design intact: save parsing, validation, mutation, encryption, and persistence remain owned by the bundled Python backend, while the Electron/React desktop layer works through narrow typed operations.

Important

Unsigned Windows build

This release is currently unsigned while RepoDitor's code-signing approval is pending. Windows SmartScreen may display an Unknown Publisher or unrecognized-app warning.

Download RepoDitor only from this GitHub repository and verify the published SHA-256 checksum before running the installer.


Highlights

  • Faster packaged save opening with the Python sidecar moved from PyInstaller --onefile to --onedir.
  • Very fast same-session save reopening after a fresh fingerprint-confirmed open.
  • Evidence-backed Item Recharge with validated installed-game capability data.
  • Persistent, source-validated upgrade artwork caching across RepoDitor restarts.
  • Expanded Cosmetics catalog with installed metadata, local icons, filters, sorting, and eligible single-item unlocks.
  • Improved Players, Upgrades, Run, Items, Cosmetics, Maps, pending-change, and loading UX.
  • Stronger game-running and mutation representation checks before save persistence.
  • A clearer open-source/local-data/security model in public documentation.
  • Much broader Python, Electron, React, packaged-E2E, cache, installer, and safety regression coverage.
  • Repository-wide source documentation for future contributors, including production Python package __init__.py boundaries and frontend/Electron ownership notes.

What's New

Packaged performance improvements

RepoDitor's packaged Python backend now uses a PyInstaller onedir distribution instead of onefile.

RepoDitor intentionally uses short-lived Python commands rather than a persistent Python daemon. With onefile, those short-lived commands repeatedly paid PyInstaller extraction/bootstrap overhead. The new onedir layout keeps the same command boundary while reducing that startup cost.

The packaged runtime executable remains available through RepoDitor's fixed backend resource path, and the installer continues to bundle everything required for normal use.

Save-opening behavior

Save opening now distinguishes between:

  • the fresh authoritative save read, and
  • later editor-entry preparation or presentation work.

RepoDitor does not fake progress percentages for work that has no trustworthy progress count.

A same-session editor snapshot may be reused only after a new explicit open confirms that the save's source fingerprint is unchanged. A successful write invalidates that reusable editor-entry state.

Decoded save JSON is not persistently cached.

Observed packaged timings

Maintainer/package-smoke measurements during this release cycle included approximately:

launch   ≈ 2.8 s
open     ≈ 10.2 s
reopen   ≈ 0.44 s
run.get  ≈ 0.30 s

These are observational development/release measurements, not hard performance guarantees. Actual timings vary by hardware, disk state, antivirus activity, operating-system scheduling, and game installation state.


Item Recharge is now evidence-backed

Recharge / Refill to Full has been significantly strengthened.

RepoDitor no longer treats the mere presence of a save value as sufficient proof that an item type is safely rechargeable.

The current flow uses authoritative installed-game metadata to determine Recharge capability and keeps the result tied to the game installation evidence from which it was discovered.

Session evidence reuse

The first authoritative Items/Advanced discovery can produce reusable Recharge evidence.

Electron main may retain that backend-produced evidence for the current RepoDitor session, but Electron possession of the evidence is not authorization.

Before a later Recharge write can reuse it, Python independently verifies relevant facts such as:

  • evidence format/version;
  • validated game build;
  • installation identity;
  • relevant Unity metadata source identities;
  • exact requested item coverage;
  • backend-derived capability values.

If the evidence is missing, stale, malformed, incomplete, unsupported, or no longer matches the current installation, RepoDitor falls back to the full authoritative discovery path.

UNKNOWN and NOT_RECHARGEABLE never become permission to mutate.

Measured Recharge improvement

Profiling during development found that the old Recharge path spent roughly 6.47 seconds in repeated installed Unity metadata discovery, with a total operation around 6.96 seconds.

With valid primed evidence, representative measurements were approximately:

before: ~6.96 s
after:  ~0.48 s

or about a 93% reduction in the tested primed path.

The safe-save pipeline itself was not weakened or reordered to achieve this.


Richer Items workspace

The Items editor has grown beyond the earlier basic instance view.

Current functionality includes:

  • discovered item-instance browsing;
  • search;
  • filtering;
  • sorting;
  • local item icon presentation when validated data is available;
  • evidence-backed Recharge eligibility;
  • exact-instance pending Recharge changes;
  • clear unsupported/unknown behavior rather than guessing mutation semantics.

RepoDitor still intentionally does not provide generic arbitrary item mutation.

Numeric charge editing, unsupported battery-upgrade writes, arbitrary purchase mutations, and item add/delete/duplicate operations remain outside the supported mutation model unless their semantics are independently established.


Expanded Cosmetics / MetaSave support

Cosmetics now has a significantly richer catalog experience.

When compatible installed metadata is available, RepoDitor can present game-owned information such as:

  • display names;
  • cosmetic type;
  • rarity;
  • optional local icons;
  • ownership state;
  • saved-preset context.

The catalog now supports:

  • search;
  • ownership filtering;
  • type filtering;
  • sorting;
  • eligible individual cosmetic unlocks;
  • Unlock All Cosmetics;
  • guarded Lock All Cosmetics;
  • Clear All Presets.

Mutation authority remains separate from presentation metadata.

Unknown/future cosmetic IDs are preserved read-only rather than being silently generalized into supported mutation targets.

Locking remains guarded when known owned cosmetics are equipped, preset-referenced, or otherwise unsafe to remove.

Token editing, arbitrary equipment/color editing, and arbitrary preset creation/editing remain unsupported.


Upgrade metadata and artwork

Dynamically discovered upgrades can now be enriched with installed-game metadata and presentation artwork.

RepoDitor still does not rely on a hardcoded upgrade catalog for mutation identity.

Persistent derived presentation cache

Upgrade artwork decoded from installed game assets can now be persisted under RepoDitor's application data and reused across application restarts.

The cache is presentation-only.

Entries are tied to source identity/watch information and are reused only while their underlying installed-game sources remain valid.

Missing, stale, malformed, unsupported, or unreadable cache entries fail soft:

valid cache
→ reuse artwork

invalid/missing cache
→ authoritative source preparation
→ regenerate when possible

Cache corruption or persistence failure does not grant mutation authority and does not make save state authoritative.

Unreferenced derived presentation PNGs are pruned, and a read-only presentation-cache audit script is included for maintenance verification.


Game-generated icons and local assets

RepoDitor distinguishes between different kinds of visual data:

  • R.E.P.O.-generated item/cosmetic icons remain owned by the game and are read from validated local game cache locations.
  • RepoDitor-derived upgrade artwork is decoded from the installed game and stored in RepoDitor's own validated presentation cache.
  • Save data has a separate authority lifecycle and is not treated as presentation cache data.

RepoDitor does not bundle or redistribute R.E.P.O. game artwork as part of the application.

Missing or unsupported artwork fails soft to RepoDitor's normal icon fallback.


Save Safety and Correctness

This release adds more safety checks while preserving the existing staged write architecture.

Game-running protection

R.E.P.O. can keep save state in memory and write it later, so editing while the game is running risks working against stale data or having changes overwritten.

RepoDitor therefore distinguishes:

RUNNING
NOT_RUNNING
UNKNOWN

Safety-sensitive mutation treats an unknown process state as fail-closed.

In addition to the earlier game-state check, RepoDitor now rechecks the game immediately before persistence. This closes the timing window where R.E.P.O. could start after an earlier validation but before the final write.

Fail closed on unknown scalar representations

Editable existing scalar values are no longer silently overwritten when their stored representation is unknown.

For supported Run/Player/Upgrade mutation paths, an already-present editable scalar must use the proven integer representation; unsupported existing representations are rejected.

Python's bool values are explicitly not accepted as integers for these mutation checks.

Read paths can remain appropriately fail-soft, while mutation requires stronger evidence.

Safe write pipeline

The current write design retains the important protection layers:

  1. User edits remain in memory until an explicit save action.
  2. Python requires a confirme...
Read more

RepoDitor v0.1.1 — Cosmetics, Safety & Localization

Choose a tag to compare

@github-actions github-actions released this 11 Aug 11:30
e3dbb5c

Important

Unsigned Windows build

RepoDitor v0.1.1 is currently unsigned while code-signing approval is pending.
Windows SmartScreen may display an Unknown Publisher or unrecognized-app warning.

Download RepoDitor only from this GitHub repository and verify the published
SHA-256 checksum before running the installer.

RepoDitor v0.1.1

RepoDitor v0.1.1 is a substantial update focused on new save-editing capabilities,
stronger save safety, improved player identity, localization, appearance customization,
and a more polished Windows desktop experience
.

Compared with v0.1.0, this release adds a dedicated Cosmetics / MetaSave workspace,
evidence-backed item refilling, active protection against editing while R.E.P.O. is
running, Steam avatar presentation, Dark/Light/System themes, five interface languages,
refined interaction feedback, improved packaging, and significant reliability and
release-engineering work.

RepoDitor remains an unofficial community tool and is not affiliated with semiwork.


✨ What's New

🎭 Cosmetics / MetaSave editing

RepoDitor now includes a dedicated Cosmetics workspace for supported MetaSave.es3
operations.

The workspace provides a compact overview of:

  • known cosmetic catalog entries;
  • owned cosmetics;
  • locked cosmetics;
  • saved presets.

Supported bulk actions include:

  • Unlock All Cosmetics
  • Lock All Cosmetics
  • Clear All Presets

RepoDitor currently recognizes the observed cosmetic catalog covering IDs 0..546.

Unknown or future cosmetic IDs are preserved instead of being removed or rewritten.

Safe cosmetic locking

Lock All Cosmetics is intentionally guarded.

RepoDitor will not blindly remove cosmetic ownership when doing so could leave an
inconsistent MetaSave state. Cosmetics that are equipped, referenced by presets, or
otherwise unsafe to remove prevent the operation from proceeding.

The action remains atomic: if the requested bulk operation cannot be performed safely,
RepoDitor does not partially apply it.

Preset clearing

Clear All Presets clears the corresponding cosmetic and color preset slots while
preserving the surrounding MetaSave structure and unrelated cosmetic data.

Ownership data is not removed simply because presets are cleared.

Intentionally unsupported MetaSave operations

RepoDitor still does not expose operations whose game semantics have not been
established safely, including:

  • arbitrary cosmetic equipment editing;
  • cosmetic token editing;
  • arbitrary preset creation or modification;
  • guessed cosmetic names;
  • direct per-ID mutation controls.

🔋 Evidence-backed Item Refill to Full

The Items workspace now supports Refill to Full for compatible item instances.

This feature was implemented using controlled save evidence rather than assumptions about
the game's internal values.

For a supported item, RepoDitor removes only the exact stored-charge entry associated
with that specific item instance when the observed save format establishes that absence
represents the game's default/full state.

The operation uses the normal pending-change workflow:

  1. select the item;
  2. choose Refill to Full;
  3. review the pending edit;
  4. explicitly save;
  5. RepoDitor runs its complete safe-write pipeline.

RepoDitor does not expose arbitrary numeric charge editing.

The following remain unsupported:

  • arbitrary battery values;
  • item creation;
  • item deletion;
  • item duplication;
  • purchase-state modification;
  • unverified battery-upgrade mutations.

🛡️ Protection while R.E.P.O. is running

RepoDitor now actively prevents editing while the game is running.

R.E.P.O. may keep save state in memory and write it back to disk later. Editing the
persisted save at the same time could therefore cause RepoDitor to operate on stale data
or allow the game to overwrite external changes when it exits.

RepoDitor now:

  • detects the actual REPO.exe process;
  • anchors process detection to the validated local R.E.P.O. installation;
  • supports default and secondary Steam libraries;
  • supports custom drives and validated custom installations;
  • rechecks game state when appropriate during application use;
  • checks again when the application regains focus;
  • performs an authoritative check immediately before supported writes;
  • blocks both Run-save and Cosmetics / MetaSave writes while R.E.P.O. is running;
  • fails closed when process state cannot be verified safely.

The safety dialog provides Check Again after the game has been closed.

UnityCrashHandler64.exe by itself is not treated as evidence that the game is running.

This protection is additive to RepoDitor's existing write safeguards.


👤 Steam avatars and improved player identity

Player presentation has been improved across the desktop application.

The selected player can now display an optional Steam avatar, including in the
Upgrades workspace.

Avatar enrichment is deliberately non-critical:

  • unavailable avatars never block save editing;
  • private or unsupported profiles fall back safely;
  • malformed responses fail softly;
  • network failures do not prevent Players from loading;
  • a deterministic fallback is shown when no valid avatar can be used.

Avatar data is presentation-only and is never written into the save.


🌓 Dark, Light, and System themes

RepoDitor now supports three appearance modes:

  • Dark
  • Light
  • System

The selected preference is persisted locally.

System follows the Windows appearance preference so RepoDitor can automatically match
the operating system.

Theme selection affects presentation only and has no effect on save semantics.


🌐 Five interface languages

RepoDitor's own interface is now available in:

  • English
  • 日本語 — Japanese
  • 한국어 — Korean
  • 中文 — Chinese
  • Bahasa Indonesia

The language selector now uses a RepoDitor-styled accessible menu with:

  • native language names;
  • compact flag indicators;
  • keyboard navigation;
  • focus restoration;
  • outside-click dismissal;
  • persisted locale selection.

The translation system was also reorganized internally into locale-specific modules with
alignment tests to help prevent missing or mismatched translation keys.

Translation boundary

Only RepoDitor-owned interface text is translated.

Game-derived strings remain exactly as stored or discovered, including:

  • player names;
  • item names;
  • upgrade names;
  • map names;
  • values read from save files.

RepoDitor does not guess translations for game-owned identifiers.


🔊 Refined interaction feedback

RepoDitor now includes restrained desktop interaction feedback.

Selected controls provide subtle visual response together with a small local click sound.

The interaction sound:

  • is bundled locally;
  • requires no network request;
  • is decorative rather than informational;
  • fails silently if audio playback is unavailable.

RepoDitor also continues to respect reduced-motion preferences.

The goal is to make the interface feel more responsive without introducing distracting
or excessive animation.


⭐ Project utility controls

The top utility area now includes improved application and project controls such as:

  • theme selection;
  • language selection;
  • access to the RepoDitor project;
  • GitHub star information when available.

GitHub metadata is retrieved through a fixed and validated Electron IPC path.

The renderer is not given unrestricted network access, and failure to retrieve project
metadata does not affect save editing.


💾 Expanded safe-write protection

RepoDitor continues to use a deliberately conservative write pipeline.

Supported edits remain staged in memory until Save Changes is explicitly confirmed.

Before the original save is replaced, RepoDitor:

  1. validates the requested operation;
  2. verifies the source-file fingerprint;
  3. detects unexpected external changes;
  4. creates a timestamped exact-byte backup;
  5. validates the supported save schema and game semantics in Python;
  6. writes encrypted output to a temporary staged file;
  7. reopens the staged result;
  8. verifies the resulting data against the intended mutation;
  9. atomically replaces the original only after verification succeeds.

Run saves and MetaSave maintain independent:

  • fingerprints;
  • pending edits;
  • backups;
  • save sessions;
  • write operations.

These safeguards reduce risk but cannot guarantee compatibility with every future
R.E.P.O. update.


🔐 Desktop security model

RepoDitor retains its narrow Electron security boundary.

The renderer continues to run with:

  • contextIsolation: true;
  • nodeIntegration: false;
  • sandboxed renderer execution;
  • narrow typed preload APIs;
  • validated IPC contracts.

The renderer is not given:

  • arbitrary filesystem access;
  • arbitrary process execution;
  • generic shell execution;
  • unrestricted network access;
  • raw decrypted save JSON.

Python remains authoritative for:

  • save parsing;
  • save validation;
  • game semantics;
  • encryption and decryption;
  • backup handling;
  • safe persistence.

🧱 Internal architecture improvements

v0.1.1 includes a significant internal organization pass intended to make future features
safer and easier to maintain.

Python functionality is now grouped more clearly around domain ownership such as:

  • Items;
  • Saves;
  • Players;
  • Cosmetics;
  • Game discovery and process safety.

The desktop side also gained clearer feature-specific IPC and application boundaries.

These changes were structural and were designed to preserve existing save semantics.


🔐 R.E.P.O. save compatibility ...

Read more

RepoDitor v0.1.0

Choose a tag to compare

@Yoruxyv Yoruxyv released this 09 Aug 12:53
d96bc22

RepoDitor v0.1.0

RepoDitor’s first public release is a secure desktop save editor for R.E.P.O.

Features

  • Open and inspect encrypted R.E.P.O. save files
  • Edit players, upgrades, run values, and supported save data
  • Preview all pending changes before saving
  • Create exact-byte backups automatically
  • Detect stale or externally modified saves
  • Safely stage, validate, and verify changes before replacing a save
  • View advanced item and battery information in read-only mode
  • Optional Steam avatar enrichment
  • Responsive Windows desktop interface

Installation

  1. Download RepoDitor-Setup-0.1.0-x64.exe.
  2. Run the installer.
  3. Choose an installation directory if desired.
  4. Launch RepoDitor from the Start Menu.

Windows SmartScreen may warn that the application is from an unknown publisher because this release is not code-signed. Select More info → Run anyway if you trust this repository.

Safety

RepoDitor creates a backup before modifying a save. Keep your backups and avoid editing a save while R.E.P.O. is running.

Advanced item editing, item creation, item deletion, and item duplication remain disabled because their save semantics have not yet been proven safe.

Requirements

  • Windows x64
  • R.E.P.O. installed locally

Updates and removal

RepoDitor does not update automatically in v0.1.0. Download future releases manually from GitHub.

Uninstall it through Windows Settings → Apps → Installed apps. Uninstalling RepoDitor does not delete R.E.P.O. saves or RepoDitor-created save backups.