outskirts

Find what lies at the outskirts of your Swift code: the declarations nothing reaches.

outskirts explores your project, builds a map of what refers to what, and reports the code that sits beyond every entry point. Open source, for Xcode projects and Swift packages.

Get started View on GitHub Latest release

What it finds

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

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: