Release 2.025.10

Hello everyone!

We are happy to announce a new release of KoboToolbox! 2.025.10 has been deployed to our Global and EU servers at 19:30 UTC on Tuesday, 20 May 2025.

This release consists of:

  • KPI version 2.025.10
  • Pyxform version 3.0.0
  • Enketo version 7.5.1

Organizations member management and invitations

Organization owners and admins can now directly invite and manage their team members. This large feature comprised many pull requests, which you may view below if interested.

List of PRs for organizations member management

kpi#5538
kpi#5531
kpi#5535
kpi#5522
kpi#5509
kpi#5521
kpi#5519
kpi#5513
kpi#5505
kpi#5504
kpi#5479
kpi#5493
kpi#5494
kpi#5503
kpi#5496
kpi#5495
kpi#5480
kpi#5477
kpi#5492
kpi#5458
kpi#5460
kpi#5462
kpi#5457
kpi#5459
kpi#5441
kpi#5424
kpi#5432
kpi#5409
kpi#5395
kpi#5425
kpi#5414
kpi#5422

Other new features

PR Description
kpi#5433
kpi#5430
Project history logs exports

Allow users to export the project history logs for their projects
kpi#5449
kpi#5556
One time add-ons

Make one time add-ons available to users

Bug fixes and improvements

PR Description
kpi#5585 only import Stripe products when stripe is enabled
kpi#5555 remove indent of last item in nlp add-ons dropdown
kpi#5545 display invite accepted banner for users who join another organization
kpi#5546 use toast instead of alertify
kpi#5128 regenerate snapshots when downloading XForm XML
kpi#5528 improve paddings on Project Landing Page
kpi#5536 display banner immediately upon accepting invitation
kpi#5527 use trimmed in all blocktrans blocks
kpi#5523 add background-geopoint question type to display in data table
kpi#5532 hide invitation accepted banner for users who are no longer members of organization
kpi#5490 remove quantity from backend for nlp add-ons
kpi#5464 remove quantity dropdown from frontend for nlp add-ons
kpi#5516 unauthenticated users are now properly redirected to login screen when accessing parts of the app that requires auth
kpi#5512 modal width on large screens
kpi#5501 fix some formatting
kpi#5491 return 404 when retrieving or updating submission extras if submission does not exist.
kpi#5486 fix the router to render the correct error message when error code is neither 401 nor 403.
kpi#5482 add padding to the ‘Log Out of All Devices’ button on the Security page
kpi#5481 remove indent of last item in nlp add-ons dropdown
kpi#5478 do not allow SSO users to register with a different email then the one provided to the server.
kpi#5436 fix occasional problem where tasks end up showing as ‘Processing’ forever.
kpi#5456 correct addon modal usage calculations on usage page
kpi#5450 update subject line for project history log export email
kpi#5439 avoid adding XML declaration when rewriting submission XML and creating asset snapshot
kpi#5443 remove option for API calls to retrieve user-based service/asset usage.
kpi#5440 fix a bug that was causing the plans page to always redirect current user to account settings page.
kpi#5431 do not try to create logs after 404s and return correct error message when page isn’t found.
kpi#5437 add Academy link and update text of existing links
kpi#5428 handle modified-submission audit action properly in Project → Settings → Activity table UI. Hide add-submission audit action from the UI for now.
kpi#5539 add a new endpoint to delete all the permissions for a user by deleting any one of the user permissions
kpi#5517 add submission root uuids to project history logs.
kpi#5529 handle modify-qa-data action in UI
kpi#5489 record project history logs when users update the translations, transcripts, or QA answers of a submission.
kpi#5562 query for users reaching their maximum storage limit
kpi#5544 create new models for mass email

Of interest to developers

PR Description
kpi#5568 organize imports with Biome
kpi#5466 bump tough-cookie and @cypress/request in /cypress
kpi#5470 bump webpack from 5.92.1 to 5.97.1
kpi#4319 Bump minimist from 1.2.5 to 1.2.8 in /cypress
kpi#4187 Bump qs from 6.5.2 to 6.5.3 in /cypress
kpi#4146 Bump minimatch from 3.0.4 to 3.1.2 in /cypress
kpi#5560 remove unused file that is 10 years old
kpi#5461 remove obsolete report Users count by organization from superuser stats.
kpi#5542 add a simple unit test to snapshot regeneration
kpi#5438 remove some deprecated endpoints of v1 not called anymore by KPI
kpi#5510 update t() docstring
kpi#5530 run jobs on release branch
kpi#5282 remove unused import to pass flake8 on main
kpi#5518 skip test_plan_canceled_last_month
kpi#5508 lint utils.ts to stop tests failing
kpi#5498 format with Biome and enforce in CI
kpi#5485 add Biome formatter
kpi#5488 update CODEOWNERS file
kpi#5487 use pinned, active and current node version
kpi#5484 have failed Github Actions notify Zulip
kpi#5483 remove merged JS files that were rewritten in TS
kpi#5463 rename .es6 to .js
kpi#5453 migrate Rest Services code to TypeScript
kpi#3944 Bump jquery-ui from 1.12.1 to 1.13.2
kpi#5454 move landing, summary and map files into separate directories
kpi#5426 migrate project download files to TypeScript
2 Likes