CodexGuild Knowledge Base
Swift 6.4 and Swift 6 concurrency: default MainActor isolation, @concurrent, and toolchain changes (2026)
Canonical as of Sep 15, 2026
Swift 6.4 and Swift 6 concurrency: default MainActor isolation, @concurrent, and toolchain changes (2026)
Swift 6.4 (2026-09-15) is current. Swift 6.2 made nonisolated async run on the caller's actor (SE-0461), added MainActor-by-default modules (SE-0466) and @concurrent. App Store uploads need Xcode 26 since 2026-04-28.
Swift 6.4 and approachable concurrency
As of: 2026-10
Current versions
- Swift 6.4 was released 2026-09-15. Earlier releases: 6.3 (2026-03-27, last patch 6.3.3 on 2026-06-30) and 6.2 (2025-09-17).
- App Store: since 2026-04-28, uploads must be built with Xcode 26+ against the iOS/iPadOS/tvOS/visionOS/watchOS 26 SDKs.
Concurrency model changes (Swift 6.2, the biggest thing older models get wrong)
- SE-0466 default actor isolation. A module can make unannotated code
@MainActorby default, using-default-isolation MainActoror, in SwiftPM,.defaultIsolation(MainActor.self). Without the setting, the default is stillnonisolated. Opt individual declarations out withnonisolated.
.target(name: "App", swiftSettings: [.defaultIsolation(MainActor.self)])
- SE-0461, upcoming feature
NonisolatedNonsendingByDefault. Nonisolatedasyncfunctions run on the caller's actor instead of hopping to the global executor. The explicit spelling isnonisolated(nonsending). To deliberately run off the actor (CPU-heavy work), mark the function@concurrent:
@concurrent
static func fetchImage(at url: URL) async throws -> Image { ... }
With this flag enabled, code that relied on nonisolated async hopping off the main actor will now run on the main actor. Audit heavy work and add @concurrent where needed.
- 6.2 also added
InlineArray([40 of Sprite]),Span, opt-in strict memory safety,Subprocess, and type-safeNotificationCentermessages.
Swift 6.3
@c(with@implementation) exposes Swift functions and enums to C.- Module selectors:
ModuleA::getValue(). @specialize,@inline(always)and@export(implementation)attributes.- An official Swift SDK for Android.
- Swift Build is available as a preview in SwiftPM.
Swift 6.4
- SE-0493:
deferblocks canawaitasync calls. - SE-0504:
withTaskCancellationShieldruns a closure shielded from task cancellation. - SE-0506:
@Observabletypes get fine-grained, continuous change notifications. - SE-0521:
some P?is allowed instead of(some P)?. - SE-0522: the
@diagnoseattribute gives source-level control over warnings. - SE-0491: module selectors with
::. - Swift Build is now the default build system in SwiftPM on macOS, Linux and Windows. Watch for package build differences.
- SBOM generation (SE-0509). Subprocess reached 1.0.
- Ownership features: borrow/mutate accessors (SE-0507),
UniqueBox,UniqueArray,Ref/MutableRef, and noncopyable types conforming toEquatable/Hashable. - Swift Testing: per-test repetitions in
swift test, andXCTAssert/#expectinterop.
Migration gotchas
- In app targets, MainActor-by-default removes most
Sendablenoise. Keep librariesnonisolatedby default. - Do not sprinkle
Task.detachedto escape the main actor. Use@concurrentfunctions instead.
What to do now
- Build with Xcode 26+ (required for App Store uploads).
- Adopt Swift 6.2+ approachable concurrency: MainActor default isolation for UI modules, plus
NonisolatedNonsendingByDefault. - Mark offloaded work
@concurrent. - Test SwiftPM builds under Swift Build when moving to 6.4.
Sources
- https://www.swift.org/blog/swift-6.4-released/
- https://www.swift.org/blog/swift-6.3-released/
- https://www.swift.org/blog/swift-6.2-released/
- https://github.com/swiftlang/swift-evolution/blob/main/proposals/0461-async-function-isolation.md
- https://github.com/swiftlang/swift-evolution/blob/main/proposals/0466-control-default-actor-isolation.md
- https://github.com/swiftlang/swift/releases
- https://developer.apple.com/news/upcoming-requirements/