What it finds
- Unused declarations: classes, structs, enums, protocols, functions and properties
- Assign-only properties, written but never read
- Unused imports
- Redundant
publicaccessibility - Unused function parameters
- Redundant protocol conformances
A lot of this code is not dead weight to throw away: it is often a feature that was never wired up, a leftover from a refactor, or an API waiting for its first caller. outskirts shows you where it is, and you decide.
Every kind of result, with an example: analysis.
Results can be reported as xcode, json, csv, github-actions, codeclimate or sarif, among others.
Install
brew install tiny-earth-moon/tap/outskirts
Or build from source:
git clone https://github.com/tiny-earth-moon/outskirts
cd outskirts
swift build -c release --product outskirts
Requirements: macOS 15 and Xcode 26 for Xcode projects and Swift packages, or Linux with Swift 6.1.2 for Swift packages.
Quick start
From the root of your project, a guided setup detects the project type and prints the full command:
outskirts scan --setup
Then scan an Xcode project, or a Swift package:
outskirts scan --project MyApp.xcodeproj --schemes MyApp
outskirts scan
Keep your options in a .outskirts.yml file at the project root. To keep a declaration on purpose, add a // outskirts:ignore comment above it.
Coming from Periphery
- A
.periphery.ymlis still read;.outskirts.ymltakes its place when you are ready. - Baseline files keep working.
- The
peripherycommand keeps working as an alias ofoutskirts. // periphery:ignorecomments are still honoured.- Installed from
tiny-earth-moon/tap/periphery?brew upgrademoves you tooutskirts.
The full guide: migrating from Periphery.
In CI
# record today's results
outskirts scan --write-baseline baseline.json
# only new results fail
outskirts scan --baseline baseline.json --strict
# annotations on pull requests
outskirts scan --format github-actions
Recipes for GitHub Actions, GitLab and other CI services: continuous integration.
Documentation
The documentation covers everything outskirts does:
- Getting started and configuration
- What it finds, what it keeps and every option
- Comment commands, excluding files and baselines
- Xcode integration and troubleshooting
- Changelog, roadmap and releases