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 everything that would step outside them is simply out of scope.

The lane

The standards are deliberately boring and well-proven:

Calendula reads and writes events through Android’s CalendarContract; Agendula does the same over the OpenTasks provider. Neither app owns a database. The sync adapter you already trust — DAVx5, SmoothSync, DecSync — moves the bytes.

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 — not because it’s bad, but because integrating it would mean owning a sync stack and tying your data to one vendor’s schema. The moment an app starts reconciling its own copy of your data against someone’s cloud, the simplicity that made it trustworthy is gone.

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 means some things are genuinely harder. Provider APIs have rough edges; recurrence rules and time zones in iCalendar are a deep well; 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.

That’s the right trade. An app built on an open standard is one you can leave without losing anything — your events and tasks were never hostage to it in the first place. The interface is mine to get right; the data was always yours.