Release 2.024.36

Hello everyone!

We are happy to announce a new release of KoboToolbox! It has been deployed to our production servers at 16:00 UTC on Tuesday, 7 January 2025.

This release consists of:

New features

PR Description
kpi#5097
kpi#5175
kpi#5157
kpi#5113
kpi#5109
kpi#5092
kpi#5081
kpi#5143
New Feature: Access Logs
Introducing a UI to go along with the API endpoints that were released in 2.024.33. This release adds a UI component to visualize the access logs on the Account Settings > Security page. All successful authentications to a user’s account are logged. Submission events (if using username and password) are included as grouped entries based on the hour of submission. Access logs are deleted if they are older than a server-wide configured number of days (our current default is 60 days). We also improved the API documentation for the /audit-logs and /access-logs endpoints.

Bug fixes and improvements

PR Description
kpi#5041 Retry REST services only based on specific error codes :warning:
REST Services will only automatically retry after the following errors is returned:
- HTTP 502 Bad Gateway
- HTTP 503 Service Unavailable
- HTTP 504 Gateway Timeout
All other errors will need to be retried manually. Retries will now happen after approximately 60, 120, and 240 seconds.
kpi#5187 Fix UI crash in Data Table for projects with qualitative analysis questions
kpi#5159 Reset check boxes in Projects Table after loading fresh results
kpi#5090 Move Terms of Service and Privacy Policy links inside the darker area to provide better visibility.
kpi#5101 When using pulldata feature in a project with a remote URL, data is now refreshed automatically.
kpi#5104 The Delete Project button label now will be displayed as either “Delete Project” or “Delete Project and Data” to reflect whether the project has submissions to be deleted along with the project or not.
kpi#5075 Improve error message when XForm does not exist
kpi#5122 Notify on deleting submission(s) in the table view using check boxes.
kpi#5096 Fix misalignment of columns in data table after paginating to allow users to see the full height of frozen columns after paginating.
kpi#5046 Improve the accessibility of the button components and minimize the amount of button types in the UI
kpi#5124 Improve billing cycles across time zones
kpi#5079 Change the UI responsible for creating new reports, so it’s clearer how to add new custom report.
kpi#4986 Add django-import-export for organization users

Of interest to developers

PR Description
kpi#5192 Apply Formatting and Linting to Python Codebase. The XForm class has been reformatted to adhere to the defined style standards.
kpi#5176 Implement feature flags functionality to protect users from some in development functionalities.
kpi#5186 Add feature flag-protected routes for new organization views. Adds routes for org settings and org members behind a feature flag.
kpi#5146 Initial implementation of the front end for the project history logs
kpi#5160 Remove tests for Python 3.8 and constraints to maintain compatibility with it. Python 3.8 has reached the end of its life; see this page. Most self-hosters will not notice any change, because all Docker images began using Python 3.10 in April of 2022. Highly technical self-hosters who do not use our Docker images may need to update their environments.
kpi#5161 Drop sizes.scss and replace all variables with px values
kpi#5168 Internal cleanup of Avatar component. Changed function that generates avatar background color from username to generate more consistent spread of colors.
kpi#5036 Refactor project deployment to simplify the way projects are deployed and how KPI interacts with KoboCAT.
kpi#5156 Linting Python code for project deployment back-end class refactoring
kpi#5150 Use main branch for CI badges
kpi#5141 DiffValue component for displaying value change
kpi#5134 Record a project history log every time a project is deployed, redeployed, archived, or unarchived.
kpi#5120 Create the base configuration and samples for adding unit tests with Jest
kpi#5021 Replace default values with (invalid) placeholders to make admins realize the settings are wrong right away.
kpi#5127 Clean-up pytz import removal
kpi#5125 Remove pytz imports and use ZoneInfo instead
kpi#5091 Replace qpath with XPath to no longer use a dash as a group delimiter to address edge cases with qualitative data processing routes
kpi#5108 Create UniversalTable (and PaginatedQueryUniversalTable) components that will allow us to consistently display data in multiple upcoming features.
kpi#5083 Add Python linter to GitHub Actions
kpi#5045 Remove dependency on kobo-service-account package. Since there is no proxy between KPI and KoboCAT anymore, it is not needed anymore.
kpi#5078 Better error handling in new deployment back-end class
kpi#5056 Simplify MockDeploymentBackend
kpi#5073 Refactor of the ServiceUsageSerializer. The calculations and counts were moved to a utility class that can be reused on other places besides the serializer.
kpi#5042 Remove shadow models and KobocatDeploymentBackend class
kpi#5038 Create new deployment backend class
kpi#5037 Replace shadow models imports with their openrosa app counterparts
kpi#5177 Improve efficiency by allowing direct access to the owner of an organization, reducing database complexity and improving speed.
kpi#5158 Use @deprecated JSDoc tag for internal code documentation improvements.
kpi#5144 When using the Django management command ./manage.py createsuperuser a verified email address record is now created. This allows createsuperuser to create an immediately usable superuser account.
kpi#5119 Fix ignore list for flake8
kpi#5148 Fix ModuleNotFoundError: No module named ‘tablib’ error that would occur when attempting to install Python dependencies for development.
kpi#5123 Update NLP README to include information on API calls to improve documentation
kpi#5114 Fix Python formatter error with owner discrepancy in the container
kpi#5166 Patch upstream AlertifyJS library to improve stability when confirmation dialogs are opening or closing.

Of interest to self-hosters

  • kobo-install 10.0.0. Support for Docker Compose v1 has been dropped.
3 Likes

A new patch release 2.024.36a is available and has been deployed to our production servers at 00:00 UTC on Thursday, 9 December 2025:

Bug fixes and improvements

PR Description
kpi#5413 Assign default openrosa model-level permissions to the correct database
kpi#5411 Fix error handling for invalid XLS forms (backport from main)
1 Like

A new patch release 2.024.36c is available and has been deployed to our production servers at 18:00 UTC on Tuesday, 14 January 2025:

Notes: 2.024.36b has not been rolled-out

Improvements

PR Description
kpi#5419 Enhanced error handling to catch more validation errors in XLSForm during deployment
1 Like