Sync Your App Across Apple Devices
The local-first sync framework for SwiftData and Core Data. No server to build. No cloud costs. No vendor lock-in.
Trusted by iOS Devs Since 2013
What Developers Say
“80% of my support emails vanished once I finally added sync. I’m shocked that such a new product could behave like such a mature product!!”
“All I get are happy customers. Quite a few of them are wondering why the sync works so smoothly compared to other apps.”
“After wasting months on Core Data–iCloud, all solved by Ensembles. Incredibly well thought out.”
Why Ensembles
The only sync framework that works with the cloud services your customers already have.
Sync via Existing Services
iCloud, Dropbox, Google Drive, OneDrive, pCloud, S3, WebDAV — sync through cloud storage your customers already own. No cloud infrastructure to deploy or pay for.
Your Customers Own Their Data
Data lives in your customers' own cloud accounts as opaque files no server can read. No backend to build, maintain, or pay for. Zero recurring cloud costs.
No Lock-In
Let your customers choose which cloud service to use. Switch backends without changing your app logic. You’re never tied to a single vendor.
Advanced Merging & Validation
Sophisticated conflict resolution with revision tracking and causal ordering. Delegate hooks let you validate and customize every merge.
End-to-End Encryption
AES-256-GCM encryption before data leaves the device. Works with any backend — no need to rely on Apple’s Advanced Data Protection.
Core Data & SwiftData
Works with both Core Data and SwiftData. Drop in a few lines of code and your existing data model syncs across all Apple platforms.
Ensembles vs Apple CloudKit Sync
Apple's built-in sync ties you to CloudKit. Ensembles gives you freedom.
| Feature | Ensembles | Core Data + CloudKit | SwiftData + CloudKit |
|---|---|---|---|
| Architecture | Local-first | Offline-first | Offline-first |
| Cloud backends | Any (13 built-in + custom) | CloudKit only | CloudKit only |
| Custom backends | Yes (8-method protocol) | No | No |
| Vendor lock-in | None — switch backends freely | Locked to Apple | Locked to Apple |
| Conflict resolution | Revision tracking + delegate hooks | Last-writer-wins | Last-writer-wins |
| Ordered relationships | Yes | No | No |
| Validation rules | Fully preserved | Relaxed | All relationships optional |
| Object identity | Global identifiers | Manual deduplication | Manual deduplication |
| E2E encryption | Built-in (AES-256-GCM) | Requires ADP | Requires ADP |
| Peer-to-peer sync | Yes (MultipeerConnectivity) | No | No |
| Source available | Yes (Premium license) | No | No |
| Core Data support | Yes | Yes | N/A |
| SwiftData support | Yes | N/A | Yes |
Sync with EASE
Ensemble, Attach, Sync, Enjoy. Four steps to cross-device bliss.
// Create the ensemble once at app launch let ensemble = SwiftDataEnsemble( ensembleIdentifier: "MyStore", modelTypes: [Item.self], cloudFileSystem: CloudKitFileSystem( ubiquityContainerID: "iCloud.com.example.myapp" ) ) // Attach once for a new install try await ensemble.attachPersistentStore() // Sync whenever you like — uploads local changes, downloads remote try await ensemble.sync()
Cloud Backends
CloudKit and local sync are free forever. A $99/year subscription unlocks all other backends.
Who Built This
The Mental Faculty has been developing apps and frameworks for Apple devices since 2006, even preceding the iPhone. Ensembles has been a commercial sync framework since 2013, and is trusted by hundreds of apps on the App Store.
Simple Pricing
CloudKit sync is completely free. No per-app, per-user, or per-device fees.
Free
- Core Data & SwiftData sync
- CloudKit backend
- Local file backend
- All Apple platforms
- Community support via GitHub
Basic
- Everything in Free
- Dropbox, Google Drive, OneDrive
- pCloud, S3, WebDAV, Box
- Encryption & Peer-to-Peer
- Custom backends
- Email support
- 1-month free trial
Premium
- Everything in Basic
- Full source code access
- Debug and extend with full source visibility
- Improve LLM coding with source access
- Business continuity — no dependency on a third party
- Code-level support
You get access to all versions of the SDK released while subscribed, and can continue to use those versions even if your subscription ends.







