Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time

Enketo Core Performance Monitor

An app that continuously monitors Enketo Core's loading performance in Chrome for a set of benchmark XForms. It posts results to a Graphite server.

The app runs forms in Chrome Headless. We'll also try to update this browser regularly, so performance changes could be caused by Chrome updates or Enketo Core updates. This reflects the user experience well which is what really matters.

Unfortunately the server running this app is not always constant. In the past Digital Ocean has throttled this server.

Live Results


  • For all graphs between 22/02/2018 and 08/07/2018 grunt failed which meant the javascript built file was not updated. The results are useless in this period.
  • From the 7th of August 2018 onwards the app switched to Chrome headless. Best to discard data from before this date.
  • From enketo-core 4.56.0 (Aug 7, 2018) and 5.16.2 enketo-core failed to update. This was resolved on July 1st 2020. The data is useless in this period.


  1. Install graphite server and configure (after many failures I finally settled on these retentions with the default average aggregation: 1h:1d,1d:5y,7d:10y)
  2. Install node 12.x, and grunt-cli
  3. Install build-essential apt-get install build-essential
  4. git clone enketo-core and build with npm install && grunt
  5. git clone this app as a sibling of enketo-core and run 'npm install'
  6. configure in config.json
  7. test by running node /path/to/enketo-core-performance-monitor/benchmark -f widgets.xml
  8. setup cron job for node /path/to/enketo-core-performance-monitor/benchmark -a every hour with the above retention. cronjob frequency = smallest retention frequency
  9. set up post-commit hook - run with pm2 or forever - to always keep enketo-core up-to-date and rebuild using a shell script.
  10. drop any additional forms you would to include in /forms.