I wrote 2 shell scripts named swift-list-features and swift-has-feature. They’re available here: swift-list-features: List Swift compiler upcoming and experimental feature flags. · swift-has-feature: Check if a given compiler knows a specific feature flag, and whether it's an upcoming or experimental flag. · GitHub
Example usage (after piping it to a tool for formatting the CSV output):
$ swift-list-features.sh 6.2 | xan view --all
Displaying 6 cols from 190 rows of <stdin>
┌─────┬──────────────┬──────────────────────┬───────────────┬───────────┬───────────────────┬──────────────────────┐
│ - │ type │ name │ language_mode │ se_number │ available_in_prod │ description │
├─────┼──────────────┼──────────────────────┼───────────────┼───────────┼───────────────────┼──────────────────────┤
│ 0 │ <empty> │ ABIAttributeSE0479 │ <empty> │ SE-479 │ <empty> │ @abi attribute on f… │
│ 1 │ <empty> │ Actors │ <empty> │ <empty> │ <empty> │ actors │
│ 2 │ <empty> │ AlwaysInheritActorC… │ <empty> │ SE-472 │ <empty> │ @_inheritActorConte… │
│ 3 │ <empty> │ AssociatedTypeAvail… │ <empty> │ <empty> │ <empty> │ Availability on ass… │
│ 4 │ <empty> │ AssociatedTypeImple… │ <empty> │ <empty> │ <empty> │ @_implements on ass… │
│ 5 │ <empty> │ AsyncAwait │ <empty> │ SE-296 │ <empty> │ async/await │
│ 6 │ <empty> │ AsyncExecutionBehav… │ <empty> │ <empty> │ <empty> │ @concurrent and non… │
│ 7 │ <empty> │ AsyncSequenceFailure │ <empty> │ <empty> │ <empty> │ Failure associated … │
│ 8 │ <empty> │ AttachedMacros │ <empty> │ SE-389 │ <empty> │ Attached macros │
│ 9 │ <empty> │ BitwiseCopyable │ <empty> │ SE-426 │ <empty> │ BitwiseCopyable pro… │
│ 10 │ <empty> │ BitwiseCopyable2 │ <empty> │ SE-426 │ <empty> │ BitwiseCopyable fea… │
│ 11 │ <empty> │ BodyMacros │ <empty> │ SE-415 │ <empty> │ Function body macros │
│ 12 │ <empty> │ BorrowingSwitch │ <empty> │ SE-432 │ <empty> │ Noncopyable type pa… │
│ 13 │ <empty> │ BuiltinAddressOfRaw… │ <empty> │ <empty> │ <empty> │ Builtin.addressOfRa… │
│ 14 │ <empty> │ BuiltinAssumeAlignm… │ <empty> │ <empty> │ <empty> │ Builtin.assumeAlign… │
│ 15 │ <empty> │ BuiltinBuildComplex… │ <empty> │ <empty> │ <empty> │ Executor-building f… │
│ 16 │ <empty> │ BuiltinBuildExecutor │ <empty> │ <empty> │ <empty> │ Executor-building b… │
│ 17 │ <empty> │ BuiltinBuildMainExe… │ <empty> │ <empty> │ <empty> │ MainActor executor … │
│ 18 │ <empty> │ BuiltinBuildTaskExe… │ <empty> │ <empty> │ <empty> │ TaskExecutor-buildi… │
│ 19 │ <empty> │ BuiltinContinuation │ <empty> │ <empty> │ <empty> │ Continuation builti… │
│ 20 │ <empty> │ BuiltinCreateAsyncD… │ <empty> │ <empty> │ <empty> │ Task create in disc… │
│ 21 │ <empty> │ BuiltinCreateAsyncD… │ <empty> │ <empty> │ <empty> │ Task create in disc… │
│ 22 │ <empty> │ BuiltinCreateAsyncT… │ <empty> │ <empty> │ <empty> │ Task create in task… │
│ 23 │ <empty> │ BuiltinCreateAsyncT… │ <empty> │ <empty> │ <empty> │ Task create in task… │
│ 24 │ <empty> │ BuiltinCreateAsyncT… │ <empty> │ <empty> │ <empty> │ Task create with a … │
│ 25 │ <empty> │ BuiltinCreateAsyncT… │ <empty> │ <empty> │ <empty> │ Task create with ow… │
│ 26 │ <empty> │ BuiltinCreateAsyncT… │ <empty> │ <empty> │ <empty> │ Task create builtin… │
│ 27 │ <empty> │ BuiltinCreateTask │ <empty> │ <empty> │ <empty> │ Builtin.createTask … │
│ 28 │ <empty> │ BuiltinCreateTaskGr… │ <empty> │ <empty> │ <empty> │ Builtin.createTaskG… │
│ 29 │ <empty> │ BuiltinEmplaceTyped… │ <empty> │ <empty> │ <empty> │ Builtin.emplace typ… │
│ 30 │ <empty> │ BuiltinExecutor │ <empty> │ <empty> │ <empty> │ Builtin.Executor ty… │
│ 31 │ <empty> │ BuiltinHopToActor │ <empty> │ <empty> │ <empty> │ Builtin.HopToActor │
│ 32 │ <empty> │ BuiltinIntLiteralAc… │ <empty> │ SE-368 │ <empty> │ Builtin.IntLiteral … │
│ 33 │ <empty> │ BuiltinJob │ <empty> │ <empty> │ <empty> │ Builtin.Job type │
│ 34 │ <empty> │ BuiltinSelect │ <empty> │ <empty> │ <empty> │ Builtin.select │
│ 35 │ <empty> │ BuiltinStackAlloc │ <empty> │ <empty> │ <empty> │ Builtin.stackAlloc │
│ 36 │ <empty> │ BuiltinStoreRaw │ <empty> │ <empty> │ <empty> │ Builtin.storeRaw │
│ 37 │ <empty> │ BuiltinTaskGroupWit… │ <empty> │ <empty> │ <empty> │ TaskGroup builtins │
│ 38 │ <empty> │ BuiltinTaskRunInline │ <empty> │ <empty> │ <empty> │ Builtin.taskRunInli… │
│ 39 │ <empty> │ BuiltinUnprotectedA… │ <empty> │ <empty> │ <empty> │ Builtin.unprotected… │
│ 40 │ <empty> │ BuiltinUnprotectedS… │ <empty> │ <empty> │ <empty> │ Builtin.unprotected… │
│ 41 │ <empty> │ ConcurrentFunctions │ <empty> │ <empty> │ <empty> │ @concurrent functio… │
│ 42 │ <empty> │ ConformanceSuppress… │ <empty> │ SE-426 │ <empty> │ Suppressible inferr… │
│ 43 │ <empty> │ EffectfulProp │ <empty> │ SE-310 │ <empty> │ Effectful properties │
│ 44 │ <empty> │ ExpressionMacroDefa… │ <empty> │ SE-422 │ <empty> │ Expression macro as… │
│ 45 │ <empty> │ ExtensionMacroAttr │ <empty> │ <empty> │ <empty> │ @attached(extension) │
│ 46 │ <empty> │ ExtensionMacros │ <empty> │ SE-402 │ <empty> │ Extension macros │
│ 47 │ <empty> │ FreestandingExpress… │ <empty> │ SE-382 │ <empty> │ Expression macros │
│ 48 │ <empty> │ FreestandingMacros │ <empty> │ SE-397 │ <empty> │ freestanding declar… │
│ 49 │ <empty> │ GeneralizedIsSameMe… │ <empty> │ SE-465 │ <empty> │ Builtin.is_same_met… │
│ 50 │ <empty> │ GlobalActors │ <empty> │ SE-316 │ <empty> │ Global actors │
│ 51 │ <empty> │ ImplicitSelfCapture │ <empty> │ <empty> │ <empty> │ @_implicitSelfCaptu… │
│ 52 │ <empty> │ InheritActorContext │ <empty> │ <empty> │ <empty> │ @_inheritActorConte… │
│ 53 │ <empty> │ InlineArrayTypeSugar │ <empty> │ SE-483 │ <empty> │ Type sugar for Inli… │
│ 54 │ <empty> │ IsolatedAny │ <empty> │ SE-431 │ <empty> │ @isolated(any) func… │
│ 55 │ <empty> │ IsolatedAny2 │ <empty> │ SE-431 │ <empty> │ @isolated(any) func… │
│ 56 │ <empty> │ IsolatedConformances │ <empty> │ SE-470 │ <empty> │ Global-actor isolat… │
│ 57 │ <empty> │ IsolatedDeinit │ <empty> │ SE-371 │ <empty> │ isolated deinit │
│ 58 │ <empty> │ LexicalLifetimes │ <empty> │ <empty> │ <empty> │ @_eagerMove/@_noEag… │
│ 59 │ <empty> │ Macros │ <empty> │ <empty> │ <empty> │ Macros │
│ 60 │ <empty> │ MarkerProtocol │ <empty> │ <empty> │ <empty> │ @_marker protocol │
│ 61 │ <empty> │ MemorySafetyAttribu… │ <empty> │ SE-458 │ <empty> │ @unsafe attribute │
│ 62 │ <empty> │ MoveOnly │ <empty> │ SE-390 │ <empty> │ noncopyable types │
│ 63 │ <empty> │ MoveOnlyPartialCons… │ <empty> │ SE-429 │ <empty> │ Partial consumption… │
│ 64 │ <empty> │ MoveOnlyResilientTy… │ <empty> │ SE-390 │ <empty> │ non-@frozen noncopy… │
│ 65 │ <empty> │ NewCxxMethodSafetyH… │ <empty> │ <empty> │ <empty> │ Only import C++ met… │
│ 66 │ <empty> │ NoAsyncAvailability │ <empty> │ SE-340 │ <empty> │ @available(*, noasy… │
│ 67 │ <empty> │ NoncopyableGenerics │ <empty> │ SE-427 │ <empty> │ Noncopyable generics │
│ 68 │ <empty> │ NoncopyableGenerics2 │ <empty> │ SE-427 │ <empty> │ Noncopyable generic… │
│ 69 │ <empty> │ NonescapableAccesso… │ <empty> │ <empty> │ <empty> │ Support UnsafeMutab… │
│ 70 │ <empty> │ NonescapableTypes │ <empty> │ SE-446 │ <empty> │ Nonescapable types │
│ 71 │ <empty> │ NonexhaustiveAttrib… │ <empty> │ SE-487 │ <empty> │ Nonexhaustive Enums │
│ 72 │ <empty> │ ObjCImplementation │ <empty> │ SE-436 │ <empty> │ @objc @implementati… │
│ 73 │ <empty> │ OptionalIsolatedPar… │ <empty> │ SE-420 │ <empty> │ Optional isolated p… │
│ 74 │ <empty> │ ParameterPacks │ <empty> │ SE-393 │ <empty> │ Value and type para… │
│ 75 │ <empty> │ PrimaryAssociatedTy… │ <empty> │ SE-346 │ <empty> │ Primary associated … │
│ 76 │ <empty> │ RawIdentifiers │ <empty> │ SE-451 │ <empty> │ Raw identifiers │
│ 77 │ <empty> │ RethrowsProtocol │ <empty> │ <empty> │ <empty> │ @rethrows protocol │
│ 78 │ <empty> │ RetroactiveAttribute │ <empty> │ SE-364 │ <empty> │ @retroactive │
│ 79 │ <empty> │ Sendable │ <empty> │ <empty> │ <empty> │ Sendable and @Senda… │
│ 80 │ <empty> │ SendableCompletionH… │ <empty> │ SE-463 │ <empty> │ Objective-C complet… │
│ 81 │ <empty> │ SendingArgsAndResul… │ <empty> │ SE-430 │ <empty> │ Sending arg and res… │
│ 82 │ <empty> │ SpecializeAttribute… │ <empty> │ <empty> │ <empty> │ @_specialize attrib… │
│ 83 │ <empty> │ TypedThrows │ <empty> │ SE-413 │ <empty> │ Typed throws │
│ 84 │ <empty> │ UnavailableFromAsync │ <empty> │ <empty> │ <empty> │ @_unavailableFromAs… │
│ 85 │ <empty> │ UnsafeInheritExecut… │ <empty> │ <empty> │ <empty> │ @_unsafeInheritExec… │
│ 86 │ <empty> │ ValueGenerics │ <empty> │ SE-452 │ <empty> │ Value generics feat… │
│ 87 │ <empty> │ ValueGenericsNameLo… │ <empty> │ SE-452 │ <empty> │ Value generics appe… │
│ 88 │ Experimental │ AccessLevelOnImport │ <empty> │ <empty> │ true │ <empty> │
│ 89 │ Experimental │ AdditiveArithmeticD… │ <empty> │ <empty> │ false │ <empty> │
│ 90 │ Experimental │ AddressableParamete… │ <empty> │ <empty> │ true │ <empty> │
│ 91 │ Experimental │ AddressableTypes │ <empty> │ <empty> │ true │ <empty> │
│ 92 │ Experimental │ AllowNonResilientAc… │ <empty> │ <empty> │ false │ <empty> │
│ 93 │ Experimental │ AllowRuntimeSymbolD… │ <empty> │ <empty> │ true │ <empty> │
│ 94 │ Experimental │ AssumeResilientCxxT… │ <empty> │ <empty> │ true │ <empty> │
│ 95 │ Experimental │ BuiltinMacros │ <empty> │ <empty> │ false │ <empty> │
│ 96 │ Experimental │ BuiltinModule │ <empty> │ <empty> │ true │ <empty> │
│ 97 │ Experimental │ CImplementation │ <empty> │ <empty> │ true │ <empty> │
│ 98 │ Experimental │ ClientBypassResilie… │ <empty> │ <empty> │ false │ <empty> │
│ 99 │ Experimental │ ClosureBodyMacro │ <empty> │ <empty> │ true │ <empty> │
│ 100 │ Experimental │ ClosureIsolation │ <empty> │ <empty> │ true │ <empty> │
│ 101 │ Experimental │ CodeItemMacros │ <empty> │ <empty> │ false │ <empty> │
│ 102 │ Experimental │ CompileTimeValues │ <empty> │ <empty> │ true │ <empty> │
│ 103 │ Experimental │ ConcurrencySyntaxSu… │ <empty> │ <empty> │ true │ <empty> │
│ 104 │ Experimental │ ConsumeSelfInDeinit │ <empty> │ <empty> │ true │ <empty> │
│ 105 │ Experimental │ CopyBlockOptimizati… │ <empty> │ <empty> │ true │ <empty> │
│ 106 │ Experimental │ CoroutineAccessors │ <empty> │ <empty> │ true │ <empty> │
│ 107 │ Experimental │ CoroutineAccessorsU… │ <empty> │ <empty> │ false │ <empty> │
│ 108 │ Experimental │ CustomAvailability │ <empty> │ <empty> │ true │ <empty> │
│ 109 │ Experimental │ DebugDescriptionMac… │ <empty> │ <empty> │ true │ <empty> │
│ 110 │ Experimental │ DefaultIsolationPer… │ <empty> │ <empty> │ false │ <empty> │
│ 111 │ Experimental │ DifferentiableProgr… │ <empty> │ <empty> │ false │ <empty> │
│ 112 │ Experimental │ DoExpressions │ <empty> │ <empty> │ false │ <empty> │
│ 113 │ Experimental │ Embedded │ <empty> │ <empty> │ true │ <empty> │
│ 114 │ Experimental │ Extern │ <empty> │ <empty> │ true │ <empty> │
│ 115 │ Experimental │ ExtractConstantsFro… │ <empty> │ <empty> │ false │ <empty> │
│ 116 │ Experimental │ FlowSensitiveConcur… │ <empty> │ <empty> │ false │ <empty> │
│ 117 │ Experimental │ ForwardModeDifferen… │ <empty> │ <empty> │ false │ <empty> │
│ 118 │ Experimental │ FullTypedThrows │ <empty> │ <empty> │ false │ <empty> │
│ 119 │ Experimental │ GenerateBindingsFor… │ <empty> │ <empty> │ false │ <empty> │
│ 120 │ Experimental │ GroupActorErrors │ <empty> │ <empty> │ true │ <empty> │
│ 121 │ Experimental │ ImplicitLastExprRes… │ <empty> │ <empty> │ false │ <empty> │
│ 122 │ Experimental │ ImplicitSome │ <empty> │ <empty> │ false │ <empty> │
│ 123 │ Experimental │ ImportNonPublicCxxM… │ <empty> │ <empty> │ true │ <empty> │
│ 124 │ Experimental │ ImportSymbolicCXXDe… │ <empty> │ <empty> │ false │ <empty> │
│ 125 │ Experimental │ InoutLifetimeDepend… │ <empty> │ <empty> │ true │ <empty> │
│ 126 │ Experimental │ KeyPathWithMethodMe… │ <empty> │ <empty> │ false │ <empty> │
│ 127 │ Experimental │ LayoutPrespecializa… │ <empty> │ <empty> │ true │ <empty> │
│ 128 │ Experimental │ LayoutStringValueWi… │ <empty> │ <empty> │ true │ <empty> │
│ 129 │ Experimental │ LayoutStringValueWi… │ <empty> │ <empty> │ true │ <empty> │
│ 130 │ Experimental │ LazyImmediate │ <empty> │ <empty> │ false │ <empty> │
│ 131 │ Experimental │ LifetimeDependence │ <empty> │ <empty> │ true │ <empty> │
│ 132 │ Experimental │ LifetimeDependenceM… │ <empty> │ <empty> │ true │ <empty> │
│ 133 │ Experimental │ Lifetimes │ <empty> │ <empty> │ true │ <empty> │
│ 134 │ Experimental │ MacrosOnImports │ <empty> │ <empty> │ true │ <empty> │
│ 135 │ Experimental │ MoveOnlyClasses │ <empty> │ <empty> │ true │ <empty> │
│ 136 │ Experimental │ MoveOnlyEnumDeinits │ <empty> │ <empty> │ true │ <empty> │
│ 137 │ Experimental │ MoveOnlyPartialRein… │ <empty> │ <empty> │ true │ <empty> │
│ 138 │ Experimental │ MoveOnlyTuples │ <empty> │ <empty> │ true │ <empty> │
│ 139 │ Experimental │ NamedOpaqueTypes │ <empty> │ <empty> │ false │ <empty> │
│ 140 │ Experimental │ NoExplicitNonIsolat… │ <empty> │ <empty> │ true │ <empty> │
│ 141 │ Experimental │ NoImplicitCopy │ <empty> │ <empty> │ true │ <empty> │
│ 142 │ Experimental │ ObjCImplementationW… │ <empty> │ <empty> │ true │ <empty> │
│ 143 │ Experimental │ OldOwnershipOperato… │ <empty> │ <empty> │ true │ <empty> │
│ 144 │ Experimental │ OpaqueTypeErasure │ <empty> │ <empty> │ true │ <empty> │
│ 145 │ Experimental │ PackageCMO │ <empty> │ <empty> │ false │ <empty> │
│ 146 │ Experimental │ ParserASTGen │ <empty> │ <empty> │ false │ <empty> │
│ 147 │ Experimental │ ParserRoundTrip │ <empty> │ <empty> │ false │ <empty> │
│ 148 │ Experimental │ ParserValidation │ <empty> │ <empty> │ false │ <empty> │
│ 149 │ Experimental │ PlaygroundExtendedC… │ <empty> │ <empty> │ true │ <empty> │
│ 150 │ Experimental │ PreambleMacros │ <empty> │ <empty> │ false │ <empty> │
│ 151 │ Experimental │ RawLayout │ <empty> │ <empty> │ true │ <empty> │
│ 152 │ Experimental │ ReferenceBindings │ <empty> │ <empty> │ true │ <empty> │
│ 153 │ Experimental │ ReinitializeConsume… │ <empty> │ <empty> │ false │ <empty> │
│ 154 │ Experimental │ SafeInteropWrappers │ <empty> │ <empty> │ true │ <empty> │
│ 155 │ Experimental │ SameElementRequirem… │ <empty> │ <empty> │ false │ <empty> │
│ 156 │ Experimental │ SE427NoInferenceOnE… │ <empty> │ <empty> │ true │ <empty> │
│ 157 │ Experimental │ Sensitive │ <empty> │ <empty> │ true │ <empty> │
│ 158 │ Experimental │ StaticAssert │ <empty> │ <empty> │ false │ <empty> │
│ 159 │ Experimental │ StaticExclusiveOnly │ <empty> │ <empty> │ true │ <empty> │
│ 160 │ Experimental │ StructLetDestructur… │ <empty> │ <empty> │ true │ <empty> │
│ 161 │ Experimental │ SuppressCXXForeignR… │ <empty> │ <empty> │ true │ <empty> │
│ 162 │ Experimental │ SuppressedAssociate… │ <empty> │ <empty> │ true │ <empty> │
│ 163 │ Experimental │ SymbolLinkageMarkers │ <empty> │ <empty> │ true │ <empty> │
│ 164 │ Experimental │ ThenStatements │ <empty> │ <empty> │ false │ <empty> │
│ 165 │ Experimental │ TrailingComma │ <empty> │ <empty> │ false │ <empty> │
│ 166 │ Experimental │ TupleConformances │ <empty> │ <empty> │ false │ <empty> │
│ 167 │ Experimental │ UnqualifiedLookupVa… │ <empty> │ <empty> │ false │ <empty> │
│ 168 │ Experimental │ Volatile │ <empty> │ <empty> │ true │ <empty> │
│ 169 │ Optional │ StrictMemorySafety │ <empty> │ SE-458 │ <empty> │ \Strict memory safe… │
│ 170 │ Upcoming │ BareSlashRegexLiter… │ 6 │ SE-354 │ <empty> │ <empty> │
│ 171 │ Upcoming │ ConciseMagicFile │ 6 │ SE-274 │ <empty> │ <empty> │
│ 172 │ Upcoming │ DeprecateApplicatio… │ 6 │ SE-383 │ <empty> │ <empty> │
│ 173 │ Upcoming │ DisableOutwardActor… │ 6 │ SE-401 │ <empty> │ <empty> │
│ 174 │ Upcoming │ DynamicActorIsolati… │ 6 │ SE-423 │ <empty> │ <empty> │
│ 175 │ Upcoming │ ExistentialAny │ 7 │ SE-335 │ <empty> │ <empty> │
│ 176 │ Upcoming │ ForwardTrailingClos… │ 6 │ SE-286 │ <empty> │ <empty> │
│ 177 │ Upcoming │ GlobalActorIsolated… │ 6 │ SE-0434 │ <empty> │ <empty> │
│ 178 │ Upcoming │ GlobalConcurrency │ 6 │ SE-412 │ <empty> │ <empty> │
│ 179 │ Upcoming │ ImplicitOpenExisten… │ 6 │ SE-352 │ <empty> │ <empty> │
│ 180 │ Upcoming │ ImportObjcForwardDe… │ 6 │ SE-384 │ <empty> │ <empty> │
│ 181 │ Upcoming │ InferIsolatedConfor… │ 7 │ SE-470 │ <empty> │ <empty> │
│ 182 │ Upcoming │ InferSendableFromCa… │ 6 │ SE-418 │ <empty> │ <empty> │
│ 183 │ Upcoming │ InternalImportsByDe… │ 7 │ SE-409 │ <empty> │ <empty> │
│ 184 │ Upcoming │ IsolatedDefaultValu… │ 6 │ SE-411 │ <empty> │ <empty> │
│ 185 │ Upcoming │ MemberImportVisibil… │ 7 │ SE-444 │ <empty> │ <empty> │
│ 186 │ Upcoming │ NonfrozenEnumExhaus… │ 6 │ SE-192 │ <empty> │ <empty> │
│ 187 │ Upcoming │ NonisolatedNonsendi… │ 7 │ SE-461 │ <empty> │ <empty> │
│ 188 │ Upcoming │ RegionBasedIsolation │ 6 │ SE-414 │ <empty> │ <empty> │
│ 189 │ Upcoming │ StrictConcurrency │ 6 │ SE-0337 │ <empty> │ <empty> │
├─────┼──────────────┼──────────────────────┼───────────────┼───────────┼───────────────────┼──────────────────────┤
│ - │ type │ name │ language_mode │ se_number │ available_in_prod │ description │
└─────┴──────────────┴──────────────────────┴───────────────┴───────────┴───────────────────┴──────────────────────┘
Displaying 6 cols from 190 rows of <stdin>
As @nikolai.ruhe said, this downloads and parses the Features.def file from the repo. You can specify a branch name to get the features for a specific version. The list also includes experimental features etc., but it's easy enough to filter for upcoming features only.