DHIS version 2.29 is out with many new features, apps and improvements.

Login with admin/district on the demo system.



Dashboard app: A new dashboard app is now available which lets you arrange the dashboard items in a completely flexible way. It features better dashboard search, allows you to create shortcuts by marking dashboards as favorites, switch between visualization types such as pivot, chart and map and insert free-text items. Dashboards can be shared, translated and filtered.

Screenshot 1 | 2 | Demo | Docs

Maps app: A new maps app (previously GIS) is available, offering a new, intuitive and user-friendly interface for creating map layers. It lets you arrange the order of map layers in a simple way, and view the map data in a data table. Any number of map layers can be added to a map, even layers of the same type. The contents and order of map layers can be viewed in the left side menu.

Screenshot 1 | 2 | Demo | Docs

Last value aggregation type: A new “last value” aggregation type is available for aggregate and event analytics for data elements and attributes. This aggregation type will use the last available value or event in the time dimension, and either sum or average across other dimensions. This is useful e.g. for facility surveys to analyse data based on the last observation, or for “patients currently on care” type of analysis.

Screenshot | Demo

Pivot table scalability: The pivot table rendering engine is now around 10x more scalable, and allows for very large pivot tables to be viewed in the web browser. This is accomplished through progressive rendering, i.e. the browser will only render what you currently see and not load the entire pivot table into the browser memory.


Event reports table layout download: You can now download event reports in Excel or CSV format in the same tabular format which was rendered in the web browser.


Configurable financial year in analytics: The starting month of the financial year to use in all analytics apps can now be configured in the settings app. Available options are April, July and October.

Screenshot | Demo



Data capture and data view sharing levels: The sharing solution has been extended with two new levels for “data capture” and “data view” access for users and user groups. These levels apply to programs, program stages, data sets and category options, and replaces the link between user roles and data sets/programs. This offers a simplified and more flexible access control solution.

Screenshot | Docs

Tracker programs in maintenance app: You can now create and modify tracker programs in the maintenance app. The workflow for creating programs have been made more intuitive and effective, where stages, sections, data entry forms and notifications can be created from within the main page.

Demo | Screenshot

Integrated search and registration: The steps for searching and registering new tracked entities are now integrated. When registering a new tracked entity instance, the registration form will automatically search for possible duplicates and alert the user in case of suspected duplicates. When a search comes back with no hits, the searched values are carried over to the registration form.

Screenshot | Docs

Improved configurability and security in searches: Search authorization can now be granted to users at any location in the org unit structure, while also allowing for configuration that restricts the information returned in the search results per tracked entity instance. The max number of searchresults can also be restricted, to avoid general searches returning long lists of tracked entity instances.

Screenshot | Docs

Sending of messages based on program rules: You can now create program rules which trigger messages to be sent to designated recipients (through SMS, email or DHIS 2 messages) from a notification template. Messages are triggered when data is received by the DHIS 2 API based on events or tracked entity instances. This is useful e.g. for disease surveillance, where certain conditions would trigger an immediate message to a case investigator to follow up a notifiable case.

Demo | Docs

ID-generation based on functional patterns: Unique IDs can now be generated based on a configured pattern. The patterns can contain various components such as org unit code, year and sequential numbers.

Demo | Tutorial | Docs

Program indicator custom date boundaries: Program indicators can now query data relative to the reporting period. In the program indicator user interface there are now options for customizing what data is used in the evaluation of the program indicator. As an example, an indicator could evaluate all events up to the end of the reporting period, or evaluate events from enrollments which happened in an earlier period relative to the aggregation period. This is useful e.g. for cohort analysis and for creating moving-average or cumulative program indicators.

Screenshot | Docs

Compare forms when entering tracker data: Individual program stages can be configured to display previous events side-by-side with the current event for ease of comparison.

Screenshot | Docs

Fixed information in top menu for tracked entities: You can now configure a fixed information bar containing key attributes or calculated values for individual tracked entities. The information bar will always be visible at the top of the screen while capturing data for a single tracked entity.

Screenshot 1 | 2

Image type attributes: Images can now be stored as tracked entity attributes and be displayed in lists and the profile widget in tracker capture. When the image value type is used for a data element, the image will be visible in data entry forms.

Screenshot | Docs user guide | Docs API

Attributes for tracked entity types: Tracked entity types can now have attributes. This allows e.g. for searching for attributes across multiple programs which share the same tracked entity type.

Demo | Docs



Job scheduler: A new solution for scheduling of background jobs is now available. With the new scheduling system you can configure exactly when and how often a job should run, job-specific parameters for how the job should be performed and more. Multiple background jobs of the same type can now run simultaneously and provide notifications independently.

Screenshot | Demo | Docs user guide | Docs API

Validation message tickets: Similar to ticket/feedback messages, validation messages now have access to status, priority and user assignment. The messages will inherit the priority based on the importance of the validation result.

Demo | Docs

In-app authorities: Apps can now contain app-specific authorities which can be assigned to user roles in the same way you assign regular authorities. Apps can use these authorities to grant or restrict access to functionality.


Complete only when compulsory fields filled: A new option is available for data sets which only allows users to complete a data set in aggregate data entry if all compulsory fields have been filled.




Analytics table SQL hooks: This API lets you hook into the resource table and analytics table generation process using custom SQL scripts. These scripts can manipulate the content of the mentioned tables, such as adding, updating and removing rows, to cater for special analytics requirements.


Metadata audit: A new API for auditing of metadata is now available. All creation, edits and deletion of metadata objects are now audited, and the audi trail information includes which properties were changed, at what time and by which user.


Multi-property metadata search: Using the metadata endpoints, you can now filter (search) for objects using tokens (individual words) across the name, UID, code and short name properties.

Docs | Demo



Release Information


Download release and sample database


Documentation and Javadocs


Upgrade notes


Details about each feature on JIRA


Overview of issues


Source code on Github


Demo instance


Instructions for signing up for DHIS 2 mailing lists


Enjoy the new release.

Best regards,

The DHIS2 development team