Skip to main content

Breaking: custom-field table helpers move out of @trackunit/react-table-helpers

@trackunit/react-table-helpers (from 3.0.0) no longer exports the custom-field column helpers. Those APIs now live in the new @trackunit/custom-field-table-helpers package. If your Iris App still imports them from react-table-helpers, bumping that dependency without running the migration is a compile failure. Apps that only use ExportTableButton are unaffected.

Run these two commands in the consuming repo after bumping the dependency:

npx nx g @trackunit/migrations:migrate
npx nx g @trackunit/migrations:run-migrations

trackunit/iris-app — new workspaces include Trackunit linting

Workspaces created with npx @trackunit/create-iris-app-workspace now come with @trackunit/eslint-plugin-trackunit set up. The root eslint.config.cjs applies the plugin's base and react presets, and every app and extension gets a lint target. Freshly generated apps and extensions pass lint with zero errors and zero warnings. To lint the whole workspace, run:

npx nx run-many -t lint

Upgrading the @trackunit/* packages in an existing workspace doesn't set up Trackunit linting for you. To adopt Trackunit linting in a workspace you already have, follow Linting.

The published presets also no longer include Jest rules; see below if your projects use Jest.

Breaking: router-coupled hooks and Breadcrumb moved to @trackunit/react-router-components

@trackunit/react-components 4.0.0 removes usePersistedState, useSearchParamSync, useCursorUrlSync, MAX_URL_LENGTH, the UrlPersistenceLocation type and Breadcrumb. They now live in the new package @trackunit/react-router-components (first published as 1.0.2), with no compatibility shim: if your code imports any of them, bumping to 4.0.0 without running the migration is a compile failure, not a deprecation warning. Repos that never used them are unaffected.

Run these two commands in the consuming repo:

npx nx g @trackunit/migrations:migrate
npx nx g @trackunit/migrations:run-migrations

Then re-install dependencies (npm install), because the migration adds @trackunit/react-router-components to your package.json.

Breaking: @trackunit/iris-app-playwright 0.3.1 requires awaiting irisApp()

@trackunit/iris-app-playwright 0.3.1 is a breaking release: irisApp() now returns a Promise<FrameLocator> in every environment. Because the package is still pre-1.0, the break shipped as a minor release, so a ^0.2.x range does not pick it up but any 0.3.x does.

Updated 2026-10-28: corrected the version. This entry previously said v1.0.0, which was never released; the change first shipped in 0.3.1.

Await it before using the app fixture:

// Before — no longer works
const app = irisApp();
await irisApp().getByTestId("asset-list").click();

// After
const app = await irisApp();
await app.getByTestId("asset-list").click();

// Or parenthesize a receiver chain
await (await irisApp()).getByTestId("asset-list").click();

AEMP ISO 15143-3: equipment identifiers containing slashes

The Export ISO 15143-3 (AEMP 2.0) equipment endpoints now accept OEM ISO identifiers that contain a forward slash, such as the PIN AB/12345. Send the slash URL-encoded as %2F, for example /15143/-3/Fleet/Equipment/ID/AB%2F12345. Previously, these requests were rejected with 400 Bad Request.

Classic AEMP 1.2 fleet feed moving to the Trackunit Iris platform

Over the coming days, the Trackunit Classic AEMP 1.2 fleet endpoint (api.trackunit.com/aemp) will start getting its fleet data from the Trackunit Iris platform. We are rolling this out gradually, account by account. The endpoint URL, authentication and response format stay the same, and you don't need to do anything.

trackunit/iris-app v2.8.5 - extend generator now scaffolds Vitest, not Jest

Running npx nx g @trackunit/iris-app:extend now scaffolds your extension's unit tests with Vitest instead of Jest, matching the @trackunit/react-vite-test-setup preset already used elsewhere in the SDK's testing guides.

Breaking change: the generator's extendJestPreset option has been removed. If a script or CI step invokes the generator with --extendJestPreset, drop that flag — the generator no longer recognizes it.