KoBoToolbox Customization - Where to start

Hello KoBoToolbox Team, Community, and @mike.destaubin,

we are currently looking into using KoBoToolbox for potential future projects. One of our partners is working with data collectors, who are often less literate. Unfortunately though the data collection in KoboToolbox is very much based on textual questions.

In our current application we are using a question type, that could be described as a picture-based multiple choice questionnaire. From investigating the various parts of KoBoToolbox, I concluded that there is no such question type available. Are there any plans to support such an image-based question type in the future?

Since KoBoToolbox is fitting our needs quite well otherwise, we would like to utilize its strength, like the offline support. We are currently investigating extending the system ourselves to support our needs. It’s a pity that the documentation is relatively minimal.

My research has lead me from enketo-express to the enketo-core. Since I am using [kobo-install] (https:// github .com/kobotoolbox/kobo-install) for the installation on my local machine, it took me some time to modify the created [docker] (https:// github .com/kobotoolbox/kobo-docker) configuration to include my custom widget. The build step of the frontend now includes my custom widget, but it doesn’t show up in the frontend. Are there any other steps required to register the widget? The code of my widget itself is exactly the code of the [textarea] (https:// raw.githubusercontent .com/enketo/enketo-core/master/src/widget/textarea/textarea.js).

Are there any version conflicts in the widget-configuration between enketo-express and enketo-core? [This TODO in the example widget] (https:// github .com/kobotoolbox/enketo-image-customization-widget/blob/master/image-customization.js#L23) implies different versions.

Final question: Am I at all on the right path to adding this functionality or should I choose a different approach? What’s the best way to add such a custom question type? Are there any examples/guides on this out there?


Sorry, new users can only put 2 links in a post.


Such a feature is available in ODK Collect - see https://docs.opendatakit.org/form-question-types/#select-widget-with-image-choices

This has been available in ODK Collect for a while, so I presume [perhaps @mike.destaubin can confirm?] that its working in the current KoboCollect too, although I haven’t confirmed myself. But worst case, you could use ODK Collect for the mobile data capture into Kobo in the interim.

Note, there is no actual support in the Kobo KPI form builder UI for adding an image to a select_one/select_multiple option, but you could always edit the resulting XLSForm manually to add them afterwards. If its important to your application, adding explicit support in KPI for this would probably best be accomplished by opening a suitable feature request to the Kobo dev team.

So ODK Collect and KoBoToolbox are compatible with each other? I can have a KoBoToolbox running and point the ODK Collect app at that instance and my data will be stored. That’s good to know.

The goal is to have our clients configure their own forms without our support. So editing the XLSForm is not an option to us.

Thank you for pointing me to ODK Collect. Can you still give me directions how I would go about creating custom question types, that can be added in the FormBuilder and that show up in web and app?

Take a look at HELP! How to link Kobo server to ODK Collect on Android Tablet

Adding images to select options in the Kobo KPI formbuilder UI is probably not going to be a trivial development task, especially since you are now having to handle media files alongside the raw form data. I’d probably recommend opening a feature request - with any luck maybe its already on the Kobo roadmap… [that is, nope I cant give you directions how you might go about implementing it yourself, sorry]

Okay. Thank you anyway for your answers. That gives us a better understanding of KoBoToolbox. Now we have a good basis for making further moves.