Ensembles — Sync different.

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

MoneyWell Pennies Happy Scale Money Pro iReal Pro ATracker Grid Diary ContractorTools Nihongo

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!!”
Russ Shanahan — Happy Scale
“All I get are happy customers. Quite a few of them are wondering why the sync works so smoothly compared to other apps.”
Lars Gerckens — Tyme
“After wasting months on Core Data–iCloud, all solved by Ensembles. Incredibly well thought out.”
Kyle Baxter

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.

CloudKit
Free
Local File
Free
Dropbox
Google Drive
OneDrive
pCloud
Amazon S3
WebDAV
Box
Encrypted
Peer-to-Peer
Custom

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

$0
forever
  • Core Data & SwiftData sync
  • CloudKit backend
  • Local file backend
  • All Apple platforms
  • Community support via GitHub
Get Started

Premium

$499
per year · unlimited apps · for teams & businesses
  • 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
Subscribe

You get access to all versions of the SDK released while subscribed, and can continue to use those versions even if your subscription ends.