Hello everyone!
We are happy to announce a new release of KoboToolbox! 2.025.02 has been deployed to our Global server at 15:40 UTC on Tuesday, 15 April 2025 and 2.025.02e was released to EU at 11:00 UTC, 23 April 2025. Thanks for using KoboToolbox!
This release consists of:
- KPI version 2.025.02a
- Pyxform version 3.0.0
- Effective as of 2.025.02h, Enketo new version 7.5.1 (see changes below)
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.
Project history logs feature
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 by 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.
- 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.
Project history logs PRs
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
Organizations feature
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!
Organizations PRs
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
Other new features
PRs | Description |
---|---|
kpi#5258 kpi#5258 kpi#5304 kpi#5191 kpi#5212 kpi#5216 |
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 |
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 |
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 charactersIncreased 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 hooksAdd 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#5658 | Ensure atomicity of submissions |
Of Interest to developers
Expand for more detail
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 |
Highlighted Enketo changes between 7.3.1 and 7.5.1
- Fix error when browser language doesn’t have translations
- For signature, annotation and draw questions, don’t scale image when canvas size changes
- Only parse request body for POST, PUT & DELETE endpoints
- Improve Spanish translations, update others from Transifex
- Remove test credentials from production
- Support Node 20 and 22, drop support for older versions
- Upgrade dependencies, particularly signature_pad used for signature, annotation and draw questions
- Fixed translation cache of element with i18nNumber (#1336)
- Hide date widget fake input when rendering pdf (#1341)
- Add support for Google Analytics 4 (#1343)
- Fix issue with displaying image choices in translated form (#1353)
For more Enketo information, consult the full changelog.