Release 2.025.02

Hello everyone!

We are happy to announce a new release of KoboToolbox! It has been deployed to our Global server at 15:40 UTC on Tuesday, 15 April 2025.

This release consists of:

  • KPI version 2.025.02a
  • Pyxform version 3.0.0
  • Enketo version 7.3.1 for production servers - Unchanged from 2.024.36. Enketo will be upgraded to 7.5.1 for self hosters.

Depreciation Notice: We will be decommissioning the KPI V1 endpoints early 2026. Please start using the V2 endpoints as soon as possible to prevent any workflow disruptions. The OpenRosa/KoboCat V1 endpoints will remain.

New Features

PRs Description
kpi#5404
kpi#5241
kpi#5340
kpi#5355
kpi#5339
kpi#5401
kpi#5387
kpi#5364
kpi#5361
kpi#5354
kpi#5347
kpi#5343
kpi#5319
kpi#5313
kpi#5302
kpi#5297
kpi#5270
kpi#5225
kpi#5230
kpi#5223
kpi#5203
kpi#5199
kpi#5193
kpi#5188
kpi#5210
kpi#5211
kpi#5396
kpi#5320
kpi#5368
kpi#5217
kpi#5245
kpi#5383
kpi#5423
kpi#5416
NEW FEATURE: Project History Logs

We’re excited to introduce Project History Logs, a new feature that allows project owners and managers to track and manage project activities directly within the KoboToolbox interface. This feature provides a comprehensive view of project events, ensuring greater transparency, security, and accountability. With this functionality, you will be able to: - View a detailed log of all project activities, including changes to the project, form, data, and permissions. - Access easily in the KoboToolbox interface going to Project > Settings > Activity - Quickly locate specific event types with the filter (e.g., form edits, permission changes). - Use ‘See Details’ for an expanded view of any activity, including associated metadata to assist with security investigations. - Export the entire activity log, receiving an email notification when the download is ready. Data can also be accessed via API. This feature is a significant addition for users and organizations looking to have greater visibility into project activities, monitor security, or keep a historical record for audit and compliance purposes.
kpi#5258
kpi#5258
kpi#5304
kpi#5191
kpi#5212
kpi#5216
NEW FEATURE: Access Logs Export

Access logs can now be downloaded from the Account Settings → Security tab to allow the use of external tools to analyze the usage of your account through the use of more detailed logs
kpi#5238
NEW FEATURE: Background Geopoint question

Supports the Background Geopoint question type which can be triggered to store the GPS location of the device at any point within a survey. For more information on the specifications, look here
kpi#5317
kpi#5391
kpi#5240
kpi#5394
kpi#5342
kpi#5254
kpi#5393
kpi#5392
kpi#5362
kpi#5382
kpi#5358
kpi#5353
kpi#5357
kpi#5315
kpi#5335
kpi#5341
kpi#5329
kpi#5332
kpi#5333
kpi#5249
kpi#5327
kpi#5281
kpi#5299
kpi#5318
kpi#5280
kpi#5312
kpi#5322
kpi#5314
kpi#5253
kpi#5296
kpi#5289
kpi#5261
kpi#5235
kpi#5233
kpi#5287
kpi#5285
kpi#5284
kpi#5266
kpi#5276
kpi#5234
kpi#5218
kpi#5246
kpi#5196
kpi#5232
kpi#5219
kpi#5197
kpi#5215
kpi#5194
kpi#5204
kpi#5189
kpi#5200
kpi#5179
kpi#5182
kpi#5183
kpi#5388
kpi#5310
kpi#5397
kpi#5384
kpi#5378
kpi#5352
kpi#5346
kpi#5252
kpi#5324
kpi#5345
kpi#5331
kpi#5290
kpi#5303
kpi#5294
kpi#5288
kpi#5286
kpi#5262
kpi#5263
kpi#5349
kpi#5348
kpi#5309
kpi#5551
kpi#5534
kpi#5537
kpi#5502
kpi#5451
NEW FEATURE: Organizations

Teams and Enterprise subscribers will now be able to better access the information for their team and change organization settings. Projects created by team members will be owned by the organization while the project creators will maintain manage permissions and all other sharing permissions. Organization owners and admins will be able to modify the roles of members and remove them from the team. Note that the ability to invite users to the organization without contacting support will be coming with the next release!

Bug fixes and improvements

PR Description
kpi#5206 Fix geo-points not displaying in map
kpi#5548 Update android instructions
kpi#5265 Add billing and tracking support for one-time addons
kpi#4925 Add NLP support for background-audio questions
Add support for transcripts, translations, and qualitative analysis of background-audio questions, and improve display of background-audio questions and groups in the data table
kpi#5367 Check default plan limits on backend
Updates backend code to check Stripe products for default community plan limits when determining organization usage.
kpi#5326 Return service/asset usage for current period
Update asset and service usage code to return only a single set of data for the current billing cycle, regardless of whether that cycle is monthly or yearly and adjust frontend accordingly.
kpi#5323 Adjust usage page loading spinner logic
Fix error that was causing infinite loading spinner on usage page for non-Stripe instances.
kpi#5325 Use django storage to handle file objects
kpi#5334 Fixes a 500 being thrown when a non-superuser goes to /admin and then tries to log in as a superuser
kpi#5390 Increase FileField maximum length to 380 characters
Increased the maximum length of FileField models from the default to 380 characters.
kpi#5338 Improve multiple pinned columns handling. Allow pinning columns to right side
Improve pinned column styling based on table having horizontal scrollbar
Add reusable useViewportSize and useWindowEvent hooks
Add extensive story for testing the component, including left/right column pinning, the amount of columns and much more
kpi#5279 Fix main header disappearing on small screens
kpi#5337 Fix NLP features broken on non-Stripe instances
kpi#5272 Fix the detection of the root node tag name of the survey in the XForm XML, respecting the name field in XLSForm settings
kpi#5236 Use default cursor for non-clickable message row
kpi#5220 Load collection child routes properly
kpi#5278 Avoid top gap when scrollbar appears
kpi#5275 Add light-green and make label optional
kpi#5268 Add more Avatar options
kpi#5554 Fix a bug that was causing the plans page to always redirect current user to account settings page
kpi#5550 Fix incorrect in-app message for project transfers
kpi#5533 Fix an issue where the billing period was incorrectly detected for end-of-month cancellations
kpi#5507 Fix a typo that caused attachment transfers to fail during project ownership transfer
kpi#5435 Added the unique identifier rootUuid to the data API response for submissions
kpi#5465 Fix a bug where submissions were not being fully deleted after a project transfer, ensuring proper cleanup in both PostgreSQL and MongoDB
kpi#5455 Fix 500 error when transcribing audio
Take into account subscriptions plan that are addon product type when calculating an organization plan usage limits
kpi#5047 Reject with duplicate UUIDs and XML hashes
kpi#5667 Ensure members have permissions to view project forms and submit data
kpi#5664 prevent 500 error when submission root_uuid is null in data API
kpi#5651 Eensure atomicity of submissions

Of Interest to Developers

PR Description
kpi#5359 Fix typos and formatting in the audit log endpoint documentation
kpi#5291 Rename kebab-case dirs to camelCase
kpi#5164 Query-ify OrganizationContext
kpi#5118 Switch account sidenav to style module
kpi#5406 Add missing fetchPatchUrl, fetchPutUrl, and fetchDeleteUrl to api.ts
kpi#5202 Update AssetResponse object to match latest BE response
Internal improvements
kpi#5311 Improve comparison refs for focused errors
kpi#5237 Update organization prop from AccountResponse TS interface
kpi#5264 Replace mocha-chrome with jest
kpi#5405 Migrate files to TypeScript
kpi#5251 De-duplicate code via UniversalProjectsRoute
kpi#5229 Cleanup files and organize imports
kpi#5330 Reorder PR template in priority order
kpi#5221 Update pull request template
kpi#5198 Add reminder for adding PR tags to template checklist
Add a checklist item to the PR template with a reminder to label PR with frontend/backend tag.
kpi#5301 Removes imports that: - Were marked as deprecated in previous versions in Python 3.8 - Are no longer supported in the Python 3.1x
kpi#5369 Fix stories sorting (abc)
kpi#5306 Move planName
kpi#5293 Linter cleanup
kpi#5295 Skip tests if unaffected
kpi#5269 Remove in-browser mocha test environment
kpi#5415 Rename admin user in fixture
kpi#5260 Use Array for columns prop
kpi#5298 Rename ##placeholder## to :placeholder in urls for consistency sake
kpi#5126 Upgrade pyxform to v2.1.1
kpi#5239 Fix broken and slow pip-compile.sh
kpi#5305 Add new inline message type
kpi#5267 Fix Inline message links
kpi#5292 Set lib to allow ES2021 functionalities
kpi#5389 Introduced a long-running migration to transfer members’ data to their respective organizations.
kpi#5231 Combine legacy kobocat service check into primary service check
kpi#5271 Update failing export test with correct default support email
kpi#5250 Projects filter button styles
kpi#5278 Avoid top gap when scrollbar appears
kpi#5268 Add more Avatar options
kpi#5418 Fix a 500 error from the various audit log endpoints when there are actions by deleted users
kpi#5514 Ensure projects are fully deleted and add a task restarter to restart task abruptly stopped
kpi#5515 Add a migration to clean up outdated task names related to project ownership transfers
kpi#5511 Improve code readability for project ownership transfers by updating comments for better context and renamed tasks with more explicit names to enhance maintainability
kpi#5459 Adjust self-ownership check logic to check owner__username rather than owner_label and drops use of util for determining when to display ‘me’ vs. owner avatar
kpi#5442 Upgrade pyxform to version 3.0.0
kpi#5434 Add a long-running migration to backfill the root_uuid field for old submissions.
kpi#5412 Add theming and storybook entry for a custom ActionIcon component that automatically includes an appropriate sized icon.
kpi#5427 Adjust theme color hsl formatting
kpi#5344 Refactor Mantine Component Library PoC
4 Likes

A new patch release 2.025.02b has been deployed to our production servers at 20:00 UTC on April, 15 April 2025:

Bug and Improvements

PR Description
kpi#5675 Remove fallback logic that retrieved the KPI project from OpenRosa counterpart
1 Like

A new patch release 2.025.02c has been deployed to our production servers at 14:00 UTC on April, 16 April 2025:

Bug and Improvements

PR Description
kpi#5678 fix export tasks stuck in processing
1 Like

A new patch release 2.025.02d has been deployed to our production servers at 20:00 UTC on April, 17 April 2025:

Bug and Improvements

PR Description
kpi#5688 fix 500 errors when updating organization names and loading the projects list
kpi#5689 fix 500 errors when accessing v1 API endpoints
1 Like

A new patch release 2.025.02e has been deployed to our production servers at 15:45 UTC on April, 22 April 2025:

Bug and Improvements

PR Description
kpi#5693 Execute migrations independently with per-migration locking
kpi#5692 Optimize clean_duplicated_submissions command with batching and project scoping
kpi#5690 Optimize heavy migrations to reduce deployment downtime for release 2.025.02

Self-Hosters

This is the first official public release of version 2.025.02.
It combines multiple optimizations introduced across previous patch releases (a, b, c, d) as well as this one (e) which significantly makes the upgrade process easier for instances with large databases.

If your database contains a large number of submissions (see the logger_instance table) and/or a high volume of audit logs (see the audit_log_auditlog table), please follow the steps below carefully when upgrading using kobo-install.

We strongly recommend announcing a maintenance window in advance, as this upgrade requires a short downtime.

Upgrade Instructions
  1. Ensure you’re running version 2.024.36h
    If not already done, upgrade to it first.

  2. Upgrade to 2.025.02e

./run.py --auto-upgrade 2.025.02e
  1. Pull the latest containers
./run.py -cf pull
  1. Activate maintenance mode
./run.py --maintenance
  1. Enter a one-off KPI container
./run.py -cf run --rm kpi bash
  1. Run migrations with SKIP_HEAVY_MIGRATIONS=True
    This prevents heavy operations from blocking access to the database.
SKIP_HEAVY_MIGRATIONS=True ./manage.py migrate
SKIP_HEAVY_MIGRATIONS=True ./manage.py migrate --database kobocat
  1. Create indexes manually in PostgreSQL
    Follow the instructions shown during the migration process to create the required indexes manually.

  2. Exit the container

  3. Deactivate maintenance mode

./run.py --stop-maintenance
  1. Force-recreate the front-end containers
./run.py -cf up -d --force-recreate

Monitor Long-running migrations
After the upgrade is complete, you can monitor the progress of long-running migrations through the Django Admin UI.
Some of them can take a (very) long time to complete.

2 Likes

A new patch release 2.025.02f has been deployed to our production servers at 13:00 UTC on April, 23 April 2025:

The deployment has been reverted at 15:00 UTC on April, 23 April 2025.

Public release and docker hub image 2.025.02f have been removed

Bug and Improvements

PR Description
kpi#5700 enforce maxTimeMS using low-level command to ensure MongoDB query timeout
kpi#5701 reduce the number of stuck tasks restarted to ease DB load
kobo-docker#356 add new MongoDB indexes to improve query performance
1 Like