Core Data vs SwiftData
Apple's legacy Core Data versus modern SwiftData: API ergonomics, performance, migration story, and which to pick for new iOS 17+ apps.
Apple's modern declarative persistence framework
Battle-tested SQLite wrapper for Swift
For a new iOS 17+ app that's SwiftUI-heavy with standard CRUD needs, go with SwiftData. When performance is critical, queries get complex, or you need iOS 13+ support, go with GRDB. For legacy Core Data projects, migrate to GRDB; for new projects, default to SwiftData.
| Category | SwiftData | GRDB |
|---|---|---|
| Performance | 7/10 | 10/10 |
| Ease of Learning | 9/10 | 7/10 |
| Ecosystem | 8/10 | 8/10 |
| Community | 7/10 | 8/10 |
| Job Market | 8/10 | 7/10 |
| Future-Proof | 9/10 | 8/10 |
import SwiftData
@Model
class Todo {
@Attribute(.unique) var id: UUID
var title: String
var isDone: Bool
var createdAt: Date
init(title: String) {
self.id = UUID()
self.title = title
self.isDone = false
self.createdAt = .now
}
}
// In SwiftUI view
@Query(sort: \\.createdAt, order: .reverse) var todos: [Todo]import GRDB
struct Todo: Codable, FetchableRecord, PersistableRecord {
var id: UUID
var title: String
var isDone: Bool
}
let todos = try dbQueue.read { db in
try Todo
.filter(Column("isDone") == false)
.order(Column("createdAt").desc)
.fetchAll(db)
}For a new iOS 17+ app that's SwiftUI-heavy with standard CRUD needs, go with SwiftData. When performance is critical, queries get complex, or you need iOS 13+ support, go with GRDB. For legacy Core Data projects, migrate to GRDB; for new projects, default to SwiftData.
Get Free ConsultationYes, for legacy support. New projects should reach for SwiftData or GRDB. Core Data's inherent pain points, like NSManagedObjectContext, are abstracted away in SwiftData.