Changelog
Source:NEWS.md
robotoolbox 1.6.2 (2026-04-01)
BUG FIXES
-
Fixed repeat-group detection regression: a recent change made entry into the repeat-group branch too strict and caused some genuine repeat-group forms to be returned as flat tables.
kobo_data()now again relies on the form structure (begin_repeat) to identify repeat-group surveys and returndmoutputs consistently.
DOCUMENTATION
- Clarified
fieldsbehavior for repeat-group forms: repeat-group surveys always return adm; main-table fields can be selected individually; top-level repeat groups are selected at table level; repeat groups are returned in full; nested repeat groups and child columns cannot be selected independently.
robotoolbox 1.6.1 (2026-03-31)
BUG FIXES
Fixed repeat group column assignment in
dmobjects: child tables were inflated with hundreds of spurious all-NA columns belonging to other tables. The internal scope tracking (kobo_form_name_to_list_()) now correctly maps each field to its repeat group, producing child tables that match the KoboToolbox Excel export.Fixed repeat group column assignment in
dmobjects: child tables were inflated with hundreds of spurious all-NA columns belonging to other tables. The internal scope tracking (kobo_form_name_to_list_()) now correctly maps each field to its repeat group, producing child tables that match the KoboToolbox Excel export.Fixed empty-result path in
kobo_data(): zero-submission assets now return the correct structure (dmfor repeat-group forms, filtered columns whenfieldsis set, label-based names whencolnames_label = TRUE). A spurious"NA"column no longer appears.Fixed
kobo_lang_get()andkobo_lang_set()withcolnames_label = TRUEdata: both functions now correctly detect and handle datasets where columns have been renamed to labels.Fixed pagination edge case where
paginate = TRUEwith a single submission produced an invalidpage_sizeof 0.Fixed
build_subs_urls()off-by-one that generated an extra empty API request when submission count was an exact multiple ofpage_size.Fixed
validate_query_()JSON validation: now usesRcppSimdJson::fparse()to actually parse the query string instead of only checking{/}delimiters.Fixed
kobo_token()error on missing URL: now aborts early with a clear message instead of a low-level curl error when no URL is provided andKOBOTOOLBOX_URLis unset.
DOCUMENTATION
- Fixed
kobo_attachment_download()roxygen:overwritedefault corrected toTRUE,folderdescription no longer claims a default that does not exist. - Fixed
kobo_token()example to callkobo_token()instead ofkobo_setup(). -
READMEand intro vignette now mention theKOBOTOOLBOX_PAGE_SIZEenvironment variable as an alternative to thepage_sizeparameter.
robotoolbox 1.6.0 (2026-03-27)
CRAN release: 2026-03-28
BREAKING CHANGES
- Default pagination limit reduced from 30,000 to 1,000 to comply with KoboToolbox API changes effective with KoboToolbox KPI version 2.026.03 (March 2026) on public servers (see https://community.kobotoolbox.org/t/important-changes-to-api-v2-assets-uid-asset-data-result-limits/74610).
- Auto-pagination now triggers at 1,000 submissions (previously 10,000).
-
Attachment filenames now include attachment UID for uniqueness. Files are now named
{att_uid}_{filename}instead of{submission_id}_{filename}to handle cases where the same submission has multiple attachments with identical filenames.
NEW FEATURES
-
Session-level caching for form metadata and languages significantly improves performance for repeated operations. Use
kobo_cache_info()to view cache status andkobo_cache_clear()to clear the cache when needed. -
Language switching without re-downloading data:
-
kobo_lang_set(data, asset, lang)instantly switches variable and value labels to a different language using cached form metadata. -
kobo_lang_get(data, asset)detects the current language applied to a dataset. - Works with both simple
data.frameand complexdmobjects (nested forms).
-
-
Server-side filtering with
queryparameter inkobo_data(): pass a MongoDB-style query string to filter submissions before download, e.g.kobo_data(asset, query = '{"status": "approved"}'). -
Field selection with
fieldsparameter inkobo_data(): fetch only specific fields to reduce data transfer, e.g.kobo_data(asset, fields = c("name", "age")).
BUG FIXES
- Fixed
kobo_audit()andkobo_attachment_download()to handle API changes where theinstancefield was removed from the_attachmentsstructure. - Fixed
kobo_attachment_download()overwrite = FALSEcheck to correctly skip existing files. - Improved error handling for non-JSON API error responses.
- Fixed
val_labels_from_form_()to handle forms withoutvalue_versioncolumn. - Fixed documentation typos in README and vignettes.
IMPROVEMENTS
- Significant performance gains for forms with repeat groups: parallel form version fetching (3x faster) and precomputed label application (5x faster processing) reduce end-to-end time by ~40% on complex forms.
-
kobo_lang_get()andkobo_lang_set()now accept an asset uid string in addition to akobo_assetobject, consistent with other package functions. - Simplified internal attachment processing using
tidyr::unnest()for cleaner code. - Reduced sleep times between paginated API requests for better performance with 1,000 record limit.
- Removed deprecated
vcr::check_cassette_names()from test setup.
NOTES
-
kobo_setup()now accepts apage_sizeparameter (default1000) to configure the maximum number of submissions per API request. Users with private servers that allow higher limits can set this to a larger value (e.g.,kobo_setup(..., page_size = 30000)) to fetch more data per request and avoid unnecessary pagination. - The default
page_sizeis capped at 1,000 for safety on public KoboToolbox servers. -
Known limitation:
kobo_audit()andkobo_attachment_download()currently fetch attachments from the first 1,000 submissions only. Full pagination support for these functions is planned for a future release.
robotoolbox 1.3.4 (2024-12-19)
NEW FEATURES
- Added
kobo_file_listto list all media files availabe - Added
kobo_attachment_downloadto download attached files in a specific folder
BUG FIXES
- if you have a column
var_otherandselect_multiplechoiceotherfor a columnvar, the,var_otheris silently overwritten. It’s fixed now and we rename the duplicate. - text question with numbers are parsed as numbers, it’s fixed now.
-
select_multiplequestions with choices with special characters suchs(,),{or}were breaking the split into dummy variables. Bug fixed. - Fix bug on
paginateinkobo_data - Fix bug in
kobo_auditwhen you have audit data columns are different across submissions.
robotoolbox 1.2.0.9075
NEW FEATURES
- Added a fonction
kobo_auditto get all the audit logs data from a form with audit enabled. It comes with a vignette showing how to read audit logs. - Add a
progressparameter tokobo_data, you can see your progress through custom messages. - Added a logical parameter
select_multiple_labeltokobo_datain order to turnselect_multiplevalues to labels. It’s useful if you want to work directly with labels inselect_multiple - Added a
all_versionslogical parameter tokobo_datato check whether or not you want to include data from all form versions. - Added a
colnames_labellogical parameter tokobo_datato check whether or not you want to include variable labels as column names.
robotoolbox 1.1.0.9000
robotoolbox 1.0.9.9002
robotoolbox 1.0.4.9000
NEW FEATURES
- Update code to remove depecrated
.dataarguments intidyselectfunction. Introduced as oftidyselectversion1.2.0 - Use
readr::type_convertinstead ofutils::type.convertto get the right date, datetime types