Skip to main content
How to update, then what changed in each release, newest first. These are published alpha releases; each entry links to the full release notes on GitHub.
Skipping versions? Read the update notes for every release newer than yours before rebuilding. A release with no new migration can still require setup or data checks inherited from an earlier release.

How to update plamotrack

These steps are for an installation from the release files, as in Installation. If you installed with git clone, see If you installed with Git.
1

Back up

Follow Backups: the database and your .env. A CSV export is a useful extra copy of your collection, but it does not include your owner account, sessions or access tokens.
2

Read the release notes

Read the notes below for every version newer than yours, and make any configuration changes they ask for before starting the new version.
3

Go to your plamotrack folder

4

Download the new version's files

Use the number of the version you’re updating to; the newest is v0.6.0-alpha. Run this as one line. It replaces the old release files, and your .env stays as it is:
5

Check the files

Every file should say OK. Don’t start the new version from files that fail this check.
6

Start the new version

The migrate service applies any new database migrations before the API starts. You do not run a separate migration command.
7

Check the result

The db, api and web services should be running. migrate should have finished with Exited (0). Open the app and follow any setup steps in the release notes.
If the update fails, read the migration output and Troubleshooting before continuing. Keep your database intact. To go back, download the previous version’s files the same way and run the same up. That’s safe when the release notes say the two versions share a database schema. Across a migration, use the previous version with your pre-update backup, following the restore guide. Some database downgrades discard data; exceptions are called out below.

If you installed with Git

Versions before v0.5.2-alpha were installed with git clone and built on your computer. You can move that installation onto the release files and keep everything: your collection, your owner account and sign-ins, your access tokens and your connected AI assistants. These steps assume your folder is ~/plamotrack, as the older Installation guide made it. Use your own folder’s path if it’s different.
1

Back up

Follow Backups: the database and your .env.
2

Check for a file of your own

From your plamotrack folder, run:
It should say there is no such file. If there is one, you or a guide you followed created it, and these steps don’t cover it. Stop here and keep your installation as it is.
3

Stop plamotrack

Never add -v here: that would delete your database.
4

Move the Git folder aside

5

Download the release files into a new plamotrack folder

Follow steps 1 and 2 of Install plamotrack: make ~/plamotrack, download the files and check them. Don’t create a new .env from env.example.
6

Bring your existing settings across

Use your existing .env, not the template. It holds the password your database was created with, and your sign-in and assistant settings. If it has COMPOSE_FILE or COMPOSE_PATH_SEPARATOR lines, delete them: the release files don’t need them.
7

Start plamotrack

Sign in and check your collection. Your AI assistants stay connected.
Why the folder’s name matters: Docker Compose uses the folder’s name to name the volume that holds your database. The new folder has the same name, so it uses the same volume and finds the same database. The old folder, now plamotrack-source, would get a volume of its own: if you ran it, it would start a separate, empty plamotrack and couldn’t touch yours. Once you’re happy with the move, you can delete it. To go back: run docker compose down in ~/plamotrack. Then swap the folder names back with cd ~ && mv plamotrack plamotrack-release && mv plamotrack-source plamotrack, and run docker compose up -d --build --wait in the Git folder. Your database is the same one either way.
If you’d rather keep building from Git:
1

Back up

Follow Backups.
2

Add two lines to your .env

An installation set up from v0.5.0-alpha or earlier doesn’t have them. Add them at the top of .env:
Without them, the update stops with error from registry: denied before changing anything.
3

Pull the code

4

Rebuild

Keep --build on every update.

Changelog

7 October 2026

Import from a phone, and lists that fit

  • A phone imports. Settings → Data management on a phone now imports as well as exports: tap Choose a file, pick a .zip archive or a .csv, preview it and apply it with Merge or Add only. Replace everything and the full template pack stay on a tablet or a computer; the starter sheet is on the phone too. See Phone & Tablet.
  • A phone shows every row. Kits, Orders, Inventory and Retailers on a phone are one long list instead of ten a page; search and the filters narrow it. Tablets and computers still show ten a page.
  • Lists fit their space, whatever they hold. From tablet width up, a list’s table moves a column under the name when the whole table doesn’t fit, and only then. A long word with no spaces in it — a product code run together, say — breaks across lines instead of pushing the row’s edit button out of sight, on the lists and on Home. Ordinary rows look as they did.
  • Home lists the bench by build start date and Recently completed by completion date, the dates the cards show. A Backlog or Recently completed row whose details don’t fit beside the name puts them under it. Kits opens on Newest added, with Oldest added, Recently started, Recently completed and Name A–Z; “Newest first” is gone.
  • An import keeps going if you leave the page. Come back to Data management to see it under way, then how it ended. An import with an out-of-range number — a rating outside 1 to 5, a negative price or stock level — is refused in the preview, naming the row and column, instead of failing when applied.
  • Settings says an error beside the control that caused it, and shows dates and sizes in your saved format as soon as the page loads.
  • The keyboard stays where you pressed. The stock steppers, Export CSV, Save, Create token, Revoke and Sign in keep the keyboard while they wait; where a button can’t be pressed again, the keyboard moves to the next sensible control.
  • AI assistants. create_order names its shop by retailer_id (from list_retailers) or by name; an id given as a name is refused instead of becoming a new shop. list_kits sorts by newest, started and completed as well as recent. In OIDC mode, an assistant now links through a provider that enforces RFC 8707 with no extra setup, and Pocket ID is a supported provider.
  • Configuration. A database password with punctuation in it no longer stops migrate, and a settings error at startup no longer prints fragments of .env’s secrets into the logs.
Update notes: This release has one migration. It clears any negative shipping cost or low-stock threshold to blank, then the database refuses one. Only an import made with an earlier version could have stored one; the migrate log says how many it cleared. Back up before updating, as always: returning to v0.5.2-alpha means restoring that backup. There are no new settings.
  • If you shared a log from a startup settings error with an earlier version, rotate what it showed: the database password’s first characters, or the end of MCP_OAUTH_SIGNING_KEY or OIDC_CLIENT_SECRET.
  • If you use Pocket ID and registered your instance’s /mcp with it as an API, delete that registration after updating. Your assistant asks you to reconnect once.
  • If an AI agent records orders for you, it now names the shop by its id or its name. Refresh any agent skill built against an earlier version; the Gunpla skill in this release’s files is up to date.
Known limitations at release: The order-dialog limitation from 0.4.0 is still open (#238).Full release notes
23 September 2026

Install with Docker alone

  • Each release now carries its own install files. The release page has a docker-compose.yml with every image pinned by digest, for both linux/amd64 and linux/arm64, plus env.example, the Gunpla skill’s plamotrack-gunpla.zip, release.json and SHA256SUMS. In an empty directory, check the files with sha256sum -c SHA256SUMS, copy env.example to .env, set the database password, and run docker compose up -d --no-build --wait. No Git checkout or registry login is needed.
  • No moving channel. There is no latest tag. Updating means choosing the next version on purpose.
  • The application itself is unchanged from 0.5.0. There is no 0.5.1: that version was tagged but never published, because GitHub renamed one of its files on upload.
Update notes: From 0.5.0 there are no migrations, authentication changes or new settings. A source installation needs two lines at the top of .env before it updates:
Without them, the update stops with error from registry: denied before changing anything. Better still, move it onto the release files: see If you installed with Git. Returning to v0.5.0-alpha means checking out that tag and removing those two lines (0.5.0 has no docker-compose.build.yml), then rebuilding. Moving an existing installation onto the release files keeps its folder name, and with it the same database volume.Known limitations at release: On the stock steppers, keyboard focus is not kept on the button after a press (#268). The order-dialog limitation from 0.4.0 is still open (#238).Full release notes
20 September 2026

plamotrack on a phone and a tablet

  • Three layouts, chosen by the width of the window. On a phone: a tab bar under your thumb, lists as cards, forms as full-screen sheets with their buttons at the foot of the screen, and one Filter and sort sheet on Kits and Orders. On a tablet or in a narrow window: a rail of icons, and tables that fold their columns to fit instead of scrolling sideways. From 1280 px wide it is the desktop layout as before. See Phone & Tablet.
  • Add it to your home screen on iOS, iPadOS or Android and it opens in its own window, still signed in. There is no offline mode.
  • Settings on a phone opens as a list of its sections. Data management there offers the exports only — importing and the blank templates need a screen at least 768 px wide.
  • Large text holds up. On a phone, rows wrap and long names break rather than pushing anything off the screen, up to two and a half times the browser’s default text size.
  • Keyboard focus keeps its place when a tablet is turned or a window is resized, including with a dialog open.
Update notes: From 0.4.1, there are no new migrations, authentication changes or settings. Run the normal update and sign in as before. Returning to v0.4.1-alpha only requires checking out that tag and rebuilding; the two versions use the same database schema.One change on the desktop: between 1280 and 1361 px wide, the Orders table now shows the order number under the retailer’s name, where an ordinary row used to push the edit control off the table’s edge. Nothing else from 1280 px up has moved.Known limitations at release: On the stock steppers, keyboard focus is not kept on the button after a press (#268). The order-dialog limitation from 0.4.0 is still open (#238).Full release notes
15 September 2026

MCP: the current protocol revision, without dropping older clients

  • Both MCP protocol generations from one endpoint. The server now speaks the current MCP revision as well as the earlier handshake revisions, and each client chooses per request. Nothing to configure. See Protocol versions.
  • Tested clients: Claude.ai, ChatGPT, Gemini Spark, Mistral and MCP Inspector by OAuth sign-in; Claude Code and the mcp-remote bridge from the Claude Desktop guide by personal access token. The OAuth clients were linked before this update and were still linked after it, after a restart and after a restore from backup; the token clients used a token minted before it. See Which clients work.
Update notes: From 0.4.0, there are no new migrations, authentication changes or settings. Run the normal update. Connected AI clients stay connected and personal access tokens keep working. An instance updated from 0.3.x or 0.4.0 may hold a stored copy of Claude.ai’s or ChatGPT’s client description from before; it is used until the first fresh fetch and then removed — nothing to do. One thing only an unusual client notices: a dynamic registration that asks for the private_key_jwt authentication method is refused at registration; none of the tested clients asks for it. Returning to v0.4.0-alpha only requires checking out that tag and rebuilding; the two versions use the same database schema.Known limitations at release: A client description that reached the instance through an intermediate cache is kept for its full lifetime from the moment it arrived, rather than for the remainder (#249). The order-dialog limitation from 0.4.0 is still open (#238).Full release notes
10 September 2026

The Workbench interface

  • Home replaces the board. See your current builds, recent backlog additions, completed kits and incoming orders together. Edit cards with the same dialogs used on the list pages.
  • A consistent look, with warm surfaces, amber accents and light, dark or device-controlled themes. Theme choice belongs to each browser.
  • Shareable list views. Kits, Orders, Inventory and Retailers keep their search, filters, sort and page in the URL, so bookmarks reopen the same view.
Update notes: From 0.3.0, there are no new migrations, authentication changes or settings. Run the normal update and sign in as before. Returning to v0.3.0-alpha only requires checking out that tag and rebuilding; these two versions use the same database schema.API and bookmark changes: Orders gain a derived stage. The API adds GET /summary (/api/summary through the bundled web server), and MCP adds get_summary. Kit and order lists accept sort and limit. /board redirects to Home. Update old Orders bookmarks to use ordered, pre_ordered, in_transit or received in ?status=; the old values no longer select a filter.Known limitation at release: The app still uses a desktop layout on phones. An order dialog can remain loading if a catalog request fails (#238).Full release notes
8 September 2026

Your instance has an owner

  • Owner sign-in with a password, or an OpenID Connect provider you configure.
  • Personal access tokens for scripts and MCP clients, with scopes, optional expiry and revocation.
  • OAuth connections for compatible AI clients in OIDC mode, plus host-side recovery commands and an authentication audit trail.
  • Documented remote deployments through a Cloudflare Tunnel or Caddy, with proxy-aware rate limiting.
Updating from a version before 0.3.0 requires setup. Your instance starts unclaimed and collection access requires authentication. The four migrations add authentication tables; they leave your collection intact.
Update notes:
  1. Before rebuilding, check ALLOWED_HOSTS if you use a LAN or custom name. Behind an HTTPS proxy, set PUBLIC_BASE_URL to your public HTTPS address too.
  2. After rebuilding, run docker compose logs api. Find the latest setup token and follow First Run to claim the instance. If you configured OIDC, use the OIDC setup guide.
  3. Give existing scripts and token-based MCP connections a personal access token from Settings → Access tokens. They must send it in the Authorization header. Compatible clients can instead use MCP OAuth in OIDC mode.
/api/meta, /openapi.json and /api/docs also require authentication. For rollback to 0.2.10, restore the pre-update backup with that application version. Downgrading the live schema removes the owner, sessions, access tokens and MCP OAuth links.Full release notes
3 September 2026

The instance knows its own name

Requests for unknown hostnames are refused, browser writes are checked against allowed origins, and the bundled web server adds security headers and consistent endpoint spellings.
Check your hostname before updating. If you use a LAN hostname, mesh name or another custom address, make sure it is allowed in .env. WEB_BIND=0.0.0.0 does not allow every hostname.
Update notes: Add your address to ALLOWED_HOSTS, or set PUBLIC_BASE_URL when accessing the app through an HTTPS proxy; its hostname is allowed automatically. For example:
If you see 421 Misdirected Request, correct the setting and run docker compose up -d again. Your collection is unchanged. This release has no migration.Clients must use /mcp/ and /openapi.json, rather than their old /api/ aliases. REST URLs with an extra trailing slash return 404.Full release notes
29 August 2026

Language and region settings

Instance-wide settings now control language, regional formatting, time zone, date style, hour cycle and reference currency. Settings gains dedicated sections, and REST errors and import diagnostics gain structured codes for translation and automation.Update notes: One migration creates the settings row, carrying across your existing reference currency. After updating, visit Settings → Language & region and choose your locale and time zone. The initial defaults are en-AU and UTC; the reference currency is now managed in the app, with the environment value used only to seed a new instance.Before your next CSV import: Datetimes without an explicit offset now use the instance time zone instead of always meaning UTC. plamotrack archives already include offsets and are unaffected. Automation handling ambiguous order matches should use import.order_match_ambiguous instead of the generic import.match_ambiguous code.Downgrading removes the settings table and loses changes made to those settings.Full release notes
25 August 2026

Withdraw upgrades and recover stuck orders

  • Withdraw an upgrade applied to a kit, explicitly choosing whether the part returns to stock.
  • Edit an order without overwriting kit details changed elsewhere.
  • Use the catalog picker from the keyboard.
  • Delete an old order whose catalog item was removed by an earlier version, so you can re-enter it correctly.
Update notes: No migration or reinterpretation of existing data. If an old order points at a missing catalog item, receiving or editing it still refuses; deleting and re-entering the order is the recovery path.Full release notes
24 August 2026

Order timelines, display gear and reliable imports

Orders gain shipping dates, receipts can be backdated, and kits gain editable build dates and a series field. Display gear becomes a fourth inventory catalog. MCP gains more collection tools, and imports and concurrent edits receive stronger consistency checks. Exported archives now read every table from one database snapshot.Update notes: Three additive migrations add the new fields and display catalog. Downgrading past the display migration refuses while display data exists; keep a backup from before the update if you may need to return to an earlier version.If you imported CSVs before 0.2.7: Check that kit order-line quantities match their attached kits before relying on a new archive for a full restore. Older imports could leave mismatches that a later restore refuses. Kit quantities from early imports explains how to inspect and reconcile them.Work planned for 0.2.6 was included here; there was no separate 0.2.6 release.Full release notes
15 August 2026

Imports honour their preview

Applying an import is now bound to its preview. Ambiguous numbers are reported instead of guessed, archives are checked against their manifests, and upload, unpacked-size and row limits are enforced before expansion.Update notes: No migration. API clients calling /import/apply must send the plan_hash returned by /import/preview. If the file or collection changes, preview again. The browser handles this for you. Use the current rebuild instructions above when updating from a clone.Full release notes
11 August 2026

Preserve an unstated kit scale

A follow-up fix stops an order-line price edit from replacing a kit’s empty or custom scale with the grade’s default. An unchanged kit number is preserved too.Update notes: No migration. If you still run 0.2.4 or 0.2.4.1, update before entering more collection data. Use the kit editor to clear a scale or kit number; typing a replacement in an order line applies it to every kit on that line.Full release notes
11 August 2026

Keep individual kit details during order edits

A hotfix stops unrelated order edits, such as changing tracking, from copying one kit’s details onto the other kits spawned by the order. Fields you intentionally edit on a line still propagate to its kits.Update notes: No migration. This release still had the scale issue fixed in 0.2.4.2. Existing overwritten details are not reconstructed by updating; check affected kits against your own records.Full release notes
11 August 2026

Preserve stock, currencies and upgrade history

Notes-only inventory edits stop overwriting newer stock counts. Order lines keep their own currencies, free shipping stays distinct from an unknown shipping cost, and deleting a kit with applied upgrades is blocked. CSV tool prices use their currency’s decimal places.Update notes: No migration. The order editor still had defects after this release; 0.2.4.1 and 0.2.4.2 contain follow-up fixes.Check older data: Review mixed-currency orders entered through MCP, REST or CSV, especially if you later edited them in the browser. Earlier edits could change a line’s currency and amount to match the order header. These values cannot be identified or corrected automatically. Also check custom kit scales, kit numbers and zero-cost shipping if they changed unexpectedly.Previously deleted upgrade-application records are not restored by the fix. Reconcile any unexplained upgrade stock against your records before adjusting it in Inventory.Full release notes
11 August 2026

Tool costs remember their currency

Tool costs now store a currency alongside the amount. Import fixes prevent a currency-only change from silently relabelling a purchase, and the tool form waits for the instance currency before choosing a default.Update notes: A migration labels existing tool costs with your instance’s reference currency. If you originally entered a cost in another currency, open Inventory → Tools and correct it after updating. The migration has no historical currency record to recover.For a tools.csv exported before this release, add unit_cost_reference_currency if the costs use a different currency from your instance default. Downgrading to 0.2.1 or 0.2.2 clears tool costs in other currencies because the old field cannot represent them.Full release notes
10 August 2026

Money uses each currency’s decimal places

Forms and CSVs handle currencies with three or four decimal places. Imports preserve a conversion’s recorded currency, and unrecognised currency codes produce a warning.Update notes: No migration. Check older amounts in HUF, COP, IQD or MGA: the browser and importer previously disagreed on their decimal places. Compare them with your purchase records and correct any wrong values; the update cannot infer what you originally meant.Full release notes
9 August 2026

Converted prices survive order edits

Order edits preserve recorded conversion amounts. The packaged database is no longer published on port 5432, and backup commands respect your configured database name and user.Update notes: No migration. If you edited foreign-currency orders on 0.1.0 or 0.2.0, check their converted amounts. Updating cannot recover values already lost; use your records or a backup to restore them.Database tools connecting to localhost:5432 must use the container instead. If you copied older backup commands into a script, replace them with the current backup instructions. POSTGRES_BIND is no longer used.Full release notes
9 August 2026

Install the whole app with Docker Compose

The web app, API, migrations and database now start as one stack. The app gains a configurable reference currency, and conversion amounts retain the currency recorded at entry.Update notes: Migrations run automatically. Existing conversion values retain their AUD meaning. Archives from 0.1.0 still import as AUD even when the instance now uses another reference currency.Full release notes
5 August 2026

First public build

The first release introduced kit pipelines, purchase tracking, quantity-tracked inventory, retailer ratings, CSV import/export and an MCP server for collection management.Historical note: This version ran the app from source and had no authentication. The full container installation arrived in 0.2.0 and owner authentication in 0.3.0. Use the current installation guide for a new instance.Full release notes
Release dates use GitHub’s publication dates in UTC. Browse all releases.

Data checks for older instances

Two situations a much older instance can be in. Neither affects a fresh installation.

Kit quantities from early imports

Importers before 0.2.7 could leave a kit order line holding a different number of kits than its quantity said. Nothing in the app minds, but an archive exported from such a collection is refused when you restore it with Replace everything (“this line says quantity N, but this upload supplies M kit(s)”). Check once, before your next export, from your plamotrack folder:
No rows means nothing to do. For each row it lists, open that order in the app and save the line: the order editor reconciles the count against the kits actually there — it spawns a missing one, or leaves an extra one in place once you set the quantity to match. Then export again.

Databases from before the first public release

The migration that introduced pending and received orders marked every order that existed before it as received — those orders had their stock applied at entry, so they were received by definition — but did not touch the kits those orders had spawned. A database that crossed that migration before 6 August 2026 can therefore hold a received order whose kit still says Ordered or In Transit, which the app would never produce on its own. It is cosmetic, and deliberately not repaired by a later migration, since a repair now would overwrite kit statuses set by hand since. If you see such a kit, edit its status; that is the whole fix.