- 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.
- 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.
-
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.
- 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.
- 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.
- 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")).
- 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.
- 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.
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.
- Added
kobo_file_listto list all media files availabe - Added
kobo_attachment_downloadto download attached files in a specific folder
- 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.
- Support for media question types (
media::image,media::big-image,media::audio,media::video) - Keep the
_attachmentscolumn in the data.
- released to CRAN
- Better version order to use the choice labels of the latest form deployed.
- 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.
- Fixing the following issue: Using
trueorfalseas values inselect_onebreaks the labels. - Revert to
type.convertbecause of flexibility on boolean/logical - Add a fonction to merge the variables from different groups due to different versions of the form used during data collection.
robotoolboxprovides WKT columns forgeopoint,geotraceandgeoshapequestion types, for easier spatial data analysis.- Remove unnecessary list-columns and pre-process
_validation_statuscolumn.
- Fix a bug in
kobo_formwhen you have alist_namein thechoicestab but no associated question in thesurveytab.
- It is now possible to match submissions to form based on the version of the form used even when you're not the owner of the project. This new feature work best with
Kobotoolbox kpiversion2.023.12and up. - When you have child table with differents parent tables, split it and change names.
- Update
purrrto 1.0.1
kobo_dataandkobo_submissionsare faster for surveys withrepeat group.- Add variables as labels when a variable label is missing
- Custom labels for
select_multipledummy variables
kobo_formwas not working with survey with duplicated columns. Duplicared columns will be deduped.
- Update to make it compatible with
tidyr1.3.0 - Hide token when using
kobo_settingsprint method
- 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
- An empty tibble is returned for project with zero submissions
- Fixed bug on
kobo_form
- All columns are exported including columns with no responses
- Adapt vignette to {dm} new features since version one and above.
- Add
retrysupport in simple queries.
- Renaming KoBo to Kobo to match changes made by the Kobotoolbox team
- All values are turn into dummies including values not used