2.59.1

2026-07-09

This version of Tamanu requires Chrome 149 or later.

Artifacts

central container oci://ghcr.io/beyondessential/tamanu-central:v2.59.1
central linux-amd64 https://servers.ops.tamanu.io/2.59.1/central-2.59.1-linux-amd64.tar.zst
Download
central windows-amd64 https://servers.ops.tamanu.io/2.59.1/central-2.59.1-windows.tar.zst
Download
dbt-manifest any https://docs.data.bes.au/tamanu/v2.59.1/manifest.json
Download
facility container oci://ghcr.io/beyondessential/tamanu-facility:v2.59.1
facility linux-amd64 https://servers.ops.tamanu.io/2.59.1/facility-2.59.1-linux-amd64.tar.zst
Download
facility windows-amd64 https://servers.ops.tamanu.io/2.59.1/facility-2.59.1-windows.tar.zst
Download
frontend any https://servers.ops.tamanu.io/2.59.1/web-2.59.1.tar.zst
Download
frontend container oci://ghcr.io/beyondessential/tamanu-frontend:v2.59.1
mobile android https://clients.ops.tamanu.io/2.59.1/android/tamanu/app-release.apk
patient-portal any https://servers.ops.tamanu.io/2.59.1/patient-portal-2.59.1.tar.zst
Download
patient-portal container oci://ghcr.io/beyondessential/tamanu-patient-portal:v2.59.1

Changelog

Bugfixes 🐛

  • AI: Remove default ai model (#10250)
  • AI: Remove default ai model (#10123)
  • sidebar: TAM-6950: Account for different sidebar in admin panel (#10240)

Features ⭐

  • migrations: add –dry-run to migrate and upgrade (#10248)
  • migrations: add –dry-run to migrate and upgrade (#10147)

Older releases in series

2.59.0

Bugfixes 🐛

  • AI: TAM-2400: AI Encounter summary (#9861)
  • ai: missing patient context (#9998)
  • ai: missing patient context (#9970)
  • ai: missing patient context (#9998)
  • appointments: fix past appointments query on locale-collated DBs (#10114)
  • audit: Add migration to defer user_id FK constraint (HOTFIX 2.59) (#10176)
  • audit: Add migration to defer user_id FK constraint (HOTFIX 2.59) (#10176)
  • auth: fall back to cleartext token storage when Web Crypto unavailable (backport 2.59) (#10153)
  • build: Declare dependencies on @tamanu/build-tooling (2e4645444b)
  • build: Declare dependencies on @tamanu/build-tooling (297bcc7bb0)
  • ci: actions/cache keys (#10041)
  • ci: node_modules cache key (753d351b4e)
  • dashboard: TAM-6950: Navigate on appointments link (#10200)
  • deps: Misplaced @types/umzug dependency declaration, restore Buffer (#10044)
  • desktop: TAM-6927: Patient mark for sync error notification (#10126)
  • desktop: TAM-6954: Encounter programs form empty state (#10211)
  • encounters: TAM-6941: Require display ID input to delete encounter (#10182)
  • fhir: TAM-6904: clean up stale FHIR jobs and incorrect trigger on facility servers (#10101)
  • forms: TAM-6945: Encounter form submission (#10220)
  • invoices: TAM-6943: Discount error (#10191)
  • labs: TAM-4440: remap DiagnosticReport invalidation workflow (#9986)
  • medication: TAM-6856: use Dark colour for already-prescribed inline text (#10034)
  • medications: TAM-6801: preset labels for dispensed medications (#9922)
  • medications: TAM-6813: dispensed medication label text formatting (#9939)
  • mobile: remove obsolete dietId column from encounter (#10052)
  • mobile: transpile logical assignment operators before minification (#10068)
  • mobile: TAM-6947: Workaround for emulator builds (#10194)
  • modals: TAM-6935: Fix modal size (#10166)
  • modals: TAM-6944: Fix display on large modals (#10192)
  • navigation: TAM-6953: Mobile patient filters and recently viewed (#10218)
  • notes: Fix latest handover notes performance (MAIN) (#9984)
  • notes: deterministic note change log ordering (#10096)
  • notes: stable note changelog ordering to fix flaky E2E (32e7fa35c2)
  • patients: TAM-6833: hide Record death link without permission (#9969)
  • provisioning: TAM-6952: Update default ref data (#10208)
  • repo: drop alerts COPY from Dockerfile (#9971)
  • reports: TAM-1331: exclude soft-deleted reports from admin listing (#9944)
  • reports: exclude soft-deleted reports from admin listing (9e8d75dd3d)
  • shared: Polynomial regular expression in legacy visibilityCriteria parsing (#10016)
  • sync: TAM-6834: Fix sync_lookup rebuild when there is custom where (MAIN) (#9958)
  • sync: TAM-6832: Change record_id to TEXT (MAIN) (#9953)
  • sync: Don’t attempt to sync if sync credentials are not configured (#9943)
  • sync: Avoid stack overflow in runFunctionInBatches on large batches (#10017)
  • web: TAM-3996: form response change log (#9810)
  • web: Recently viewed patient list semantics (#10005)
  • web: TAM-4424: DisplayText question type (#9843)
  • web: TAM-3994: Time question type (#9841)
  • web: Translation & icon for ‘Delete’ & ‘Add complex chart’ buttons (#9924)
  • web: Default table cell border colour (#10037)
  • web: add outline border to MUI table cells (6add6f512c)
  • web: TAM-6783: Improve back button behaviour (#9893)
  • web: keep tab param when opening medication modal from notification (003d869148)
  • web: keep tab param when opening medication modal from notification (#10231)
  • web: TAM-6956: Fixed issue where clicking ‘read more’ on notes displays them as a single line (#10237)

Dependencies 📦

  • mobile: Remove extraneous depdency on @tamanu/shared (#10033)
  • scripts: Remove “run”-time dependency on rimraf (#10027)
  • Replace uuidCrypto.randomUUID() (except in @tamanu/mobile) (#10029)- TAM-6849: resolve dependency issues (#9921)- Consolidate actions/cache to v5 (#10042)

Documentation 📚

  • printing: chunked + parallel encounter record PDF rendering (#10061)

Features ⭐

  • AI: TAM-2400: AI Encounter summary (#9861)
  • build: vite consumes shared package source for instant HMR (#10070)
  • db: TAM-6848: database–server version compatibility check (#10081)
  • labs: TAM-6840: update FHIR DiagnosticReport to set resultsInterpretation from conclusion field (#9997)
  • medications: TAM-6801: preset labels for dispensed medications (#9922)
  • medications: TAM-6813: dispensed medication label text formatting (#9939)
  • mobile: TAM-6846: Upgrade react native (#10079)
  • printing: chunked + parallel encounter record PDF rendering (#10061)
  • settings: date formatting locale setting and browser-locale plumbing (#9996)
  • web: TAM-3996: form response change log (#9810)
  • web: TAM-4424: DisplayText question type (#9843)
  • web: TAM-3994: Time question type (#9841)
  • web: TAM-3995: Signature question type (#9931)
  • web: TAM-6850: schema-aware setting inputs (select, editable list, length bounds) (#10011)
  • web: Support all recent Chromium browsers in gate (#10089)
  • web: configurable browser/device support gate (#10092)
  • web: make browser/device support gate configurable via settings (58450583a0)

Performance 🌊

  • build: TAM-6848: build CommonJS & ES modules in parallel (#10021)
  • build: TAM-6849: incremental TypeScript builds (#10023)
  • build: TAM-6849: parallelise internal package builds with Turborepo (#10035)

Refactors 🛠️

  • alerts: Remove all alerts (#9945)
  • buildTooling: Simplify ensureDirectoryExists (#10019)
  • scripts: Use util.parseArgs (#10026)

Repo 📖

  • Embed node runtime in Windows packages instead of via npm (#10086)- embed official Node runtime in the Windows server pack instead of the node npm dep (0e8c6abc55)

Revert ⏪

  • ci: actions/cache keys (#10043)

Testing 🧪

  • e2e: authenticate both frontends in one Playwright session (#10013)

Tweaks ⚖️

  • buildToolling: More legible, less verbose move-dts logs (#10020)
  • constants: TAM-2410: tighten medication types (#10111)
  • constants: Tighten medication types (f1f5b7b435)
  • medications: TAM-2412: Add medication routes (#10125)
  • web: Loading spinner when marking patient for sync (#10110)
  • web: ‘can not’ → ‘cannot’ spelling (#10112)
Copied to clipboard!