SRP vs XLSForm
XLSForm got ODK surveys out of XML and into spreadsheets. SRP takes the next step — out of spreadsheets and into plain text that any researcher can read, write, and version control. Your ODK workflow stays exactly the same.
The difference
The same survey, authored two ways. One is a spreadsheet. One is a text file. Ask yourself which one you'd rather hand to a colleague, review in a pull request, or read six months from now.
| type | name | label | required | relevant |
|---|---|---|---|---|
| select_one yesno | own_phone | Do you own a smartphone? | yes | |
| select_one os_list | phone_os | Which operating system? | yes | ${own_phone} = 'yes' |
| integer | hours_daily | Hours per day on phone? | yes | ${own_phone} = 'yes' |
| text | comments | Any other comments? |
| list_name | name | label |
|---|---|---|
| yesno | yes | Yes |
| yesno | no | No |
| os_list | android | Android |
| os_list | ios | iOS |
| os_list | other | Other |
SingleSelect "own_phone" do text "Do you own a smartphone?" required option "Yes" do segment "phone_owner" end option "No" end SingleSelect "phone_os" do text "Which operating system?" show_only_if "phone_owner" required option "Android" option "iOS" option "Other" end Number "hours_daily" do text "Hours per day on phone?" show_only_if "phone_owner" required end OpenEnded "comments" do text "Any other comments?" end
XLSForm splits your survey across two sheets — questions and choices live apart. In SRP, everything is in one place, in the order it happens.
| type | name | label | relevant |
|---|---|---|---|
| select_one age_grp | age_group | Age group? | |
| select_one edu | education | Education level? | ${age_group} != 'under18' |
| select_one employ | employment | Employment status? | ${age_group} != 'under18' and ${education} != 'none' |
SingleSelect "age_group" do text "Age group?" option "Under 18" option "18–34" do segment "adult" end option "35+" do segment "adult" end end SingleSelect "education" do text "Education level?" show_only_if "adult" option "Primary" option "Secondary" do segment "has_edu" end option "Tertiary" do segment "has_edu" end end SingleSelect "employment" do text "Employment status?" show_only_if "adult", "has_edu" end
SRP conditional logic reads like English. XPath expressions in XLSForm are powerful but error-prone — a typo produces no warning, just wrong behavior in the field.
Feature comparison
| Feature | XLSForm | SRP |
|---|---|---|
| Human-readable syntax | ✗ | ✓ |
| Version control friendly (Git, diff) | ✗ | ✓ |
| Works in any text editor | ✗ Requires spreadsheet app | ✓ |
| Conditional logic readability | XPath expressions | ✓ Plain English |
| Real-time validation | Limited | ✓ |
| Questions and choices co-located | ✗ Split across sheets | ✓ |
| Exports to XForm / ODK | ✓ | ✓ |
| Works with ODK Collect | ✓ | ✓ |
| Works with KoboToolbox | ✓ | ✓ |
| AI-assisted generation | ✗ | ✓ Coming soon |
| Free to use | ✓ | ✓ |
Zero switching cost
SRP is a better way to author surveys — not a new collection platform. Your existing ODK infrastructure, devices, and servers stay exactly as they are. You just write surveys differently.
SRP exports to valid XForm XML. Load it into ODK Collect exactly as you do today.
Upload the exported XForm to KoboToolbox. No changes to your deployment workflow.
The XForm export is standard-compliant. If it accepts XLSForm today, it accepts SRP-generated XForm.
The logic of your survey lives next to the questions it governs — not three sheets away in a column called 'relevant'.
— From the SRP design principles
Fair questions
"My whole team knows XLSForm. Switching has a cost."
SRP is intentionally readable. If a researcher can read an XLSForm, they can read SRP — usually faster. And with AI-assisted generation on the way, describing a survey in plain language and getting SRP back will be faster than opening a spreadsheet.
"I have hundreds of existing XLSForms."
You don't need to migrate anything. Use SRP for new surveys. Your existing XLSForms keep working exactly as they do today. When a survey needs a major revision, that's a natural time to rewrite it in SRP.
"XLSForm is a widely supported open standard. Is SRP stable?"
A fair concern. SRP is actively developed and the language specification is stable. SRP files are plain text — if you ever needed to move away, your survey logic is readable and portable. You're never locked into a binary format.
"Does SRP support complex logic like geopoint or entities?"
SRP covers the question types and logic patterns used in the vast majority of field surveys. Features like geopoint and ODK Entities are XForm-specific capabilities with no direct SRP equivalent yet — the export guide documents exactly what is and isn't supported.
Open the Playground, write a few questions in SRP, and export to XForm. No account. No charge. Just a better way to write surveys.