4.4.0 release notes

Known issues

Check the repository for the latest known issues.

Upgrade notes

The deprecated hardcoded national_admin role no longer behaves as a CouchDb admin. The role now behaves as an ordinary online user role, with no additional implicit permissions. Configurations using national_admin role can either switch to using a CouchDb admin for admin-only tasks and/or granting more permissions to national_admin.

Breaking changes


UI/UX changes

CHT dialogs.

CHT dialogs were updated to align with Material guidelines. This includes updating the visual design and text of dialogs to align with best practices.

As part of this work, some translation keys changed. We have provided translations for all of the languages officially supported by CHT (English, Spanish, French, Indonesian, Hindi, Nepali, Bambara, Swahili). If you have a custom language and have any of these features, you will need to translate these in your configuration files.

  • Bulk delete reports dialog

    • bulkdelete.confirm.title: used for the modal title when deleting one report
    • [NEW] bulkdelete.confirm.title.plural: used for the modal title when deleting multiple reports.
  • Edit SMS message group dialog

    • [NEW] edit_message_group.modal.title: used for the modal title
  • Report a bug dialog

    • [NEW] feedback.modal.submit: used for the modal submit button label.
  • Navigation when form not saved dialog

    • [NEW] confirm.destructive.navigation.title: used for the modal title
    • [NEW] confirm.destructive.navigation.submit: used for the modal submit button label.
  • Training cards dialog

    • [NEW] training_cards.confirm.title: used for the modal title
  • Confirmation when verifying a report dialog

    • [NEW] confirm.verification.title: used for the modal title
    • [NEW] confirm.verification.submit: used for the modal submit button label.
  • #8390: Align “dialog” components with Material design guidelines


Upgrading CouchDb to v3.3.2

CouchDb 3 was released in 2020. It packs security fixes, performance and scalability improvements and a plethora of bug fixes.

Most notable features are:

  1. Improved clustering and node management APIs
  2. Adding the _reshard endpoint, which allows splitting a shard into two shards. In CouchDb v2, adding additional shards was not possible without creating a new database with the desired number of shards, and replicating existent data to the new database. For the CHT, this meant that all users would need to re-sync if additional shards were added.
  3. Adding a new _prometheus endpoint, which exposes CouchDb metrics and can be used out of the box in monitoring visualisation tools, like the CHT Watchdog.
  4. Improved security, where database creation and writes/reads are no longer allowed for all users by default.
  5. Improved security, where only CouchDb admins are allowed to add/edit/delete users.
  6. Dramatically improved multi-core CPU usage, resulting in better performance when running on powerful machines. This results in a 1.5x improvement of request time across the board, with some endpoints being up to 10x faster.

Replication performance improvement by persistent caching of purged doc ids

CouchDb request performance analysis has revealed that approximately 25% of CPU time was used querying to determine which documents have been purged for users that are replicating. Because purging is an action that runs on a schedule, relatively infrequently due to how performance expensive it is, caching results from these very expensive queries significantly improves server-side performance.

As of 4.4.0, the CHT caches the purged doc ids for each user that replicates. The cache is reset when purging runs next time and when user replication settings change. This means that, for every connected user, purged docs are only queried once per purging timeframe, when the user first syncs or replicates.

This leads to significant improvements in subsequent replication requests.

4.3.0 vs 4.4.0 Average Synchronization Times




  • #6514: Migrate from SW-Precache to Workbox
  • #8179: nginx and haproxy should respect Accept headers when responding with error templates
  • #8390: Align “dialog” components with Material design guidelines
  • #8442: Telemetry geolocation:failure events for geolocation should be unique
  • #8498: Remove targets disable admin option
  • #8506: Update browser support notice to match official versions
  • #8511: Update configuration deployment action to use latest cht-conf

Security fixes

  • #8443: Masking credentials

Performance improvements

  • #6289: Upgrade to CouchDB v3
  • #8238: Figure out a different way to use purged docs cache
  • #8451: Add support for HTTP/2 in nginx

Bug fixes

  • #6180: Any text containing back ticks looks weird in the webapp
  • #8081: Add contact_type and place_id to contacts exported by /api/v2/export/contacts
  • #8243: Can’t turn off permissions for national_admin role in admin app
  • #8490: API crashes when CouchDB is overloaded
  • #8527: Unable to build nginx with symlinks in some environments

Technical improvements

  • #6132: Files containing tests should use the .spec.js extension
  • #8306: Replace grunt with npm scripts
  • #8414: Flaky test: sms-gateway api returns list and updates state
  • #8459: Update nginx to latest
  • #8469: Scalability suite fails because Jmeter version no longer exists
  • #8494: Update lodash
  • #8516: Remove unused /api/auth/ endpoint
  • #8518: Encode parameters being used in credentials url
  • #8522: Flaky test: More Options Menu - Offline User all permissions disabled
  • #8524: Remove sub-scripts from package.json
  • #8533: Ignore unimportant step failures in CI build