4.6.0 release notes

Known issues

Check the repository for the latest known issues.

Upgrade notes

Breaking changes


UI/UX changes

  • #6177: Improve look and utility of the “About” page
  • #7770: Browser compatibility modal notice for Chrome version 75-90
  • #8075: Update default branding to CHT logo
  • #8660: Link to Contact’s Profile from Messages tab


Allow contact searches in forms to be filtered by descendants of the current contact

A contact selector can be used in forms to allow users to select a contact by searching. In addition to limiting the searchable contacts by their type, now you can configure the search field to only show contacts which are descendants of the current contact. This is useful when you only want to allow a user to select specific contacts (such as members of the current household). Learn how to configure this functionality in the documentation.

  • #8074: Support filtering contact search in forms by descendants of the current contact

Official configuration for deploying the CHT to Kubernetes

Configuration files and scripts are now available for deploying the CHT to a Kubernetes cluster. This includes Helm charts, Kubernetes templates, and shell scripts for managing a deployment. See the README documentation for more information.

  • #8695: Provide kubernetes configuration and helm charts for production deployments

Form performance improvements

Performance of CHT forms has been significantly improved! Particularly, large forms with complex calculations will load considerably faster and be more responsive. In our tests, we observed ~60% improvement in load times for a large form when compared with 3.15.0 (and a ~33% improvement over 4.5.0). Other partners have also observed similar results!

  • #7599: Update to latest enketo-core

And more…


  • #8074: Support filtering contact search in forms by descendants of the current contact
  • #8695: Provide kubernetes configuration and helm charts for production deployments
  • #8846: Add the aggregate date to telemetry’s meta


  • #6177: Improve look and utility of the “About” page
  • #7462: Make code for Enketo forms reusable outside cht-core
  • #7770: Browser compatibility modal notice for Chrome version 75-90
  • #8075: Update default branding to CHT logo
  • #8293: Add more debug information to CHT4 Docker Helper
  • #8660: Link to Contact’s Profile from Messages tab

Security fixes

  • #6530: Add rate limiting to authentication endpoints
  • #8843: Add script to bulk change list of users passwords

Performance improvements

  • #7599: Update to latest enketo-core
  • #8771: Update task expiration recalculation queries

Bug fixes

  • #6299: Sync status sometimes says all reports synced when there are changes yet to sync
  • #6395: Pregnancy registration allows first pregnancy and previous miscarriage risk factors
  • #7110: Homeplace in LHS contacts list is not updated on changes
  • #7288: Searching for a contact name that has a short value will return no results.
  • #7674: Answers to non-relevant questions in forms are not immediately cleared with new Enekto
  • #8002: Bullets not displaying properly in form labels
  • #8038: Admin app fails to get releases when a different staging server is passed through ENV to API
  • #8096: Admin password change breaks CHT, shows wrong error message
  • #8102: Crash in enketo-core - TypeError: Cannot read property ’length’ of undefined
  • #8118: “Send Message” action shouldn’t send message to user that is logged in
  • #8131: Training cards are appearing on top of privacy policies
  • #8585: Asterisk for required field in form located on new line when in summary group
  • #8644: cht-healthcheck stays down after ConnectionRestError
  • #8674: Cannot create user for contacts created via Place Api
  • #8689: Users API not responsive
  • #8730: Actionbar does not include links to create people when users have only the can_create_people permission
  • #8777: Error recording telemetry on Firefox
  • #8778: Error in map/reduce function when aggregating telemetry
  • #8790: /api/deploy-info.version is not semver valid for final releases
  • #8796: api/v1/users-doc-count doesn’t work as expected
  • #8868: Session requests failing after upgrade

Technical improvements

  • #7167: Upgrade CHT-Conf version in CHT-Core
  • #7993: Upgrade to Node 20
  • #8357: Flaky test: Enabling/disabling languages should disable a language and enable another
  • #8431: Create an e2e test for receiving phone number in SMS
  • #8697: Default config: Consolidate all the enketo commons selectors
  • #8706: Speed up build execution by breaking up longest running jobs
  • #8707: Make update compose URLs action more reliable
  • #8708: Remove separate action for “Test nginx and haproxy”
  • #8727: Upgrade e2e test fails on MacOS
  • #8739: Infinite scrolling e2e test failing with 429 Too Many Requests
  • #8743: Upgrade to couchdb 3.3.3
  • #8757: Remove standard config
  • #8780: Deprecated use of fs.rmdir with recursive
  • #8783: Sometimes manifest.json is empty
  • #8789: Target aggregates test is passing but shouldn’t be
  • #8791: Update deprecated functions used in generate real-world data script
  • #8819: The ci-webdriver-default-workflows job is really slow sometimes
  • #8855: Integration test should display deploy-info to authenticated users is failing on TAG pushes
  • #8263: Kubernetes configuration, Helm Chart templates and a One-Shot Script that Deploys the CHT Locally on a k3d Cluster
  • #8683: Add implicit-arrow-linebreak to eslint
  • #8710: Fix flaky test - permission-enabled and incorrect-locale
  • #8711: Remove script/deploy dir so it can be re-added under correct author
  • #8723: Add new local integration jobs
  • #8729: Retry publish on conflict when testing
  • #8786: Enable alwaysStrict in webapp tsconfig
  • #8795: Remove unused imports and variables
  • #8800: Add nyc test coverage for API and Sentinel
  • #8808: Add an explanation message to 2 assertions in routing.spec.js
  • #8811: Add coverage to all shared libs tests


Thanks to all who committed changes for this release!