The Swift Package Index logo.Swift Package Index

Track the adoption of Swift 6 strict concurrency checks for data race safety. How many packages are Ready for Swift 6?

Ready for Swift 6

The Swift 6 language mode prevents data-races at compile time. When you opt into Swift 6 mode, the compiler will produce errors when your code has a risk of concurrent access, turning hard-to-debug runtime failures into compiler errors.

To track the progress of the Swift package ecosystem, the Swift Package Index is running regular package compatibility checks across all packages in the index.

Total packages compatible with Swift 6

Packages with zero data-race safety compiler diagnostics during a successful build on at least one tested platform.

Total Swift 6 concurrency errors

The total number of all data-race safety diagnostics across all packages.

Frequently asked questions

Q: What does “compatible” mean in the chart of compatible packages?

A: We define compatibility in the same way we do on package pages. If any build of the package completes successfully on any of our tested platforms (macOS via SwiftPM, macOS via XcodeBuild, iOS, visionOS, watchOS, tvOS, or Linux) then that build is deemed compatible with the Swift version.


Q: Are additional parameters added to the build command for these tests compared to the “standard” Swift Package Index builds that determine Swift version compatibility on package pages?

A: Yes. The builds that produce the results on this page have strict concurrency checking set to complete to check for data race safety in Swift 6 language mode. We pass -strict-concurrency=complete to either swift build or xcodebuild.


Q: Why use -strict-concurrency=complete instead of -swift-version 6?

A: Data-race safety diagnostics are determined in different stages of the compiler. For example, type checking produces some data-race safety errors, and others are diagnosed during control-flow analysis after code generation. If type checking produces errors, the compiler will not proceed to code generation, so testing with -swift-version 6 would show fewer errors than really exist across the package ecosystem.


Q: What does “total concurrency errors” mean?

A: Swift 6 introduces complete concurrency checking, a compiler feature that checks your code for data-race safety. The number of concurrency errors reflects how many issues the compiler detected relating to these concurrency or data-race checks. The total errors chart plots the total number of these errors summed across all packages.


Q: What packages are in the “all packages” data set?

A: We are not testing every package in the index. Instead, we are testing packages that are under some kind of active development. For this test, we define “all packages” in the chart to be any package having at least one commit to their repository in the last year. We took a snapshot of active packages on the 19th of March 2024, and the “all packages” data set includes 3,393 packages. The data set also excludes any new packages added after the 19th March.


Q: What packages are in the “Apple packages” and “SSWG incubated packages” data sets?

A: It’s interesting to look at some slices of curated package lists in addition to overall compatibility. Apple should be leading from the front, so the “Apple packages” data set is all packages authored by Apple, again with the same criteria as above applied. Nothing newer than March 19th and nothing without commits in the last year. The SSWG incubated data set is the same idea but sourced from the Swift Server Workgroup incubated packages list.