Release Notes

1.0.0.beta.11

DownloadNovember 6, 2026

Breaking

  • None.

Enhancements

  • Unused associated values on enum cases are now identified, including values discarded during pattern matching or bound to names that are never read. Disable this analysis with --disable-unused-associated-value-analysis.
  • Stored optional properties and global variables that can only hold nil are now reported as unused, even if they are read.
  • Assign-only analysis now covers stored properties with inferred primitive types.
  • More unused SwiftUI code is now identified, including unused views, write-only @State properties, and default-value helpers for unused state and environment entries.
  • Assign-only analysis now covers @ObservationIgnored properties.

Bug Fixes

  • Fixed false unused findings for superclass members required by live overrides and for Objective-C protocol witnesses on reachable types.

1.0.0.beta.10

DownloadNovember 5, 2026

Breaking

  • None.

Enhancements

  • Scans using a baseline now show baselined findings needed to remove a new finding. --strict counts only new findings. Use --always-exclude-baseline-results to hide those prerequisites.
  • Baseline updates now automatically prune stale entries that no longer match a scan result.
  • Added --write-metrics with Prometheus and OpenMetrics output for scanned LOC, reported findings, removable LOC, unused code ratio, and input baseline entries. Select the format with --metrics-format.
  • Concrete types referenced solely by constraints on unused protocol extension members are now reported as unused.
  • Stored properties used by synthesized Codable, Equatable, or Hashable conformances are now retained by default.
  • Improved the agent-prompt removal guidance to warn about references a scan may not see, and included the scan configuration in the output so agents can judge which checks apply.
  • Added redundant open accessibility analysis for classes that can become public. Disable with --disable-redundant-open-analysis.
  • Added suggestions to constrain protocols to AnyObject when all possible conforming types are known to be classes. Disable with --disable-class-only-protocol-analysis.
  • Expanded redundant public analysis to flag unnecessary public modifiers on declarations inside non-public types, including declarations in extensions.

Bug Fixes

  • Ignore comments that suppress a redundant protocol finding are no longer reported as superfluous.
  • Fixed false unused results for enum cases used through static protocol requirements.
  • Fixed false unused results for enum cases reached through a concrete enum’s synthesized allCases property or a synthesized Decodable initializer.
  • Fixed false unused and redundant public findings for @dynamicCallable handlers, and false unused findings for their required parameters.
  • Fixed scans missing unused and assign-only properties in @Observable classes.
  • Fixed agent-prompt removal order to group redundant protocols with their conformances and extensions, before removing unused witnesses elsewhere.
  • Fixed false unused-parameter results when a universally unavailable function’s @available attribute includes a message or rename.
  • Fixed false unused results for Swift functions exported to C with @_cdecl and for their parameters.
  • Fixed false unused results for managed object classes referenced by a Core Data model’s representedClassName.
  • Fixed false unused results for functions called from top-level statements in executables.
  • Fixed false unused results for entry points declared with @main on an extension.
  • Fixed false unused results for wrapped parameters used through their projected value or backing storage, and for wrapper initializers called implicitly.
  • Scans now stop and report the file path when a XIB, storyboard, Info.plist, Core Data model, or mapping model cannot be read.
  • Fixed Xcode scans retaining code referenced only by synchronized-folder resources excluded from all targets.
  • Fixed Info.plist discovery for Xcode projects whose INFOPLIST_FILE uses build setting variables or an absolute path.
  • Fixed false unused results for result builder buildBlock methods with zero or multiple parameters.
  • Fixed parsing Core Data model and mapping files supplied by Bazel, preserving references to custom value transformers and migration policies.
  • Fixed SwiftPM scans retaining code referenced only by undeclared resources in hidden directories.
  • Fixed several cases where unused import analysis kept redundant imports.

1.0.0.beta.9

DownloadOctober 22, 2026

Breaking

  • None.

Enhancements

  • Drive Periphery setup and scans with your local AI agents using the new Periphery skills.
  • Added periphery auth status, which shows whether Periphery has a credential to scan with and when its cached validation expires.
  • --format agent-prompt now lists results in the order they can be removed without breaking the build. Results that must be removed at the same time, such as functions that call each other or the same unused parameter across overrides, are grouped into a single step.
  • Improved scan speed for Xcode projects that use synchronized folders, which could be very slow in projects with many targets.

Bug Fixes

  • Fixed scans failing to open index records when another build recreates a symlink in the index store path, such as SwiftPM's .build/debug during a concurrent swift build.
  • Fixed a potential crash on Linux when Periphery exits after making a network request.

1.0.0.beta.8

DownloadOctober 5, 2026

Breaking

  • None.

Enhancements

  • None.

Bug Fixes

  • Fix false unused results for helpers and nested types used by conditional declarations in files compiled for multiple platforms.

1.0.0.beta.7

DownloadSeptember 28, 2026

Breaking

  • None.

Enhancements

  • Improved scan performance compared to beta.2:
    • AWS SDK for Swift: 35% faster (18.634s → 13.827s).
    • Telegram iOS: 34% faster (6.369s → 4.756s).
    • DuckDuckGo iOS: 15% faster (2.550s → 2.210s).
    • Stripe iOS: 6% faster (2.104s → 1.994s).

Bug Fixes

  • Fix superfluous ignore warnings for members that inherit an ignore from their parent declaration.
  • Fix JSON, CodeClimate and GitLab Code Quality output varying in key and attribute order between runs.
  • Fix nondeterministic results when declarations in the same file share an Objective-C name, such as classes with the same @objc(...) name, their extensions, or async and completion-handler forms of the same @objc protocol requirement.
  • Fix declarations being retained solely by requirements on otherwise-unused constrained extensions that do not add a protocol conformance.

1.0.0.beta.6

DownloadSeptember 18, 2026

Breaking

  • None.

Enhancements

  • Updated swift-syntax dependency to 604.0.0.
  • Added a troubleshooting documentation link to USR conflict errors.
  • Support Xcode's new JSON project format (experimental).
  • Homebrew installations no longer require the standalone Xcode Command Line Tools.

Bug Fixes

  • Retain result builder buildPartialBlock(first:) and buildPartialBlock(accumulated:next:) methods.
  • Fix SwiftUI @State analysis with Xcode 27, recognizing projected-value and backing-storage reads and reporting initializer helpers used only by unused state.

1.0.0.beta.5

DownloadSeptember 3, 2026

Breaking

  • None.

Enhancements

  • Updated the XcodeProj dependency.

Bug Fixes

  • None.

1.0.0.beta.4

DownloadAugust 19, 2026

Breaking

  • Removed the xcode_list_arguments configuration option, as xcodebuild -list is no longer invoked.
  • Removed the skip_schemes_validation configuration option. Scheme names are no longer validated, so any scheme can be given, including that of a Swift package.

Enhancements

  • Discover Xcode schemes by parsing the project instead of running xcodebuild -list, which is significantly faster.

Bug Fixes

  • Fix indexing implicitly discovered Interface Builder and Core Data resources in Swift packages.
  • Fix unstable DerivedData path generation.
  • Fix --retain-public, retain_public: true, and // periphery:ignore not retaining public macro declarations.
  • Fix false positive redundant public accessibility warnings for result builders used by public function and initializer parameters.
  • Fix a scan crash when a filesystem-synchronized Xcode source folder starts with **.
  • Fix hand-quoted build_arguments values, such as OTHER_SWIFT_FLAGS='$(inherited) -no-warnings-as-errors', being re-quoted when they follow a boolean flag.

1.0.0.beta.3

DownloadAugust 12, 2026

Breaking

  • None.

Enhancements

  • None.

Bug Fixes

  • Authentication flow fixes.

1.0.0.beta.2

DownloadJuly 30, 2026

Breaking

  • None.

Enhancements

  • Added the agent-prompt output format for AI-assisted result removal.
  • Added the name option to the // periphery:override comment command.
  • Scheme validation is now skipped by default, avoiding a slow call to xcodebuild. Use --no-skip-schemes-validation to enable validation of the given scheme names.

Bug Fixes

  • The --write-results file is now written when the output format produces no output for a scan with no results, e.g. --format github-actions.
  • Resolved scan performance regression introduced by duplicate declaration detection.

1.0.0.beta.1

DownloadJuly 21, 2026

Breaking

  • Conflicting declarations now throw an error.
  • Bazel integration has moved to the rules_periphery module, which drives Periphery from Bazel rather than the other way around. The --bazel, --bazel-filter, --bazel-query, --bazel-index-store, and --bazel-check-visibility options have been removed.

Enhancements

  • Significant performance improvements.
  • Added the --retain-equatable-properties and --retain-hashable-properties options to retain all properties on Equatable and Hashable types.

Bug Fixes

  • The --write-results file is now also written when a scan produces no results.

Release notes for versions prior to the fork from the open-source project are available in the previous changelog.