I built a task app that stores everything in one plain SQLite file — and I don't regret skipping Core Data
This is the engineering story behind KinetTask , a Mac/iOS task app I shipped last week. It's a Show HN-adjacent story but dev.to gets the parts HN would skewer me for. Numbers and regrets included. The decision everyone told me was wrong When I started building a local-first task app, every senior Swift dev I asked said the same thing: "Use GRDB. Or SwiftData. Writing SQLite by hand is…
KinetTask is a local-first task app for Mac and iOS that the author built using SQLite instead of an ORM like GRDB or SwiftData. The author chose this approach due to the need for specific features such as the database file being the export format and append-only journal rows for tracking changes. The entire persistence layer consists of ~600 lines of code, which the author believes is worth the tradeoff compared to using an ORM.
The SQLite3 C API was directly used in Swift 6.1 to achieve these goals. The author faced challenges such as hidden bugs, like the widget losing checkbox taps due to writing to a different file, which were resolved by unifying the data root and applying WAL mode and busy_timeout settings. The author also implemented a model for on-device large language models (LLMs) that runs locally on the device instead of in the cloud.
The key numbers shared include the cold inference time on a 3B model being noticeably dumber than cloud models, but still functional for simple tasks like parsing and organizing. The author suggests that skipping the ORM for SQLite was the right decision, citing the benefits of having an append-only log and the ease of debugging. They also offer to answer questions about SQLite internals in the comments.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.