What happens when two offline devices edit the same thing?
ObjectBox Sync now gives developers more control over concurrent updates. With the latest Sync Server release and updated Dart/Flutter and Java clients, developers can choose how conflicting writes are resolved in offline-first and distributed applications. The feature is available with ObjectBox Dart/Flutter 5.3.1, ObjectBox Java/Kotlin/Android 5.4.1, and Sync Server 2026-03-26.
What is ObjectBox Sync?
ObjectBox Sync is an offline-first sync engine that keeps data consistent across devices and backend systems, even with unreliable connectivity. It supports user-specific sync for personalized data, customizable conflict resolution, and MongoDB integration for backend connectivity.
When multiple devices update the same object, ObjectBox Sync can now resolve conflicts using two new mechanisms: Sync Clock and Sync Precedence. Sync Clock is managed automatically by ObjectBox Sync and tracks the “time” for which write should win. Sync Precedence is controlled by the developer and lets business rules decide which write is more important. These options can be used independently or together. When both are present, precedence is evaluated first, and the sync clock acts as the tie-breaker.
The new ObjectBox Sync Clock was designed for offline-first systems. It is an advanced hybrid logical clock (HLC) that combines wall time with a logical counter. That means writes can still be ordered consistently even when devices are offline, reconnect at different times, or have some clock skew. The clock tracks real time as closely as possible, never goes backwards, and uses extra compensation for clocks set in the future, making it particularly robust for concurrent offline edits. This gives developers a sensible default for real-world sync scenarios. A write that was actually made later can win even if it reaches the server earlier or later than another update.
For teams that need more than time-based ordering, Sync Precedence adds another layer of control. Developers can assign a precedence value to an object and ensure that higher-precedence changes win in a conflict. That makes it possible to encode workflow and authority directly into synchronization behavior. A closed order can stay closed even if a newer edit arrives that was still based on the open state. An approval state can override a draft state. A manager’s correction can take precedence over a regular user update.
The combination of both approaches is especially powerful. Developers can use precedence to represent business intent, and let the sync clock resolve ties fairly and automatically. The result is conflict resolution that is both application-aware and offline-friendly.
For developers building collaborative, field, retail, logistics, or other edge applications, this update removes a major source of friction in distributed data handling. You can now decide whether conflicts should be resolved by when a change happened, by how important that change is, or by a combination of both.
Availability
ObjectBox Sync customizable conflict resolution is available now with:
Other clients will follow soon.