4.3.0 release notes

Known issues

Check the repository for the latest known issues.

Upgrade notes

Continuous downwards replication (the algorithm through which offline users download docs from the server) has been completely rewritten. This change required a high number of view updates, which implies that staging this upgrade and indexing views before upgrading will be a lengthy process - depending on the size of the database. Additionally, the server might need additional storage while this process is ongoing. Users will receive the usual upgrade popup, and they will need to reload the app in order to resume replication.

Breaking changes


UI/UX changes



Adding phone numbers to patients when registering via SMS

The registration transition now supports storing a phone number field for new patients. This is achieved through an additional field in the SMS form, which can be configured to be parsed and validated as a correct and, optionally unique, phone number. You can read more about it in the registration configuration

Performance improvement for downwards replication

Downwards replication has been completely rewritten to improve performance, reduce complexity, remove the necessity of deleted documents tombstones and progress towards supporting eventual consistency, in order to allow for the CHT to work seamlessly with CouchDb high availability setups (multiple replicas). There are no UI/UX changes associated with this update, however users will need to reload the app after the upgrade was successful and they receive the notification popup, in order to resume replication using the new algorithm. The endpoints that the previous replication algorithm was using have been updated or disabled.

Look at this performance comparison table:

# docs# purged docs# docs on device# downloaded docsBefore(avg)After(avg)Difference

New Prometheus API endpoint

A new API endpoint now allows exporting API request performance. The output is formatted for the Prometheus Data Model. The endpoint is available without requiring authentication and is used by CHT-Watchdog. More details are available in API reference docs.

And more…


  • #8204: Support adding phone number when registering patients via SMS
  • #8311: Show password when clicking on the eye icon
  • #8328: Show reports of online user’s associated place and below
  • #8426: Expose an API with endpoint performance metrics


  • #7163: Make the CHT Script API available for Purge.js
  • #8039: Allow users to report client-side crashes via screenshots
  • #8162: Monitoring sentinel when “Transitions are disabled” is difficult
  • #8185: Remove Guided Tour and Welcome message
  • #8280: Set default CouchDb log level to info or debug
  • #8389: Improve Nepali translation
  • #8416: Include formatted date in API morgan logging
  • #8447: Support Nepali digits in Medic ID and LMP Date

Security fixes

  • #6505: Prevent users from opening and filling forms they’re not authorized to see/fill
  • #8335: Use modern TLS versions

Performance improvements

  • #8296: Refactor downwards continuous replication following the Nairobi protocol

Bug fixes

  • #6963: Mark for outbound might create tasks for already sent jobs
  • #7250: Race condition in loading contacts can cause previously selected contact to load
  • #7356: Online user stuck in loading screen when offline
  • #7363: Crash in Tasks/Targets system not creating feedback documents
  • #7651: Tasks content page sometimes throws ExpressionChangedAfterItHasBeenCheckedError
  • #8022: Angular’s ExpressionChangedAfterItHasBeenCheckedError exception in Reports and Contacts tabs
  • #8160: Duplicate outbound requests are sent when a document matches multiple config options
  • #8242: Hovering over dates throws error, and default tooltip is displayed
  • #8355: Fix reports review title in modal
  • #8371: Upgrade cannot be initiated when there are no past upgrade_log entries
  • #8385: Show password icon not cached by service-worker
  • #8396: Next page not loading properly after clicking on the back button
  • #8401: Clicking on report case_id does not apply search filter
  • #8457: API fails to start because of large form attachments exceed POST allowed payload
  • #8463: Offline users stuck on spinner on load until certain views are indexed

Technical improvements

  • #7017: Use the Node eslint plugin to lint api and sentinel
  • #7796: Clean up gruntfile obsolete tasks
  • #8150: Investigate npm workspaces for monorepo
  • #8184: Update initial replication scalability suite post initial replication rewrite
  • #8190: Remove configuration wizard
  • #8244: Upgrade e2e test fails on betas
  • #8252: Flaky: ci-e2e-integration - token login
  • #8273: Add git pre-commit hooks to stop accidental pushes to master as GitHub admins
  • #8281: Change upgrade e2e test to start upgrade from latest release instead of master
  • #8317: Split up the ci-webdriver-default action
  • #8367: Webapp watch not publishing changes
  • #8404: Flaky test: API changes feed should respond to changes even after services are restarted
  • #8412: Flaky test: Submit a death report Should verify that the counter for the Deaths was updated.
  • #8420: Flaky test: ongoing replication “before all” hook for ongoing replication


Thanks to all who committed changes for this release!