Open standards as a constraint, not a checkbox
“Supports open standards” usually means a feature in a list: an export button, an import dialog, an optional CalDAV setting buried three screens deep. For the Floret apps it’s the other way round. Open standards are the boundary, and anything that would step outside them is out of scope.
The lane
I picked boring, well-proven standards on purpose:
- CalDAV and iCalendar for calendar events, the protocol and the data format the rest of the ecosystem already speaks.
- OpenTasks’
TaskContractprovider for tasks, which stores CalDAV VTODOs on the device. - DecSync for peer-to-peer sync without a server in the middle, though the project itself has been quiet since 2022.
Calendula reads and writes events through Android’s CalendarContract and owns
no database. The sync adapter you already trust (DAVx5, SmoothSync, DecSync)
moves the bytes. Agendula keeps tasks in its own store by default, shaped after
the iCalendar VTODO, and can sync that store with a CalDAV server itself. If
you already sync tasks through OpenTasks or tasks.org, it can work on that
provider instead and leave the syncing to whatever does it now.
Why make it a hard boundary
Treating the standard as a constraint changes which decisions are even on the table. A proprietary task service with a slick API is permanently off the roadmap. It might be a fine service, but integrating it would mean writing sync code against one vendor’s API and tying your data to that vendor’s schema. Once an app starts reconciling its own copy of your data against someone’s cloud, it loses the simplicity that made it easy to trust.
The constraint also keeps the apps reproducible. There are no secret API keys to embed, no SDKs that pull in closed dependencies, nothing that would stop an app from building clean for F-Droid. What goes in is exactly what you can read in the source.
The cost, and why it’s worth paying
Living inside the standard makes some things harder. Provider APIs have rough edges, recurrence rules and time zones in iCalendar go deep, and you inherit whatever the underlying sync adapter does or doesn’t support. You don’t get to paper over those gaps with a server you control.
I think that’s the right trade. You can leave an app built on an open standard without losing anything, because your events and tasks never lived only inside it. Getting the interface right is my job, and the data stays yours.