Skip to content

Releases: smiei/lockstep

Lockstep 5.4

Choose a tag to compare

@smiei smiei released this 02 Nov 01:07

Lockstep 5.4

The whole team in one sort, won and lost runs, a side rail that folds away, the team level beside the level cap, and fixes for the Encounter and Team tabs.

Install

Windows Docker Unraid Pinokio Node.js 20.19+
Lockstep-Setup-5.4.exe below (or the portable zip). See Windows app. ghcr.io/smiei/lockstep:5.4 (or :latest). See the compose example. Apps tab → search Lockstep Explore → GitHub or Hugging Face URL: https://github.com/smiei/lockstep-pinokio npm install → npm run setup → npm start

New

  • "Show team" in the Box. The Team tab's Box can list the team members too, so one sort ranks every living link, for example by base stats. Team members there are marked "On the team"; their buttons stay in the team slots.
  • Won and lost runs. Each card on the start page can mark its run as won or lost. A won run becomes a Hall of Fame entry: a gold seal pressed onto its corner, a double gold frame and a gold label with the day it was won. A lost run is greyed out and struck through. Both keep their place in the list; "Resume" takes the mark back. Backups keep it.
  • Delete from the start page. Delete, then Delete for good: two clicks, no dialog.
  • Fold the side rail away. On a desktop, an arrow at the foot of the side rail hides it and a small tab on the left edge brings it back. Each device remembers its choice.
  • The team level beside the level cap. The next level cap now reads "24 / 22" in the side rail and in the phone's top bar: the cap, then the level your team may reach.
  • HeartGold and SoulSilver: the route order is corrected up to the second badge.
  • English for every other language. A device set to a language the app does not have (Japanese, Dutch, …) now gets English instead of German.

Fixed

  • The Pokémon picker of an empty Encounter entry was cut off below its route.
  • "Open only" on the Encounter tab lost the route you had just completed after a reload or a tab switch. It now keeps the route saved last.
  • On narrow screens, Box entries on the Team tab ran their types under the Evolve button, and the "Add to team" list opened under the side rail.

Under the hood

  • Prisma 7. Existing runs read as before.
  • Installs without Docker now need Node.js 20.19 or newer (before: 20.9). Docker, the Windows app and Pinokio bring their own.

Upgrading

  • Docker / Unraid: pull the new image and recreate the container.
  • Windows: run the new setup over the old one. Your runs stay.
  • Pinokio: Update.
  • Without Docker: check node -v (20.19 or newer), then git pull, npm install, npm run setup.
  • The database gains two columns; they are added by themselves on the first start.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites, trainer pictures and covers are downloaded when you set the app up.

Lockstep 5.3

Choose a tag to compare

@smiei smiei released this 01 Nov 11:32

Lockstep 5.3

Official place names in every language, ROM hacks named the way the game names them, and game covers.

Install

Windows Docker Unraid Pinokio Node.js 20.9+
Lockstep-Setup-5.3.exe below (or the portable zip). See Windows app. ghcr.io/smiei/lockstep:5.3 (or :latest). See the compose example. Apps tab → search Lockstep Explore → GitHub or Hugging Face URL: https://github.com/smiei/lockstep-pinokio npm install → npm run setup → npm start

New

  • Official place names in all five languages.
    • Every route and place of every official game now carries its official name in German, English, French, Spanish and Italian, taken from PokéWiki for each game and region.
    • Before, many Spanish, Italian and French names were simply English, and some packs had names that belonged to another place.
    • Where a place was renamed between games, each game shows its own name.
  • ROM hacks stay in English.
    • ROM hacks exist in English only, so their places, trainers and badges are now named exactly as the game names them, in every language.
    • The app says so when you pick one. Trainer pictures stay the same.
  • Game covers.
    • The game picker, the start page and the Overview now show each game's cover.
    • They are downloaded on the first start (about 1 MB) from libretro-thumbnails and, for the Switch games, Wikipedia.
    • ROM hacks without a cover show a drawn tile with the game's name. To use your own, put <game id>.png or .webp into public/covers/; yours is never overwritten. COVERS=off skips the download.
  • The "Data unverified" notes are gone.

Docker: one new volume (recommended)

Add a volume for the covers so they are not downloaded again after every update:

    volumes:
      - covers:/app/public/covers
volumes:
  covers:

Without it the app still works; the covers are simply fetched again on each new container.

Upgrading

  • Docker / Unraid: pull the new image and recreate the container (add the covers volume, see above).
  • Windows: run the new setup over the old one. Your runs stay.
  • Pinokio: Update.
  • Without Docker: git pull, npm install, npm run setup.
  • No database changes.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites, trainer pictures and covers are downloaded when you set the app up.

Lockstep 5.2

Choose a tag to compare

@smiei smiei released this 01 Nov 03:19

Lockstep 5.2

Fifteen more official games, from Ruby and Sapphire to Scarlet and Violet, and a catch calculator that knows Gen 6 to 9.

Install

Windows Docker Unraid Pinokio Node.js 20.9+
Lockstep-Setup-5.2.exe below (or the portable zip). See Windows app. ghcr.io/smiei/lockstep:5.2 (or :latest). See the compose example. Apps tab → search Lockstep Explore → GitHub or Hugging Face URL: https://github.com/smiei/lockstep-pinokio npm install → npm run setup → npm start

New games

Generation Games
3 Ruby, Sapphire
4 Diamond / Pearl
5 Black 2 / White 2
6 X / Y, Omega Ruby, Alpha Sapphire
7 Sun, Moon, Ultra Sun, Ultra Moon
8 Sword, Shield, Brilliant Diamond / Shining Pearl
9 Scarlet / Violet
  • Route lists and boss level caps come from the same source as the ROM hacks, with place, boss and badge names in all five languages.
  • Each game uses its own Pokédex, type chart, catch rates, movesets and regional forms.
  • These packs are marked unverified, so the app shows its usual note. Corrections are welcome as an issue.
  • Brilliant Diamond / Shining Pearl has no TM list, because the data source has none for it.
  • Badges from Kalos onward have no artwork. They show a drawn medal instead, gold once earned.

Catch calculator

  • Gen 6 to 9:
    • Each game gets its own ball list, including the Beast Ball.
    • Ball bonuses follow the game: for example Net and Repeat Ball ×3.5, Dusk Ball ×3, and the Dream Ball ×4 against sleeping Pokémon.
    • The Fast Ball works by itself from base Speed.
  • Ultra Beasts: the Beast Ball gives ×5 against them, every other ball only ×0.1. The calculator recognizes them by itself.
  • Sword/Shield, BDSP and Scarlet/Violet: the low-level bonus and the badge rules are built in.
    • A new Badges field is filled in from your run's defeated gym leaders.
    • Sword/Shield also says when the game won't let you throw a ball at all.
  • Gen 5 (Black/White, Black 2/White 2 and their hacks) corrected: the app showed catch chances that were too high. For example, a Poké Ball against catch rate 45 at full health now shows 11.9% instead of 20.3%. Infinite Fusion was already right.

Fixed

  • 18 Pokémon re-typed to Fairy in Gen 6 (Clefairy, Jigglypuff, Togepi, Marill, Snubbull, Ralts, Gardevoir, Mawile, …) lacked the Fairy type in every game with Gen 6+ data. That includes Radical Red, Run & Bun, Unbound and Infinite Fusion. Older games keep their old types, as before.

Upgrading

  • Docker / Unraid: pull the new image and recreate the container.
  • Windows: run the new setup over the old one. Your runs stay.
  • Pinokio: Update.
  • Without Docker: git pull, npm install, npm run setup.
  • No database changes. On the first start, the sprites for the new games are downloaded.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites and trainer pictures are downloaded when you set the app up.

Lockstep 5.1

Choose a tag to compare

@smiei smiei released this 31 Oct 23:37

Lockstep 5.1

Clearer routes in the Encounter tab, more trainer pictures and placeholder sprites for ROM-hack forms.

Install

Windows Docker Unraid Pinokio Node.js 20.9+
Lockstep-Setup-5.1.exe below (or the portable zip). See Windows app. ghcr.io/smiei/lockstep:5.1 (or :latest). See the compose example. Apps tab → search Lockstep Explore → GitHub or Hugging Face URL: https://github.com/smiei/lockstep-pinokio npm install → npm run setup → npm start

New

  • Encounter tab: every route now shows its outcome at a glance, in dark mode too.
    • A green, red or amber frame once the route is caught, lost or still missing a player's entry; a dashed frame while it is open.
    • The outcome word ("caught", "lost", ...) is a badge, so it differs in shape and not only in colour.
  • 66 more boss-trainer pictures for the ROM hacks, downloaded on the next start: rematches and team variants of gym leaders and the Elite Four, Team Aqua and Magma, Rocket's Giovanni and more. 286 of 365 bosses now have a picture.
  • The trainer picture list (public/trainers/README.txt) covers every game and ROM hack and marks the bosses that need your own picture.
  • ROM-hack forms (Radical Red's Sevii forms, Blazing Emerald's Hoenn forms) show their species' sprite, faded and marked as a placeholder, instead of a question mark. Their own art has no licence we could use. The hacks' entirely new species keep the question mark.

Maintenance

  • Updated dependencies: React 19.3, Tailwind CSS 4.3, TypeScript 6, Vitest 5 and more.

Upgrading

  • Docker / Unraid: pull the new image and recreate the container.
  • Windows: run the new setup over the old one. Your runs stay.
  • Pinokio: Update.
  • Without Docker: git pull, npm install, npm run setup.
  • No database changes.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites and trainer pictures are downloaded when you set the app up.

v5.0

Choose a tag to compare

@smiei smiei released this 31 Oct 20:49

Lockstep 5.0

The SoulLink Nuzlocke Tracker has a new name: Lockstep, the SoulLink & Nuzlocke tracker. 5.0 also brings a Windows app, 16 ROM hacks, Pokémon up to Gen 9 and a start page for all your runs.

Install

Windows Docker Pinokio Node.js 20.9+
Lockstep-Setup-5.0.exe below (or the portable zip). See Windows app. ghcr.io/smiei/lockstep:5.0 (or :latest). See the compose example. Explore → GitHub or Hugging Face URL: https://github.com/smiei/lockstep-pinokio npm install → npm run setup → npm start

New name, new addresses

Up to 4.3 From 5.0
Repository smiei/nuzlocke_tracker smiei/lockstep (the old address forwards)
Docker image gloryy/nuzlocke-tracker (Docker Hub) ghcr.io/smiei/lockstep (GitHub's registry only)
Pinokio launcher smiei/nuzlocke-tracker-pinokio smiei/lockstep-pinokio (the old address forwards)

The Docker Hub image gets no new releases. It stays available for rollbacks to 4.3.

New

  • Windows app: one installer, no Docker, no admin rights.
    • Lockstep runs in the system tray, like Jellyfin's Windows server, and you use it in the browser.
    • Starting it opens your browser right away. On the first start a waiting page shows the progress while the Pokémon pictures download, then switches to Lockstep by itself.
    • The tray menu shows the address for phones and friends on the same Wi-Fi, opens the data folder and the log, and can start Lockstep with Windows.
    • Your runs live in %LOCALAPPDATA%\Lockstep, untouched by updates and uninstalling.
    • The installer is not code-signed yet, so your browser may flag the download (allow it) and Windows SmartScreen may warn on start (More info → Run anyway). Both are false alarms for a new, unsigned program; it is built by GitHub Actions from this repository.
  • 16 ROM hacks:
    • Radical Red, Unbound, Run & Bun, Renegade Platinum, Sacred Gold, Storm Silver, Blaze Black, Volt White, Blaze Black 2 / Volt White 2 Redux, Emerald Kaizo, Inclement Emerald, Rising Ruby, Sinking Sapphire, Blazing Emerald, Glazed and New Generations.
    • Each comes with its own stat, type and move changes. The route lists and boss teams come from nuzlocke.app.
    • The data is unverified, and the app says so when you pick one of them.
  • Pokémon up to Gen 9 (No. 1025), with Alolan, Galarian, Hisuian and Paldean forms and their evolutions, for the hacks that use them.
    • A hack's own Pokémon (Radical Red's Sevii forms, Blazing Emerald's Hoenn forms and new species) are in too, shown with a placeholder sprite.
    • Older games are unaffected: they still offer only the Pokémon and forms they had.
  • Bring your own game:
    • New Run → Import your own game reads a game pack file, checks it and lists any problems.
    • npm run pack turns a plain text list of routes and bosses into one.
    • Backups (format v5) carry the imported games their runs use.
    • Want everyone to have it? See game packs and CONTRIBUTING.
  • Start page:
    • / now shows every run as a card: team, route progress, badges, next level cap and deaths, most recently played first.
    • A fresh install greets you with a short welcome instead of an empty "Run 1", with the language picker right there.
    • The house icon beside the logo leads back to the start page.
    • A link without a run, like the installed app's start, opens the run you played last.
  • Boss-trainer pictures download by themselves on first start, from Pokémon Showdown.
    • Pictures you added yourself are never overwritten.
    • TRAINER_SPRITES=off turns the download off.
    • Docker users should add the volume /app/public/trainers (see the compose example).
  • Honest data notes:
    • Game packs whose routes haven't been checked against the game are marked "Data unverified", with a link to report mistakes.
    • French, Spanish and Italian are marked as machine-translated. Pokémon names are official in every language.

Fixes and maintenance

  • After switching the language, the gear menu and the blind-flight button kept German labels for screen readers. They now follow the language.
  • The Docker image runs on Node.js 24 (Node.js 20 no longer gets security updates). Next.js and the image library sharp are updated, which closes known security issues.

Upgrading from 4.x

  • Docker:
    • change the image to ghcr.io/smiei/lockstep:latest (or :5.0) and recreate the container;
    • keep your volumes, DATABASE_URL and ports;
    • optionally add the /app/public/trainers volume.
    • Details: moving from the old image name.
  • Pinokio: Update. GitHub forwards the old launcher address, and your runs stay in data/nuzlocke.db.
  • Without Docker: git pull, npm install, npm run setup. The old repository address forwards; to update it, run git remote set-url origin https://github.com/smiei/lockstep.git.
  • If git pull or Pinokio's Update fails: the repository's history was cleaned up once before 5.0 (commit messages only, no code). Without Docker, run git fetch origin and git reset --hard origin/master in the app folder (your database is not part of the repository and stays). In Pinokio, use Reset, then Install; your runs stay in data/.
  • Database: one migration runs on the first start. It records when each run last changed, which orders the start page. It also removes the empty "Run 1" that earlier versions created, but only if nobody ever used it.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites and trainer pictures are downloaded when you set the app up.

v4.3

Choose a tag to compare

@smiei smiei released this 31 Oct 01:39

SoulLink Nuzlocke Tracker 4.3

Server-wide defaults for colour and language, and a logo that takes your colour.

Install

Docker Pinokio Node.js 20.9+
gloryy/nuzlocke-tracker:4.3 (or :latest), also ghcr.io/smiei/nuzlocke-tracker:4.3. See the compose example. Explore → GitHub or Hugging Face URL: https://github.com/smiei/nuzlocke-tracker-pinokio npm install → npm run setup → npm start

New

  • DEFAULT_SHELL_COLOR (green, red, blue or yellow): the colour every device starts with.
    • The browser-tab icon, the home-screen icon and the installed app's splash screen and status bar follow it.
    • Everyone can still pick their own colour in the gear menu.
  • DEFAULT_LANGUAGE (de, en, fr, es or it): the language a browser tab starts in.
    • The installed app on a phone uses the phone's language.
    • Without the variable, browser tabs follow the device language too.
    • A language picked in the gear menu always wins.
  • The logo in the side rail takes the shell colour. A custom logo built on the project logo's colours follows too.
  • Icon for the Unraid Docker page: http://<server-ip>:<port>/icons/icon-512.png.

Both variables are optional. Details: self-hosting guide.

Fixes

  • Run list: it now reaches past the side rail, so long game names and player lists are no longer cut off.
  • Dark mode: after switching back to the mode your device uses, the app follows the device again. Before, a single click pinned it for good.
  • Rule renamed: the permanent blind flight rule is now called Lock blind flight.

Upgrading from 4.x

  • Docker: pull the new image and recreate the container. Add the new variables if you want them.
  • Pinokio: Update.
  • Without Docker: git pull, npm install, npm run setup.
  • No database changes.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites are downloaded when you set the app up.

v4.2

Choose a tag to compare

@smiei smiei released this 31 Oct 00:25

SoulLink Nuzlocke Tracker 4.2

A new rule for hardcore runs, plus polish.

Install

Docker Pinokio Node.js 20.9+
gloryy/nuzlocke-tracker:4.2 (or :latest), also ghcr.io/smiei/nuzlocke-tracker:4.2. See the compose example. Explore → GitHub or Hugging Face URL: https://github.com/smiei/nuzlocke-tracker-pinokio npm install → npm run setup → npm start

Changes

  • Permanent blind flight (Rules tab, under Blind flight): for runs played without any help.
    • Blind flight stays on, and the button in the header is locked, so there is no quick peek.
    • Only this rule can lift it again.
    • It travels with rule presets like every other rule.
  • Run list, easier to read:
    • it opens right under the run box instead of over the tabs;
    • in dark mode it stands clearly apart from the side rail, with lines between the runs;
    • the open run is marked with a bar.
  • Docker volume guide (self-hosting):
    • the mounts you actually need are now separate from the optional ones;
    • a warning explains why /app/public must not be mounted as a whole.
  • Trainer pictures: public/trainers/README.txt lists every trainer per game, in journey order. Black/White and Infinite Fusion are now included.

Upgrading from 4.x

  • Docker: pull the new image and recreate the container.
  • Pinokio: Update.
  • Without Docker: git pull, npm install, npm run setup.
  • No database changes.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites are downloaded when you set the app up.

v4.1

Choose a tag to compare

@smiei smiei released this 30 Oct 22:37

SoulLink Nuzlocke Tracker 4.1

A small follow-up to 4.0: the Lockstep logo is back in the app's own bottle green. 4.0 had shipped it on a red tile.

Install

Docker Pinokio Node.js 20.9+
gloryy/nuzlocke-tracker:4.1 (or :latest), also ghcr.io/smiei/nuzlocke-tracker:4.1. See the compose example. Explore → GitHub or Hugging Face URL: https://github.com/smiei/nuzlocke-tracker-pinokio npm install → npm run setup → npm start

Changes

  • Logo: the tile is bottle green again, matching the side rail and the phone's top bar. The tab icon, the home-screen icon, the splash screen and the installed app's status bar follow.
  • The tile stays green whatever shell colour you pick.

Upgrading from 4.0

  • Docker: pull the new image and recreate the container.
  • Pinokio: Update.
  • Without Docker: git pull, npm install, npm run setup.
  • No database changes.
  • Installed on a phone's home screen? Remove the app and install it again to get the green icon. Android reads the icon only at install time.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites are downloaded when you set the app up.

v4.0

Choose a tag to compare

@smiei smiei released this 30 Oct 21:03

SoulLink Nuzlocke Tracker 4.0 — "Lockstep"

A complete redesign. The tracker now looks like a natural-history collection: every catch is a specimen with its own label, and every run is a drawer you fill as you play. In the interface, the app is now called Lockstep.

Install

Docker Pinokio Node.js 20.9+
gloryy/nuzlocke-tracker:4.0 (or :latest), also ghcr.io/smiei/nuzlocke-tracker:4.0. See the compose example. Explore → GitHub or Hugging Face URL: https://github.com/smiei/nuzlocke-tracker-pinokio npm install → npm run setup → npm start

Details: self-hosting guide.

New in 4.0

  • New look:
    • sage ground, white specimen trays and one red that only ever means death or danger;
    • a new logo and new fonts (Familjen Grotesk and Red Hat Mono);
    • on desktop, a green side rail with the run, the tabs and the next level cap;
    • on phones, a green top bar with the level cap at a glance.
  • Shell colour of your choice: bottle green, Poké Ball red, blue or yellow, set per device under the gear menu. The whole page takes on the colour's tint.
  • Team tab:
    • your team is a drawer of six trays, with each linked pair standing side by side;
    • a specimen label under each pair shows the route number, slot, base-stat totals and who caught it;
    • Box and Memorial sit in their own column;
    • a level evolution that is possible within the cap is called out ("Butterfree possible now").
  • Encounter tab: one tray per route, with a catalogue number and a header coloured by the route's outcome (open, missing, caught, lost).
  • Overview: opens with one run sheet: the next level cap, progress, badges and a per-player table of catches, deaths and BST.
  • Pokédex card: laid out like a field-guide entry, with the specimen and its label next to the stats and matchups, the evolution chain left to right, and the moves below.
  • Docker image for amd64 and arm64. It now runs on a Raspberry Pi 4/5, ARM-based NAS units and Apple Silicon. It is also published on GitHub's registry.
  • Fix: the Species Clause warning names the player instead of "Player 2".

Upgrading from 3.x

  • Back up first: gear menu → Back up all runs.
  • Then update:
    • Docker: pull the new image and recreate the container.
    • Pinokio: Update in the launcher menu.
    • Without Docker: git pull, npm install, npm run setup.
  • No database changes; your runs carry over as they are.
  • Installed on a phone's home screen? The new logo and status-bar colour only show up after removing and reinstalling the app. Android reads them only when the app is installed.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. This release contains no Pokémon artwork; sprites are downloaded when you set the app up.

v3.1

Choose a tag to compare

@smiei smiei released this 21 Oct 15:17
hero
demo.mp4

SoulLink Nuzlocke Tracker 3.1

Track your Pokémon Nuzlocke runs — solo, or as a SoulLink with up to four friends:

  • every catch, link and death, plus the team, level caps and badges;
  • a catch-rate calculator and a battle scout for your game's generation;
  • live on every phone and PC at the table.

This is the first release published on GitHub. It is also the first under the MIT License.

Install

Docker Pinokio Node.js 20.9+
gloryy/nuzlocke-tracker:3.1 (or :latest) — see the compose example Download from URL: https://github.com/smiei/nuzlocke-tracker-pinokio npm install → npm run setup → npm start

Details: self-hosting guide.

New in 3.1

  • Runs without Docker. npm run setup does in one command what the Docker image does: database, migrations, sprite download, build. It works on Windows, macOS and Linux.
  • One-click install with Pinokio through the new launcher. Your runs live outside the app folder, so updates never touch them.
  • Unguessable run links:
    • every run is addressed by a random access key instead of its number;
    • old ?run=<number> links and installed apps keep working, because the address is rewritten automatically.
  • Accessibility pass:
    • readable type badges and type-matrix numbers in both themes;
    • darker secondary text and a clearer focus ring;
    • every field is named for screen readers ("Pokémon for Red on Route 1");
    • the Pokédex works by keyboard;
    • each tab has its own page title;
    • drawn icons replace emoji, and defeated or dead entries stay readable.
  • Docs: a new README, detailed feature, self-hosting and development guides, and full third-party notices.

Upgrading from 3.0

  • Back up first: gear menu → Back up all runs.
  • Then update:
    • Docker: pull the new image and recreate the container.
    • Without Docker: git pull, npm install, npm run setup.
  • The database migration that adds the access keys runs on its own the first time 3.1 starts. Existing runs are kept.

Unofficial, non-commercial fan project. Pokémon is © Nintendo, Creatures Inc., GAME FREAK inc. and The Pokémon Company. The code and the Docker image contain no Pokémon artwork; sprites are downloaded when you set the app up.