CoreAIKit

Versioning & stability

CoreAIKit is meant to be depended on — by apps that ship. This page says exactly what that promise covers today.

Semantic versioning

Releases follow SemVer. Pre-1.0:

The reproducible quickstart uses exact: "0.4.1". Use from: "0.4.1" if you want SwiftPM to select later compatible versions, and retain your app’s Package.resolved. Every release is a tag on this repo.

While the OS is in beta, a tag can stop compiling without anyone touching it. FoundationModels renamed LanguageModelCapabilities.init(capabilities:) to init(_:) between Xcode 27 beta 3 and beta 5, and 0.3.0 — the latest tag at the time — stopped building on the newer SDK. main was fixed the same day; the tag was not, for nine days. That is a real cost of the promise on this page, so the rule from 0.4.0 on: an SDK change that breaks the newest tag is released as a new tag, not left on main. If you hit a compile error naming an Apple type, check for a newer tag before anything else.

The catalog contract

The live catalog (catalog.json, fetched at runtime with the built-in snapshot as offline fallback) is a public contract:

Surface stability

Surface Status
ModelStore, ModelCatalog, ModelID, ChatSession, KitLanguageModel Stable — breaking changes only in a minor release, with migration notes
CoreAIKitVision (GraphModel, detectors, depth, CLIP), CoreAIKitEmbeddings Stable
Newer capability surfaces (VLM, TTS, ASR, diarization, OCR, dLLM, forecasting, audio-QA) Settling — APIs may still be reshaped as more models of each kind land; changes are changelogged
Anything internal or underscore-prefixed, Examples/ No guarantees

Verification

Every model in the catalog is verified on real hardware (Apple silicon Mac and, where published, iPhone) before its pin lands — parity against the reference implementation and measured tokens/sec, recorded in the model zoo. Three CI surfaces: