Skip to content
taylorjohannsenPublic

About

TJ's Rocket League Map Loader - swap custom maps into Rocket League's free-play slots, with hash-verified backups of every original

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

TJRLML

TJ's Rocket League Map Loader — a desktop app for swapping custom maps into Rocket League.

A Rocket League custom map is a cooked UE3 package that gets renamed over one of the stock free-play maps. This app does that swap while keeping a hash-verified backup of every original, so any change is reversible.

Windows only.

This is for playing on your own in freeplay. It is not for multiplayer.

Install

Download TJRLML-Setup-<version>.exe from the latest release and run it. It installs to your user profile and adds Start-menu and desktop shortcuts.

Windows SmartScreen will warn about an unrecognised publisher, because the installer is not code-signed. Click More info → Run anyway.

Getting a map on screen

1. Set it up

Open the app and go to Settings.

  • Rocket League folder — usually detected automatically. If not, click Browse and pick your install root (the folder containing TAGame\CookedPCConsole).
  • Maps folder — where you keep downloaded maps. Defaults to Documents\TJRLML Maps.
  • Click Save paths, then Back up stock maps. This copies every stock free-play map somewhere safe so you can always get back. Do this before installing anything.

2. Download a map

Get one from bakkesplugins.com/maps — the main community catalogue, with training packs, dribble maps, obstacle courses and workshop conversions.

Save the download into your maps folder. .udk, .upk and .zip all work; if it is a zip, the app finds the map inside it, so there is no need to unpack it yourself.

3. Install it

Go to the Library tab. Every map in your maps folder appears as a card with its size.

  • Pick which free-play map to replace from the dropdown. Underpass is the default.
  • Click Install. Large maps take a few seconds.

The card gets a purple outline and a loaded in … badge once it is in place.

4. Play it

  1. Launch Rocket League.
  2. Go to Play → Free Play.
  3. Pick the arena you replaced — Underpass, if you used the default.
  4. Your custom map loads in its place.

5. Put it back

On the Slots tab, click Restore next to the slot, or Restore all to stock. Do this before any online session — swapped maps load with anti-cheat on, so nothing else stops a modified file sitting in your install while you queue.

Warning

This works by renaming files inside your Rocket League install, which is not something the game expects. Backups are hash-verified and restores are checked before they run, but you are still modifying a game folder — if something goes wrong, the Epic launcher's Verify will redownload clean files.

Game updates overwrite the stock maps. When that happens the app reports the affected slots as PATCHED; reinstall your maps and use Re-seed after game update in Settings.

Use at your own risk

This is an unofficial, unverified tool. It is not affiliated with, endorsed by or approved by Psyonix or Epic Games, and nobody has vetted it against their terms of service.

Modifying game files is against the letter of most games' terms, and whether that gets acted on is entirely up to the publisher — not to me. If your account is actioned, restricted or banned, that is your risk to carry, not mine. The same goes for a broken install, lost files or anything else that happens to your machine.

Restore your slots before you go online. Swapped maps load with anti-cheat enabled, so nothing stops you queueing with modified game files sitting in your install. Every slot this app touches is a Rocket Labs free-play map that online playlists never load, so a swapped file should never enter a match — but anti-cheat not objecting today is not the same as this being permitted, and a patch could change it without warning. Restoring is one click. Do it.

The software is provided as-is, without warranty of any kind. See LICENSE.

Development

Tech stack

Electron 43 Desktop shell. The only thing that ships to users.
TypeScript 5.9 Whole codebase. Two tsconfigs — one for Node/Electron, one for the renderer.
electron-builder 26 Packaging and the NSIS installer.
Vanilla HTML/CSS/JS Renderer. No framework, no bundler, no CSS library.
Node built-ins node:crypto for SHA-256, node:fs for the atomic copies, statfs for free space.
PowerShell Expand-Archive for .zip maps and the native folder picker — no zip dependency needed on the only OS this targets.

Zero runtime dependencies. package.json has no dependencies block at all; everything above is either a devDependency or built into Node and Windows. That keeps the install small, the supply chain short, and npm audit --omit=dev at zero findings.

Node 20+ to build (the toolchain uses fs.promises.statfs and readdir({ recursive: true })).

Commands

npm install
npm start          # build + launch the app
npm run typecheck  # both tsconfigs, no emit
npm run dist       # NSIS installer into release/
npm run pack       # unpacked build, no installer

Releasing

.github/workflows/release.yml runs on every push to master: it typechecks, builds the installer on a Windows runner, and publishes it to a GitHub Release tagged v<version> from package.json, created at the pushed commit.

Bump version before pushing when you want a new release. Pushing without a bump republishes the assets onto the existing release for that version rather than creating a new one.

The installer is unsigned, so SmartScreen will warn about an unrecognised publisher. Fixing that needs an Authenticode certificate — a CA cert or Azure Trusted Signing — wired up through electron-builder's win.certificateFile or the CSC_LINK / CSC_KEY_PASSWORD secrets.

tsconfig.json builds the Electron main process and the shared logic in src/ to CommonJS. tsconfig.renderer.json builds src/ui/renderer.ts against the DOM lib.

src/core.ts holds every operation and returns structured data; the Electron main process exposes it over IPC and the renderer only ever talks through the typed bridge in electron/preload.ts. The renderer has no Node access — contextIsolation and sandbox are on, nodeIntegration is off.

About

TJ's Rocket League Map Loader - swap custom maps into Rocket League's free-play slots, with hash-verified backups of every original

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages