{"title":"Enketo Blog","link":[{"@attributes":{"type":"application\/atom+xml","href":"https:\/\/blog.enketo.org\/feed\/index.xml","rel":"self"}},{"@attributes":{"href":"https:\/\/blog.enketo.org"}}],"updated":"2025-07-09T15:49:56+00:00","id":"https:\/\/blog.enketo.org\/","author":{"name":"Martijn van de Rijdt"},"rights":"Copyright (c) 2010-2013 Martijn van de Rijdt","entry":[{"title":"Kobo is now maintaining Enketo","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/kobotoolbox-enketo\/"}},"updated":"2025-03-17T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/kobotoolbox-enketo\/","content":"<p>We\u2019re excited to share that the <strong>KoboToolbox team has officially taken over the maintenance and development of Enketo<\/strong>.<\/p>\n\n<p>Enketo started in 2009 as a web-based alternative to ODK Collect, and over the years it has become a key part of various data collection platforms including <a href=\"https:\/\/getodk.org\/\">ODK<\/a> and, of course, <a href=\"https:\/\/www.kobotoolbox.org\">KoboToolbox<\/a>. Every day, hundreds of thousands are collecting data through Enketo web forms in KoboToolbox, and we look forward to investing more to make this indispensable tool even better by directly taking responsibility of its future.<\/p>\n\n<p>At KoboToolbox, we\u2019ve relied on Enketo for many years to provide our users with a flexible, browser-based form-filling experience that works both online and offline. We invested a lot in the early days of the platform as an independent platform for webform-based data collection together with its original creator, Martijn van de Rijdt. This included creating Enketo Express to allow fully offline data collection, adding many advanced features that users demanded from the availability on the Collect Android app, and open-sourcing all components of Enketo for wider distribution. Now, we\u2019re proud to be taking on this great project\u2019s future development and ensuring its continued availability as a vital open-source tool for humanitarian, development, and research work worldwide.<\/p>\n\n<p>We\u2019re deeply grateful for the incredible work that Martijn has done over the past decade in creating and leading Enketo, and for the stewardship of the ODK team in recent years that has made the Enketo codebase better, faster, and easier to maintain. We look forward to building on this foundation\u2014continuing to improve performance, security, and compatibility, while also exploring new opportunities to extend Enketo\u2019s capabilities to meet the evolving needs. This will include native audio recording, easier theming, improved user experience for complex form navigation, and much more.<\/p>\n\n<p>We welcome suggestions, contributions, and collaboration proposals! Please post your suggestions on the KoboToolbox <a href=\"https:\/\/community.kobotoolbox.org\/\">community forum<\/a>, we look forward to building this next chapter with all the loyal Enketo users around the world.<\/p>\n\n<p>Many thanks again to everyone who has contributed to Enketo over the years \u2014 you\u2019ve made this an indispensable tool for so many.<\/p>\n"},{"title":"Enketo has joined ODK!","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/enketo-has-joined-odk\/"}},"updated":"2023-05-14T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/enketo-has-joined-odk\/","content":"<p>I started Enketo in 2009 as a web-based alternative to <a href=\"https:\/\/docs.getodk.org\/collect-intro\">ODK Collect<\/a>, the popular Android app for offline data collection. Over time, Enketo has grown into a core component of great products like <a href=\"https:\/\/ona.io\">Ona<\/a>, <a href=\"https:\/\/kobotoolbox.org\">KoboToolbox<\/a>, <a href=\"https:\/\/openclinica.com\">OpenClinica<\/a>, <a href=\"https:\/\/survey123.arcgis.com\">Survey123<\/a>, and of course, <a href=\"https:\/\/getodk.org\">ODK<\/a>.<\/p>\n\n<p>Though I have had a great time developing Enketo and collaborating with so many impressive people, the past few years I have become increasingly interested in working on other things (such as woodworking). In August 2021, the ODK team agreed to take over leadership of the Enketo project. My own involvement in the greater Enketo project has reduced to just a few hours a week, and that work is mostly on custom features for a client.<\/p>\n\n<p>One and a half years after handing over control, it is clear that Enketo is in excellent hands! ODK (especially <a href=\"https:\/\/www.linkedin.com\/in\/yanokwa\">Yaw Anokwa<\/a>, <a href=\"https:\/\/forum.getodk.org\/u\/ln\/summary\">H\u00e9l\u00e8ne Martin<\/a>, and <a href=\"https:\/\/github.com\/eyelidlessness\">Trevor Schmidt<\/a>) have been doing an awesome job adding performance improvements, aligning behavior with ODK Collect, fixing critical vulnerabilities, and many other things. I am very impressed with their thoughtful approach to development (and am learning from it) and their willingness and ability to make big investments in improving the code, toolchain, and maintainability. I am so happy that Enketo is continuing to thrive and am excited about its future.<\/p>\n\n<p>Many thanks to ODK and all of Enketo\u2019s contributors over the years!<\/p>\n\n<p>P.S. If you haven\u2019t used ODK recently, you\u2019re missing out! Request a demo at <a href=\"https:\/\/getodk.org\">getodk.org<\/a> to learn more.<\/p>\n"},{"title":"Huge leap in performance","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/performance-leap\/"}},"updated":"2021-02-04T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/performance-leap\/","content":"<h3 id=\"a-new-xpath-evaluator\">A new XPath evaluator<\/h3>\n\n<p>We have just completed the most exciting, and largest, Enketo improvement project in years - <a href=\"https:\/\/github.com\/enketo\/openrosa-xpath-evaluator\">a new XPath evaluator<\/a>! If you are not familiar with XPath, it is the <em>logic language<\/em> of forms in the ODK ecosystem which is used in <em>calculation<\/em>, <em>constraint<\/em>, <em>relevant<\/em>, <em>required<\/em>, <em>choice_filter<\/em>, and <em>default<\/em> formulas.<\/p>\n\n<p>Back when Medic <a href=\"https:\/\/medic.org\/stories\/we-built-the-mobile-app-that-health-workers-deserve\/\">adopted Enketo<\/a> in their mobile data collection tools for Community Health Workers, they created a new XPath evaluator to replace the one Enketo was using. This new evaluator turned out to be much faster as it more fully leveraged the native XPath evaluator that is built into modern browsers.<\/p>\n\n<p>At the time it was created, it did not yet have all the capabilities that the Enketo Project needed to replace its own XPath evaluator. Moreover, the need to support legacy browsers (without a native evaluator) was still holding us back. However, we started planning a long time ago to make Medic\u2019s evaluator fully <a href=\"https:\/\/getodk.github.io\/xforms-spec\/\">ODK XForms<\/a> spec-compliant and have since <a href=\".\/Enketo-Express-mar-2020-update\/#farewell-internet-explorer\">dropped support for legacy browsers<\/a>.<\/p>\n\n<p>With funding from <a href=\"https:\/\/www.osc.dial.community\/\">DIAL<\/a>, <a href=\"https:\/\/www.openclinica.com\/\">OpenClinica<\/a>, and <a href=\"https:\/\/medic.org\/\">Medic<\/a>, and the wizard-level coding skills of <a href=\"https:\/\/github.com\/alxndrsn\">Alex Anderson<\/a> (who started the initial project for Medic Mobile, and agreed to temporarily join Enketo LLC help finish it using OpenClinica funding), this XPath library is now fully ready to take over logic evaluation across all Enketo tools!<\/p>\n\n<p><strong>Enketo Express version 2.6.0<\/strong> and Enketo Core version 5.17.0 onwards include the new evaluator.<\/p>\n\n<p>And <strong>WOW<\/strong>, the boost in performance has exceeded all expectations! We have evaluated the impact on some extremely slow real-life forms and shared some results below. I should note it is not entirely straightforward to predict the impact for a particular form. We have found (fast) forms that had no noticeable change in loading performance. We have not found any forms that have become slower.<\/p>\n\n<h4 id=\"large-internal-lists-of-options\">Large internal lists of options<\/h4>\n\n<p>A form containing thousands of \u201cselect\u201d options (found <a href=\"https:\/\/github.com\/XLSForm\/pyxform\/issues\/285\">here<\/a>) took over 5 minutes to load with the old evaluator. It now takes 0.4 seconds. A <strong>750x<\/strong> improvement making a previously unusable form perfectly usable! Forms with large \u2018internal\u2019 select lists definitely experienced the largest performance improvement (forms with \u2018external\u2019 lists were already fast).<\/p>\n\n<h4 id=\"large-number-of-repeat-instances\">Large number of repeat instances<\/h4>\n\n<p>A form containing 45 repeat instances (with repeat_count) from an OpenClinica user, improved its loading performance from 25 seconds to 6.5 seconds - a respectable <strong>4x<\/strong> improvement.<\/p>\n\n<h4 id=\"complex-constraint-expressions\">Complex constraint expressions<\/h4>\n\n<p>A form with about 1,000 questions with an enormous quantity of complex constraints from an OpenClinica user improved its loading performance from 7.5 seconds to 0.3 seconds - a <strong>25x<\/strong> improvement!<\/p>\n\n<h3 id=\"thanks\">Thanks<\/h3>\n\n<p>Thanks so much to <a href=\"https:\/\/medic.org\/\">Medic<\/a>, <a href=\"https:\/\/www.osc.dial.community\/\">DIAL<\/a>, <a href=\"https:\/\/www.openclinica.com\/\">OpenClinica<\/a> and <a href=\"https:\/\/github.com\/alxndrsn\">Alex<\/a> for making this epic improvement project possible!<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Important Enketo Express Updates - 03\/2020","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/Enketo-Express-mar-2020-update\/"}},"updated":"2020-03-30T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/Enketo-Express-mar-2020-update\/","content":"<p>This post is meant for people that are running their own Enketo Express installation and particularly those that use Enketo\u2019s offline-capable webforms.<\/p>\n\n<h3 id=\"a-big-change\">A BIG change<\/h3>\n\n<p>Chrome version <del>83<\/del> 85 (expected in <del>May<\/del> August 2020) will <a href=\"https:\/\/web.dev\/appcache-removal\/\">no longer support a caching technology<\/a> Enketo has been using since 2012 to launch offline.<\/p>\n\n<p>Thankfully, there is a better technology available that is widely supported across all modern browsers and Enketo Express has switched to this technology in version 2.0.0 in March 2020. Users will have to refresh one of the offline-capable webforms they are using to switch to this new type of cache once this version has been deployed by you. The new webform URLs will also be slightly different but old URLs will be redirected automatically.<\/p>\n\n<p>It is recommended to take 2 steps to best deal with this change.<\/p>\n\n<h4 id=\"1-upgrade-to-enketo-express-186x-very-soon\">1. Upgrade to Enketo Express 1.86.x very soon<\/h4>\n\n<p>It is best to first upgrade to one of the 1.86.x versions as soon as possible. This version includes a change that will provide a helpful dialog to users letting them know when to refresh the webform. This will reduce the need for user support by you. Note that the (presumably) largest Enketo Express users, <a href=\"https:\/\/kobotoolbox.org\">KoboToolbox<\/a> and <a href=\"https:\/\/ona.io\">Ona<\/a> have already upgraded to 1.86.x and have not reported any issues.<\/p>\n\n<h4 id=\"2-upgrade-to-enketo-express-2xx-at-least-one-week-later-but-before-chrome-83-is-released\">2. Upgrade to Enketo Express 2.x.x at least one week later but before Chrome 83 is released<\/h4>\n\n<p>The rationale for waiting at least a week, is to give most of your users some time to update their cached Enketo application (and get the helpful modal dialog). They may not open their webforms every day or may be out in the field without Internet. You will of course know better what amount of time is appropriate for your users.<\/p>\n\n<h3 id=\"farewell-internet-explorer\">Farewell Internet Explorer<\/h3>\n\n<p>The switch to the new offline caching technology also means that we have to finally completely drop support for Internet Explorer. Internet Explorer users will be redirected to a <a href=\"https:\/\/enke.to\/modern-browsers\">modern-browsers page<\/a>.<\/p>\n\n<h3 id=\"a-nodejs-change-in-version-210\">A Node.js change in version 2.1.0.<\/h3>\n\n<p>Enketo Express version 2.1.0 and onwards will require Node.js version 12. Any Enketo Express version before 2.1.0 requires Node.js version 8. This is a good way to make this upgrade:<\/p>\n\n<ol>\n  <li>Remove the <code class=\"language-plaintext highlighter-rouge\">node_modules<\/code> folder from your Enketo Express installation<\/li>\n  <li>Upgrade Node.js to version 12<\/li>\n  <li>Upgrade Enketo Express to version 2.1.x or later<\/li>\n<\/ol>\n\n<p>You may decide to skip 2.0.x and go straight to 2.1.x or later of course. There should be no problem doing that.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Encryption","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/encryption\/"}},"updated":"2018-10-05T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/encryption\/","content":"<p>Enketo now has full support for encryption-enabled forms! This long-requested feature is compatible with other tools in the <a href=\"https:\/\/opendatakit.org\">Open Data Kit<\/a> ecosystem and of course in particular with <a href=\"https:\/\/opendatakit.org\/software\/odk1\/#odk-briefcase\">ODK Briefcase<\/a>, the primary tool for decryption.<\/p>\n\n<h3 id=\"why-use-this\">Why use this<\/h3>\n\n<p>Enketo has always facilitated encryption of data <strong>during transport<\/strong> from the browser to the data server (e.g. to Aggregate, Ona, KoboToolbox) just like any website that uses an \u201chttps\u201d web address (note that both Enketo and the data server need to be using https). However, some projects also require sensitive data to be securely encrypted <strong>while it is still stored on the device and while it is stored on the data server<\/strong>. This new feature responds to that requirement.<\/p>\n\n<h3 id=\"how-it-works\">How it works<\/h3>\n\n<p>Encryption takes place as soon as the record is finalized and saved.<\/p>\n\n<p>A random single-use encryption key is generated by Enketo, and this is used to symmetrically encrypt all data including file uploads such as photos. The form definition includes a public RSA key that is used by Enketo to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Public-key_cryptography\">asymmetrically encrypt<\/a> the single-use encryption key. The resulting <em>asymmetrically-encrypted symmetric encryption key<\/em> is passed along with the submission. For those of you interested in the full technical details on the encryption algorithms see <a href=\"https:\/\/getodk.github.io\/xforms-spec\/encryption\">this specification<\/a>.<\/p>\n\n<p>Once the submission has been received on the data server, it can be decrypted in ODK Briefcase. This can be done by <em>pulling<\/em> the submissions and  using the private RSA key to decrypt the symmetric encryption key that was used to encrypt the data.<\/p>\n\n<p>The only person that should have access to the private key is the person that is entrusted with decrypting the data.<\/p>\n\n<h3 id=\"auto-saving-and-saving-as-draft\">Auto-saving and saving as draft<\/h3>\n\n<p>For encryption-enabled forms, Enketo will automatically de-activate 2 features that normally exist in offline-enabled webform views: the <a href=\"\/auto-save\">auto-save<\/a> feature and the ability to save a record as draft. This is done to avoid storing sensitive data without encryption, because even Enketo will not be able to decrypt the data once it is encrypted.<\/p>\n\n<h3 id=\"how-to-use\">How to use<\/h3>\n\n<p>To use this feature the XLSForm needs to include a <em>public_key<\/em> in the settings sheet (and keep the matching private key secret). See the <a href=\"http:\/\/xlsform.org\/en\/#encrypted-forms\">XLSForm specification<\/a> and <a href=\"https:\/\/docs.opendatakit.org\/encrypted-forms\/\">ODK documentation<\/a> for more details. Note that some older tutorials mention an additional need for a <em>submission_url<\/em>. This can be ignored, as that is actually an independent feature that does not relate to encryption.<\/p>\n\n<p>XML wizards may be interested in looking at the <a href=\"https:\/\/getodk.github.io\/xforms-spec\/#encryption\">XForms Specification<\/a>.<\/p>\n\n<h3 id=\"limitations\">Limitations<\/h3>\n\n<p>The only known limitation is that encrypting photos, videos, audio and other uploaded files puts a heavy burden on a low-spec device. If the survey includes file uploads, it is therefore required to always test your survey on actual devices that will be used during collection. In addition, you may want to ensure that the uploaded file size is limited. In the future, a feature will be added to facilitate this by automatically transforming the image to a pixel size that can be set in the XLSForm.<\/p>\n\n<p>Internet Explorer does not support encryption and will just show a helpful warning during load. To work around that lack of support, the best approach is to simply make sure to never use that awful browser for any reason.<\/p>\n\n<h3 id=\"future\">Future<\/h3>\n\n<p>Depending on whether there is a demand, interest, and funding for this, some clever developer could now create a fancy command-line or desktop tool for decryption as an alternative to ODK Briefcase. This would seem like a really fun project for a JavaScript\/Electron developer to take on, and I think the ODK community will welcome it! If interested, let us know and we will quickly split off Enketo\u2019s internal encryption module as a separate npm module so it can be used by multiple projects and be centrally maintained.<\/p>\n\n<p>At some point it may become worthwhile to start a discussion within the ODK group on a new modern encryption specification that is simpler and faster, provides even better security, and offers an easier out-of-the-box implementation across platforms. There is a straightforward path towards adding a new encryption algorithm without affecting users or compatibility of Briefcase with older encrypted data.<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was sponsored by the <a href=\"https:\/\/www.lshtm.ac.uk\/\">London School of Hygiene &amp; Tropical Medicine<\/a> as part of their program to provide <a href=\"http:\/\/opendatakit.lshtm.ac.uk\/\">LSHTM Open Research Kits<\/a> to support global health research. Many thanks to LSHTM ORK for funding this important feature!<\/p>\n\n<p>Also many thanks to the amazing ODK developers Guillermo Gut\u00e9rrez (ggalmazor) and H\u00e9l\u00e8ne Martin (lognaturel) for helping out!<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"July 2018 Update","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/jul-2018-update\/"}},"updated":"2018-07-30T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/jul-2018-update\/","content":"<h3 id=\"improvements\">Improvements<\/h3>\n\n<p>This is a snapshot of the main improvements to Enketo in the past 6 months:<\/p>\n\n<ul>\n  <li>Added basic <a href=\"http:\/\/xlsform.org\/en\/#range\">Range widget<\/a>.<\/li>\n  <li>Added Ranking widget.<\/li>\n  <li>Added URL widget.<\/li>\n  <li>Added <a href=\"https:\/\/docs.opendatakit.org\/form-operators-functions\/#randomize\"><code class=\"language-plaintext highlighter-rouge\">randomize()<\/code> function<\/a> that can be used for choice options (select, rank). This function is exposed <a href=\"http:\/\/xlsform.org\/en\/#randomize-choices\">via a shortcut in XLSForm<\/a> for easy use.<\/li>\n  <li>Added <a href=\"https:\/\/docs.opendatakit.org\/form-operators-functions\/#decimal-time\"><code class=\"language-plaintext highlighter-rouge\">decimal-time()<\/code> function<\/a>.<\/li>\n  <li>Added <a href=\"https:\/\/docs.opendatakit.org\/form-operators-functions\/#distance\"><code class=\"language-plaintext highlighter-rouge\">distance()<\/code> function<\/a>.<\/li>\n  <li>Performance of autocomplete widget with huge external data files (XML or CSV) has improved enormously in Chrome and Firefox (15,000 items is not a problem on most devices!).<\/li>\n  <li>The expression <code class=\"language-plaintext highlighter-rouge\">\". &lt; today()\"<\/code> should now work as expected across time zones (a 5 year old bug).<\/li>\n  <li>The required asterisks (*) now update in real-time if an expression is used.<\/li>\n  <li>All draw widgets now have a download function (like the file upload widgets).<\/li>\n  <li>Drawing and annotate widgets now have an <em>undo<\/em> button.<\/li>\n  <li>File upload widgets now support \u201cnew\u201d, \u201cnew-front\u201d, \u201cnew-rear\u201d on some cutting-edge mobile browsers.<\/li>\n  <li>Reset functionality for draw and file upload widgets now requires confirmation.<\/li>\n  <li>New line and paragraph handling in labels and hints has improved.<\/li>\n  <li>Many styling and accessibility improvements.<\/li>\n  <li>API endpoints for PDF-creation of empty forms and records were added.<\/li>\n  <li>Loading performance has been improved.<\/li>\n  <li>Russian and Polish translations were added.<\/li>\n  <li>Installation has been simplified and the <a href=\"https:\/\/blog.enketo.org\/install-enketo-production-ubuntu\/\">instructions<\/a> were updated. It is recommended to install a new Ubuntu 18.04 server and migrate the configuration and database file to ensure easy future updates.<\/li>\n<\/ul>\n\n<p>All this work was sponsored by <a href=\"https:\/\/www.openclinica.com\/\">OpenClinica<\/a>, <a href=\"http:\/\/kobotoolbox.org\">KoboToolbox<\/a>, and by the <a href=\"https:\/\/survey123.arcgis.com\/\">Survey123 team at Esri<\/a>.<\/p>\n\n<h3 id=\"specifications\">Specifications<\/h3>\n\n<p>The documentation work under the DIAL \u201cdirty jobs\u201d Catalytic Grant on the <a href=\"http:\/\/xlsform.org\">XLSForm<\/a> and <a href=\"https:\/\/getodk.github.io\/xforms-spec\/\">XForm<\/a> specifications has been completed. Many thanks to DIAL for this great boost to the ODK ecosystem!<\/p>\n\n<h3 id=\"future\">Future<\/h3>\n\n<p>A proposal was submitted for a DIAL Strategic Grant. The proposed project entails turning the Enketo Project into a multi-stakeholder-managed project. The proposal was developed by a partnership between <a href=\"https:\/\/www.linkedin.com\/company\/enketo-llc\/\">Enketo LLC<\/a>, <a href=\"https:\/\/medic.org\/\">Medic<\/a>, <a href=\"https:\/\/www.openclinica.com\/\">OpenClinica<\/a>, and <a href=\"http:\/\/kobotoolbox.org\">KoboToolbox<\/a>, with consultation by the ODK leadership.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"February 2018 Update","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/feb-2018-update\/"}},"updated":"2018-02-14T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/feb-2018-update\/","content":"<p>Though there isn\u2019t anything quite as sexy to announce as the <a href=\".\/image-map\/\">Image Map<\/a> or <a href=\".\/drawing\">Draw\/Signature<\/a> widgets, a lot has happened.<\/p>\n\n<h3 id=\"improvements\">Improvements<\/h3>\n\n<p>Here is a snapshot of the recent improvements in Enketo:<\/p>\n\n<ul>\n  <li>Full support for the annotate widget. Try it out in the <a href=\"https:\/\/enke.to\/widgets\">widgets<\/a> form.<\/li>\n  <li>Date and time handling has much improved.<\/li>\n  <li>File pickers now have a download option - particulary useful for editing or viewing draft records or submitted records.<\/li>\n  <li>File pickers now show the maximum acceptable file size before uploading.<\/li>\n  <li>Many more messages are translatable. You can help <a href=\"https:\/\/www.transifex.com\/enketo\/enketo-express\/dashboard\/\">translate here<\/a>.<\/li>\n  <li>Printing has much improved, especially for complicated widgets.<\/li>\n  <li>Groups and repeats are now collapsible.<\/li>\n  <li>Styling of radiobuttons and checkboxes is now consistent in Firefox and Internet Explorer 11.<\/li>\n  <li>Modal dialogs are now consistent - previously there were 2 very different types.<\/li>\n  <li>Dozens of bugs were fixed.<\/li>\n  <li>Architecture of Enketo Core library has improved to make it easier to integrate Enketo\u2019s form engine into applications.<\/li>\n<\/ul>\n\n<p>All this work was sponsored by <a href=\"https:\/\/www.openclinica.com\/\">OpenClinica<\/a>, <a href=\"http:\/\/kobotoolbox.org\">KoboToolbox<\/a>, <a href=\"https:\/\/ona.io\">Ona<\/a>, and by the <a href=\"https:\/\/survey123.arcgis.com\/\">Survey123 team at Esri<\/a>.<\/p>\n\n<h3 id=\"xforms-and-xlsforms-documentation\">XForms and XLSForms documentation<\/h3>\n\n<p>I\u2019m also pleased to announce that the <a href=\"https:\/\/digitalimpactalliance.org\/\">DIAL Impact Alliance<\/a> has provided a \u2018dirty jobs\u2019 grant to Enketo to help clear the backlog in <a href=\"http:\/\/xlsform.org\/\">XLSForm<\/a> and <a href=\"https:\/\/getodk.github.io\/xforms-spec\/\">XForms<\/a> documentation. This documentation is very important for the health of the <a href=\"https:\/\/opendatakit.org\/\">Open Data Kit<\/a> (ODK) ecosystem that Enketo is a proud member of.<\/p>\n\n<p>Thanks to DIAL and special thanks to 2 of ODK\u2019s amazing contributors: <a href=\"https:\/\/forum.opendatakit.org\/u\/yanokwa\/summary\">Yaw Anokwa<\/a> and <a href=\"https:\/\/forum.opendatakit.org\/u\/ln\/summary\">H\u00e9l\u00e8ne Martin<\/a>, for putting together a succesful grant proposal.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Signature and Draw widgets","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/drawing\/"}},"updated":"2017-08-03T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/drawing\/","content":"<p>On the heels of the amazing new <a href=\"\/image-map\/\">Image-map<\/a> widget, I have the pleasure of announcing the completion of the often-requested <strong>Signature<\/strong> widget. Adding to all the excitement, a <strong>Draw<\/strong> widget is now also available to further improve compatibility of the tools in the ODK ecosystem. Click the image below to test the new widgets right away.<\/p>\n\n<p><a href=\"https:\/\/enke.to\/draw\"><img src=\"..\/files\/2017\/08\/draw.png\" alt=\"&quot;Drawing Widgets demo&quot;\" title=\"Drawing Widgets demo\" \/><\/a><\/p>\n\n<h3 id=\"how-to-use\">How to use<\/h3>\n\n<p>In your XLSForm just add \u201csignature\u201d or \u201cdraw\u201d under the appearance column for an image-type question.<\/p>\n\n<p><a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1Pw60xxOwKE5rHS2WkYGejfJ7knVVlKpGGVsPTp1Yqg0\/edit?usp=sharing\"><img src=\"..\/files\/2017\/08\/draw-xlsform.png\" alt=\"&quot;Signature XLSForm syntax&quot;\" title=\"Signature XLSForm syntax\" \/><\/a><\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was made possible by funding from <a href=\"https:\/\/www.openclinica.com\/\">OpenClinica<\/a> as part of their ongoing Enketo Support Operations. Many thanks!<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Image Map Widget","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/image-map\/"}},"updated":"2017-07-13T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/image-map\/","content":"<p>There is very exciting new select widget in Enketo that can be used to select a region from an SVG image. Click the demo below.<\/p>\n\n<p><a href=\"https:\/\/enke.to\/imgmap\"><img src=\"..\/files\/2017\/07\/image-map.png\" alt=\"&quot;Image Map Demo&quot;\" title=\"Image Map Demo\" \/><\/a><\/p>\n\n<h3 id=\"how-to-use\">How to use<\/h3>\n\n<p>The XLSForm syntax for this widget is very simple. Add an SVG image and the appearance \u201cimage-map\u201d to any regular select or select_one widget.<\/p>\n\n<p><a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1kXZ9IkWsc8iEXfN0Uosl8giJIBTf428dEBWNkhXXU3M\/edit?usp=sharing\"><img src=\"..\/files\/2017\/07\/image-map-xlsform.png\" alt=\"&quot;Image Map XLSForm syntax&quot;\" title=\"Image Map XLSForm syntax\" \/><\/a><\/p>\n\n<p>The next step gets a little more involved as we need to link the values of the choices (i.e. the \u201cname\u201d column in XLSForm) to correspond with the \u201cid\u201d attributes on the paths or groups in the SVG document. A particular id can only be used on 1 element in the SVG document. The easiest is probably to create a regular choice list in XLSForm first and then edit the SVG file <em>in a text editor<\/em> (SVG is just text).<\/p>\n\n<p><img src=\"..\/files\/2017\/07\/choices-xlsform.png\" alt=\"&quot;Image Map Choices XLSForm syntax&quot;\" title=\"Image Map Choices XLSForm syntax\" \/><\/p>\n\n<p><img src=\"..\/files\/2017\/07\/choices-svg.png\" alt=\"&quot;Image Map Choices SVG syntax&quot;\" title=\"Image Map Choices SVG syntax\" \/><\/p>\n\n<p>As far as we know, any SVG image could be used to make certain \u201cpaths\u201d (<code class=\"language-plaintext highlighter-rouge\">&lt;path&gt;<\/code>) or \u201cgroups\u201d (<code class=\"language-plaintext highlighter-rouge\">&lt;g&gt;<\/code>) clickable, but there may very well be surprises for some complex images.<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was made possible by funding from <a href=\"https:\/\/kobotoolbox.org\/\">KoboToolbox<\/a> under their project with WFP. Many thanks to them!<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Enketo Customization","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/enketo-customization\/"}},"updated":"2017-07-12T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/enketo-customization\/","content":"<p>I would like to highlight some changes in Enketo that may be interesting to developers using Enketo tools in their own applications.<\/p>\n\n<h3 id=\"background\">Background<\/h3>\n\n<p>The more popular Enketo becomes, the larger the demand for customization. Not all of these customizations are suitable for inclusion in the common Enketo libraries or the common Enketo Express application. For example, the customization may be specific to a particular group of specialized users or to integration into a specific custom system.<\/p>\n\n<p>One of the main sponsors of the Enketo Project that has frequent customization needs is <a href=\"https:\/\/www.openclinica.com\">OpenClinica<\/a>. This clever company is very aware of the high long-term costs of forking Enketo\u2019s form engine - Enketo Core - and has tried to avoid it by investing in Enketo tools. (Thanks OpenClinica!)<\/p>\n\n<p>Whenever a customization is required that does not belong in the common Enketo tools, an evaluation is made on how to best include it in a way that:<\/p>\n\n<ol>\n  <li>avoids <em>forking<\/em> Enketo libraries and<\/li>\n  <li>avoids <em>changing common files<\/em> in ports of Enketo Express that would increase maintenance (merging) costs.<\/li>\n<\/ol>\n\n<p>Both of these design criteria usually result in reorganizing the code in the common tools to make them more extensible.<\/p>\n\n<p>Despite very substantially changing the behavior of the engine, OpenClinica is still using Enketo Core as <a href=\"https:\/\/www.npmjs.com\/package\/enketo-core\">published on npm<\/a> and therefore will continue to easily benefit from all the ongoing improvements made to it. Merging changes in the main Enketo Express app into their port is also usually painless.<\/p>\n\n<h3 id=\"configuration\">Configuration<\/h3>\n\n<p>In some cases, it has made sense to add alternative form engine behavior and expose this via new configuration options. Examples of recent additions to Enketo tools include:<\/p>\n\n<ul>\n  <li><a href=\"https:\/\/github.com\/enketo\/enketo-core#validatecontinuously\">validate related constraints continuously<\/a> instead of only upon submission<\/li>\n  <li><a href=\"https:\/\/github.com\/enketo\/enketo-core#validatepage\">turn off page-flip validation<\/a><\/li>\n  <li><a href=\"https:\/\/github.com\/enketo\/enketo-core#behaviour-of-skip-logic\">do not clear the values of an irrelevant question immediately<\/a><\/li>\n  <li><a href=\"https:\/\/enketo.github.io\/enketo-express\/tutorial-10-configure.html#piwik\">piwik analytics<\/a> in Enketo Express<\/li>\n  <li><a href=\"https:\/\/enketo.github.io\/enketo-express\/tutorial-10-configure.html#disable-save-as-draft\">disable save-as-draft<\/a> in Enketo Express<\/li>\n<\/ul>\n\n<h3 id=\"widgets\">Widgets<\/h3>\n\n<p>Widgets have been modular for a while now. A widget lives in its own folder and is easy to enable or disable in a particular application. It is also straightforward to add your own custom widget in your own application and still use the common Enketo Core library. Sometimes these widgets make it in the official Enketo Core library without being activated by default such as the <a href=\"https:\/\/github.com\/enketo\/enketo-core\/tree\/master\/src\/widget\/geo-esri\">ArcGIS geo widget<\/a> contributed by the <a href=\"https:\/\/survey123.arcgis.com\/\">Survey123 team at Esri<\/a>.<\/p>\n\n<h3 id=\"evaluation-cascade\">Evaluation Cascade<\/h3>\n\n<p>It has recently become possible to augment the most elementary part of Enketo\u2019s form engine by adding methods at the end of its standard evaluation cascade. A good example can be found <a href=\"https:\/\/github.com\/OpenClinica\/enketo-express-oc\/blob\/master\/public\/js\/src\/module\/Form.js\">here<\/a> (<code class=\"language-plaintext highlighter-rouge\">Form.prototype.evaluationCascadeAdditions = [ constraintUpdate ];<\/code>).<\/p>\n\n<h3 id=\"xpath-evaluator\">XPath evaluator<\/h3>\n\n<p>Due to a requirement by <a href=\"https:\/\/medic.org\/\">Medic<\/a> for their application, and thanks to their contribution, Enketo Core provides an easy way to swap <a href=\"https:\/\/github.com\/enketo\/enketo-xpathjs\">its XPath evaluator<\/a> with <a href=\"https:\/\/github.com\/medic\/openrosa-xpath-evaluator\">another one<\/a> of your choosing.<\/p>\n\n<h3 id=\"everything-else\">Everything else<\/h3>\n\n<p>A major recent change is that Enketo Core now exposes pretty much everything. It is now possible to replace individual functions and override complete modules without forking. Naturally, this is one of the more risky endeavors, as there are no guarantees that Enketo\u2019s internal API stays completely stable, but in some cases the benefits of doing this (vs. forking), outweigh the potential future costs. The risks can also be mitigated by adding sensible tests and using Continuous Integration.<\/p>\n\n<h3 id=\"recommended-customization-approach\">Recommended customization approach<\/h3>\n\n<p>Should you have a need to customize an Enketo library or application, we recommend first opening a GitHub issue in the appropriate repository. If there is interest to include your customization in the common tools, this would be a win-win situation for all. If not, there will be ways we can help you develop a plan that minimizes the future headache of keeping your application up-to-date with the latest version of the Enketo tool(s).<\/p>\n\n"},{"title":"Repeats Revisited","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/repeats-revisited\/"}},"updated":"2017-04-17T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/repeats-revisited\/","content":"<p>We have made some often-requested improvements to how \u201crepeats\u201d behave in Enketo.<\/p>\n\n<h3 id=\"repeat-count\">Repeat Count<\/h3>\n\n<p>The existing \u201cRepeat Count\u201d feature has now become fully dynamic. This means that if at any point the repeat count changes, the number of repeats will automatically be adjusted.<\/p>\n\n<p>To avoid accidentally removing repeats that contain data, we recommend using an advanced form-building technique that requires a confirmation. You can see this technique in action by clicking the image below. See also the <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/132dvmd73Y4fBQbv9cZs1JrDcY3C0y2dt2_IkMMuFJQc\/edit?usp=sharing\">XLSForm<\/a>. Using this confirmation technique is completely optional though.<\/p>\n\n<p><a href=\"https:\/\/enke.to\/count\"><img src=\"..\/files\/2017\/04\/repeat-count.png\" alt=\"&quot;Autocomplete Demo&quot;\" title=\"Repeat Count Confirmation Demo\" \/><\/a><\/p>\n\n<h3 id=\"first-repeat-in-series\">First Repeat in Series<\/h3>\n\n<p>Enketo is now supporting the removal of the first repeat in a series as well. At this moment, a repeat count of 0 (or none) will remove all repeats. <del>We are currently <a href=\"https:\/\/github.com\/enketo\/enketo-core\/issues\/402\">discussing<\/a> enabling the manual removal of the first repeat when no repeat count is used.<\/del> Update: since October 16th, 2017, the first repeat can also be manually removed if repeat count is not used (again thanks to Esri funding).<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was made possible by funding from the amazing people of the <a href=\"https:\/\/survey123.arcgis.com\/\">Survey123 team at Esri<\/a>.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Autocomplete","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/autocomplete\/"}},"updated":"2017-04-03T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/autocomplete\/","content":"<p>Enketo added support for autocomplete widgets at the beginning of March 2017.<\/p>\n\n<p>This widget turns a regular \u201cselect one\u201d question into a search box. It\u2019s very useful for long lists. Click the form below for a demo.<\/p>\n\n<p><a href=\"https:\/\/enke.to\/search\"><img src=\"..\/files\/2017\/04\/autocomplete.png\" alt=\"&quot;Autocomplete Demo&quot;\" title=\"Autocomplete Demo\" \/><\/a><\/p>\n\n<h3 id=\"how-to-use\">How to Use<\/h3>\n\n<p>Simple add appearance \u201cautocomplete\u201d to a \u201cselect one\u201d question. That\u2019s all.<\/p>\n\n<p><img src=\"..\/files\/2017\/04\/autocomplete-xlsform.png\" alt=\"&quot;Autocomplete XLSForm usage&quot;\" title=\"Autocomplete XLSForm usage\" \/><\/p>\n\n<p>Note that appearance \u201csearch\u201d is an alias and is exactly the same.<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was made possible by funding from the <a href=\"https:\/\/survey123.arcgis.com\/\">Survey123 team at Esri<\/a>. Many thanks to them for supporting the Enketo project and pushing it forward.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Single Submission Surveys","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/single-submission-surveys\/"}},"updated":"2016-09-22T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/single-submission-surveys\/","content":"<p>Enketo now offers the ability to conduct surveys that obtain just a single reponse from each user!<\/p>\n\n<p><a href=\"https:\/\/enke.to\/single\/4c7c494fbfd5cd59e56ef6c68381e77b\"><img src=\"\/files\/2016\/09\/feedback.png\" alt=\"Screenshot of export button\" title=\"Screenshot of feedback survey\" \/><\/a><\/p>\n\n<h3 id=\"why-use-this\">Why Use This<\/h3>\n\n<p>If you want to conduct a single-use survey by sharing a link, you can now use the awesome power and sophistication of <a href=\"http:\/\/xlsform.org\/\">XLSForms<\/a> and Enketo. Finally, there is no longer a need to Monkey around with limited, outdated software for these types of surveys! Think for example of polls and user feedback surveys.<\/p>\n\n<h3 id=\"how-it-works\">How it Works<\/h3>\n\n<p>When the user submits a response to your survey ze will be automatically redirected to a page you specify or to a generic \u201cthank you\u201d page. If the user attempts to submit the same survey again, a message is shown: \u201cYou have already completed this survey\u201d.<\/p>\n\n<h3 id=\"demo\">Demo<\/h3>\n\n<p>See <a href=\"https:\/\/enke.to\/single\/4c7c494fbfd5cd59e56ef6c68381e77b\">this demo<\/a> and submit your response.<\/p>\n\n<h3 id=\"how-to-use\">How to Use<\/h3>\n\n<p>No need to add anything to your XLSForm. You have the following options to use this feature for any form:<\/p>\n\n<h4 id=\"a-be-an-activist\">A. Be an activist<\/h4>\n\n<p>You could actively request any <a href=\"https:\/\/enketo.org\/#tools\">Enketo-powered service<\/a> to leverage this new feature. Those services rely on your feedback to continuously improve.<\/p>\n\n<h4 id=\"b-use-your-own-enketo-express-installation\">B. Use your own Enketo Express installation<\/h4>\n\n<p>Make sure to populate the <a href=\"https:\/\/enketo.github.io\/enketo-express\/tutorial-10-configure.html#less-secure-encryption-key\">new config.json item<\/a> and use this <a href=\"http:\/\/apidocs.enketo.org\/v2\/#\/post-survey-single-once\">API endpoint<\/a> to request a webform URL.<\/p>\n\n<h4 id=\"c-use-the-paid-enketo-service\">C. Use the paid Enketo service.<\/h4>\n\n<p>Use this <a href=\"http:\/\/apidocs.enketo.org\/v2\/#\/post-survey-single-once\">API endpoint<\/a> to request a webform URL from the paid Enketo service, or upgrade your form\/data server when it has added the feature.<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was co-sponsored by Enketo\u2019s Official 2016 Top Sponsor: <a href=\"http:\/\/openclinica.com\/\">OpenClinica<\/a>, and by Enketo LLC.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Better Exports","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/better-exports\/"}},"updated":"2016-04-18T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/better-exports\/","content":"<p>Enketo now provides a way to create <strong>useful<\/strong> export files of unsubmitted records. This works across browsers, even on mobile devices. The most exciting part of this feature is that it creates a zip file that uses the same file and folder naming conventions as ODK Collect. It also includes media files.<\/p>\n\n<p><img src=\"..\/files\/2016\/01\/export.png\" alt=\"Screenshot of export button\" title=\"Screenshot of export button\" \/><\/p>\n\n<h3 id=\"why-use-this\">Why Use This<\/h3>\n\n<p>This feature is meant to serve as a backup to provide additional data security. We recommend regularly creating an export file during long offline periods and\/or accumulating important draft records.<\/p>\n\n<p>Note that export files do not include <em>already submitted records<\/em> since those are removed from Enketo immediately after they are <strong>successfully<\/strong> submitted.<\/p>\n\n<h3 id=\"how-to-use\">How to Use<\/h3>\n\n<p>Click export in the records queue for the form you\u2019d like to export unsubmitted records of.<\/p>\n\n<p>If you need to import these exported records, because data was lost, it is best to contact your provider (i.e. where your data goes) for advice on how best to do this. There may be different options, all outside of Enketo. It is the same procedure that can be used to manually copy data out of ODK Collect.<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was sponsored by one of Enketo\u2019s top sponsors: <a href=\"http:\/\/kobotoolbox.org\/\">KoboToolbox<\/a>, the leading solution for information management in humanitarian aid.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Pulldata support","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/pull-data\/"}},"updated":"2016-01-07T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/pull-data\/","content":"<p>Enketo now supports the pulldata() function. Yes, it\u2019s true, we squashed yet another incompatibility with ODK Collect! This one actually took some creativity. See the table on <a href=\"https:\/\/enketo.org\/openrosa\">this page<\/a> for remaining differences with ODK Collect.<\/p>\n\n<p><img src=\"..\/files\/2016\/01\/pulldata.png\" alt=\"Screenshot of pulldata\" title=\"Screenshot of pulldata\" \/><\/p>\n\n<h3 id=\"how-to-use\">How to Use<\/h3>\n\n<p>See <a href=\"http:\/\/xlsform.org\/#how-to-pull-data-from-csv\">xlsform.org<\/a> for guidance on how to use this function. Note that this requires an <strong>up-to-date version of the XLSForm convertor<\/strong> due to a small-but-important XForm syntax change. The convertor that is integrated into <a href=\"https:\/\/ona.io\">Ona.io<\/a> is up-to-date. Older forms may have to be re-uploaded.<\/p>\n\n<p>The convertor at <a href=\"http:\/\/opendatakit.org\/xiframe\">opendatakit.org<\/a> and Nafundi\u2019s <a href=\"https:\/\/gumroad.com\/l\/xlsform-offline\">XLSForm offline<\/a> desktop application have <strong>not yet been updated<\/strong> with this change at the time of writing.<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was made possible by the good people at <a href=\"http:\/\/ona.io\/\">Ona<\/a>. Ona funded Enketo\u2019s development work for this feature and added the required change to the XLSForm convertor.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"More Markdown","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/more-markdown\/"}},"updated":"2015-12-22T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/more-markdown\/","content":"<p>Text formatting was <a href=\"\/better-notes\">previously<\/a> only supported in notes but has now been extended across labels and hints for <strong>all question types<\/strong>. We\u2019ve also added support for changing text colors with HTML &lt;span&gt; elements and css, as well as support for headings.<\/p>\n\n<p><a href=\"https:\/\/enke.to\/markdown\"><img src=\"..\/files\/2015\/12\/markdown.png\" alt=\"Screenshot of markdown demo form\" title=\"Screenshot of markdown demo form\" \/><\/a><\/p>\n\n<h3 id=\"how-to-use\">How to Use<\/h3>\n\n<p>To format text in Enketo (and I believe soon in ODK Collect too), use the Markdown syntax, as follows:<\/p>\n\n<hr \/>\n\n<p><a href=\"https:\/\/enke.to\/markdown\">links<\/a><\/p>\n\n<p><code class=\"language-plaintext highlighter-rouge\">[links](https:\/\/enke.to\/markdown)<\/code><\/p>\n\n<hr \/>\n\n<p>new<\/p>\n\n<p>lines<\/p>\n\n<hr \/>\n\n<p><em>emphasize<\/em><\/p>\n\n<p><code class=\"language-plaintext highlighter-rouge\">*emphasize*<\/code> or <code class=\"language-plaintext highlighter-rouge\">_emphasize_<\/code><\/p>\n\n<hr \/>\n\n<p><strong>strongly emphasize<\/strong><\/p>\n\n<p><code class=\"language-plaintext highlighter-rouge\">**strongly emphasize**<\/code> or <code class=\"language-plaintext highlighter-rouge\">__strongly emphasize__<\/code><\/p>\n\n<hr \/>\n\n<p><span style=\"color:orange\">colors<\/span><\/p>\n\n<p><code class=\"language-plaintext highlighter-rouge\">&lt;span style=\"color:orange\"&gt;colors&lt;\/span&gt;<\/code><\/p>\n\n<hr \/>\n\n<h4 id=\"headings\">headings<\/h4>\n<p><code class=\"language-plaintext highlighter-rouge\">#### headings<\/code><\/p>\n\n<hr \/>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was sponsored by <a href=\"https:\/\/www.openclinica.com\">OpenClinica<\/a>, a top-notch company that has <a href=\"http:\/\/blog.openclinica.com\/2015\/03\/19\/engineering-openclinicas-future\/\">enthusiastically adopted Enketo<\/a> and is actively pushing it forward.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Page Validation","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/page-validation\/"}},"updated":"2015-12-21T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/page-validation\/","content":"<p>Enketo\u2019s <a href=\"\/pages\">pages mode<\/a> now requires the current page to be valid before the user is able to proceed to the next page. This means any required questions need to be answered and any constraints need to be met. The behavior is now in line with ODK Collect.<\/p>\n\n<p><img src=\"..\/files\/2015\/12\/page-validation.png\" alt=\"Screenshot of page validation\" title=\"Screenshot of page validation\" \/><\/p>\n\n<p>Now that Enketo\u2019s <a href=\"https:\/\/accounts.enke.to\">paid service<\/a> and <a href=\"https:\/\/ona.io\/\">Ona<\/a> have switched to the new Enketo application, and others will soon follow, we\u2019ll stop referring to the <em>old<\/em> and <em>new<\/em> Enketo. From now onwards, every bit of news is always about the new Enketo.<\/p>\n\n<h3 id=\"acknowledgements\">Acknowledgements<\/h3>\n\n<p>This feature was largely contributed by <a href=\"http:\/\/medic.org\/\">Medic<\/a>, the first major external code contributor to Enketo Core! Additional support from <a href=\"http:\/\/kobotoolbox.org\">KoboToolbox<\/a> made it possible to expose this feature in the Enketo web application.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n<p>We still have some <a href=\"https:\/\/github.com\/enketo\/enketo-core\/issues\/326\">ideas<\/a> about how to further change the UI in pages mode. Don\u2019t hesitate to add yours.<\/p>\n"},{"title":"NDI Election Monitoring","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/NDI-election-monitoring\/"}},"updated":"2015-08-20T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/NDI-election-monitoring\/","content":"<p><strong>cross-posted on <a href=\"https:\/\/www.nditech.org\/election-monitoring-enketo\">NDI blog<\/a><\/strong><\/p>\n\n<p>Introduction by NDI:<\/p>\n\n<p><em>The <a href=\"https:\/\/www.ndi.org\/\">National Democratic Institute<\/a> (NDI) has been using Enketo to help collect data overseas, as part of tablet-based observation efforts. Enketo is a great example of an extremely useful, open-source tool, supported by a great community of users and developers. We asked the experts at Enketo to talk to our readers about how their tool works and how their tool supports NGOs working in some of the most remote locations in the world.<\/em><\/p>\n\n<h3 id=\"characteristics-of-enketo\">Characteristics of Enketo<\/h3>\n\n<p>Enketo is a versatile tool that can be used by a diverse set of organizations with data collection needs. One advantage of Enketo is that it can be used on mobile phones, tablets, or computers and only requires a modern browser. No specific operating system is required. No installation is required; one only needs a link to the form to begin collecting data. Entering data directly into a form on a device minimizes transcription errors in data collection. When devices are connected to the internet, data is gathered in real time allowing for rapid data analysis. However, Enketo can also work as an offline tool in places where internet connections may be spotty or nonexistent. Data can be uploaded when an internet connection becomes available. For situations where security is a concern, Enketo also has the option to be used as a paper survey. Using a paper copy of the survey during data collection enables faster data entry at a later time.<\/p>\n\n<h3 id=\"experience\">Experience<\/h3>\n\n<p>NDI has been using Enketo to assist in data collection, and international election observations across the world. Enketo is a free and open-source tool that provides enhanced offline capability for digital data collection in low-technology environments. In late 2014, Enketo was used with Formhub to monitor the Tunisian presidential and parliamentary elections. Most recently, Enketo was used as part of the tablet-based observations for NDI\u2019s International Observation Missions during the historic elections in Nigeria.<\/p>\n\n<p>The use by the National Democratic Institute is a powerful example of how Enketo can be used to benefit communities in a variety of settings. NDI has been using Enketo to assist in data collection, and international election observations across the world. Enketo is a free and open-source tool that provides enhanced offline capability for digital data collection in low-technology environments. In late 2014, Enketo was used with Formhub to monitor the Tunisian presidential and parliamentary elections. Most recently, Enketo was used as part of the tablet-based observations for NDI\u2019s International Observation Missions during the historic elections in Nigeria.<\/p>\n\n<h3 id=\"collection-and-cleanup\">Collection and Cleanup<\/h3>\n\n<p>While NDI uses Formhub for many of their data collection needs, Enketo proved to be a good solution that allowed for the simplification of front-end data cleanup and collection processes. Enketo has been useful in allowing NDI to manage its forms from the web interface, and ultimately has made NDI\u2019s programs more efficient and scalable.<\/p>\n\n<h3 id=\"improved-workflow\">Improved Workflow<\/h3>\n\n<p>NDI has been able to collect International Election Observation Mission (IOM\/EOM) data in near real time using Enketo with formhub and the GeoODK application. During an International Observation Mission, qualified experts from across the globe are selected to monitor specific polling stations across a country. They must then report their findings to a data or command center which is usually located in the capital. Prior to using Enketo, these reports were either written reports or verbal reports to the data center that then had to be transcribed by clerks. While this produced valuable information for the Mission\u2019s post-election statement to be delivered within hours to a few days of the close of the polls, the raw data needed to be quickly processed and analyzed. Enketo enabled NDI to quickly analyze data and view it on a broader scale, resulting in more comprehensive post-election statements.<\/p>\n\n"},{"title":"Full Right-to-left Language Support","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/advanced-language\/"}},"updated":"2015-08-17T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/advanced-language\/","content":"<p>The <a href=\"\/enketo-express\">new Enketo<\/a> is now able to display languages from right-to-left.<\/p>\n\n<h3 id=\"ui-vs-form-language\">UI vs form language<\/h3>\n\n<p>It is important to clarify that there are two different language environments in both Enketo and ODK Collect:<\/p>\n\n<ol>\n  <li><strong>Forms<\/strong> have their own built-in translations of questions, hints, and options.<\/li>\n  <li>The <strong>User Interface<\/strong> (UI) is a separate environment and has independent multi-language support with translations <a href=\"https:\/\/www.transifex.com\/enketo\/enketo-express\">provided by volunteers<\/a>.<\/li>\n<\/ol>\n\n<p>When required, Enketo will now display languages from right-to-left <strong>in both the UI and the forms<\/strong>.<\/p>\n\n<p><a href=\"https:\/\/odk.enke.to\/YYYV\"><img src=\"..\/files\/2015\/08\/arabic-english.png\" alt=\"Arabic English Sample Form\" title=\"Enketo Roadmap\" \/><\/a><\/p>\n\n<h3 id=\"tip-prepare-for-the-future\">Tip: Prepare for the Future<\/h3>\n\n<p>Though not required, it is highly recommended to slightly change the language tags used in XLSForm, adding the language code in parenthesis after the language name. E.g. instead of \u201clabel::Fran\u00e7ais\u201d, use <strong>\u201clabel::Fran\u00e7ais (fr)\u201d<\/strong>.<\/p>\n\n<p><img src=\"..\/files\/2015\/08\/language-tags.png\" alt=\"Tweaked Language Tags\" title=\"Tweaked Language Tags\" \/><\/p>\n\n<p>The reason for following this syntax is to enable a <strong>future feature<\/strong> that will match the UI language with the current form language. So implementing these tweaked language tags will make your forms ready for the future.<\/p>\n\n<p>The language codes (called <em>subtags<\/em>) for all languages can be found <a href=\"http:\/\/www.iana.org\/assignments\/language-subtag-registry\/language-subtag-registry\">here<\/a> (just do a search with Ctrl-F or Cmd-F).<\/p>\n\n<h3 id=\"sponsor\">Sponsor<\/h3>\n\n<p>This right-to-left language support was fully funded by <a href=\"http:\/\/kobotoolbox.org\">KoboToolbox<\/a>, an incredible system to manage information in humanitarian crises by the <a href=\"http:\/\/hhi.harvard.edu\/\">Harvard Humanitarian Initiative<\/a> and UN OCHA.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"},{"title":"Auto-save","link":{"@attributes":{"rel":"alternate","href":"https:\/\/blog.enketo.org\/auto-save\/"}},"updated":"2015-06-29T00:00:00+00:00","id":"https:\/\/blog.enketo.org\/auto-save\/","content":"<p>The <a href=\"\/enketo-express\">new Enketo<\/a> now automatically saves your data in offline-capable webforms.<\/p>\n\n<h3 id=\"how-it-works\">How it works<\/h3>\n\n<p>Whenever a form value changes Enketo will update a special temporary record that is saved in a persistent browser database. Only after the user saves this record, the temporary record will be deleted.<\/p>\n\n<p>When Enketo loads a page it will check whether the special temporary record is present. If it is present, it will give the user the option to either load it or to remove it.<\/p>\n\n<p><img src=\"..\/files\/2015\/06\/recover.png\" alt=\"&quot;Recover&quot;\" title=\"Recover Record dialog\" \/><\/p>\n\n<h3 id=\"how-it-benefits-users\">How it benefits users<\/h3>\n\n<p>Whenever the user accidentally hits the Back button of a browser or mobile OS, accidentally refreshes the page, or experiences some other catastrophe, <strong>the unsaved data will not be lost<\/strong>. This is particularly important for large surveys where one could lose critical data that may have taken a long time to collect.<\/p>\n\n<p>This way of implementing Auto-Save was designed to minimize the annoyance of this feature and maximize the benefit to cover all possible scenarios, including an empty battery and a browser crash.<\/p>\n\n<h3 id=\"limitations\">Limitations<\/h3>\n\n<p>This feature only works for <em>un-saved<\/em> records using <em>offline-capable<\/em> webforms. This means that if you are editing a record that was previously saved as a draft, the auto-save feature will not be active.<\/p>\n\n<h3 id=\"how-to-use-it\">How to use it<\/h3>\n\n<p>Just use the latest version of Enketo Express and its offline-capable webform views.<\/p>\n\n<h3 id=\"sponsor\">Sponsor<\/h3>\n\n<p>This auto-save feature was funded by the <a href=\"http:\/\/www.santafe.edu\">Santa Fe Institute<\/a> as part of a <a href=\"http:\/\/www.santafe.edu\/news\/item\/gates-slums-announce\/\">collaboration<\/a> between the Santa Fe Institute and <a href=\"http:\/\/www.sdinet.org\/\">Shack\/Slum Dwellers International<\/a>.<\/p>\n\n<h3 id=\"feedback\">Feedback<\/h3>\n\n<p>As always, we\u2019d love to get your feedback. Comment on this blog, tweet <a href=\"https:\/\/twitter.com\/enketo\">@enketo<\/a>, or post a message in the <a href=\"https:\/\/groups.google.com\/forum\/#!forum\/enketo-users\">Enketo forum<\/a>. If you discover a bug, please let us know what browser you are using.<\/p>\n\n"}]}