Roadmap
outskirts keeps the Periphery 3.x line working with current Xcode and Swift toolchains, and explores further from there. This page is updated by hand when a release ships or a priority changes; the changelog lists every change, and each item links to its issue.
Issues carry a priority label, from P1 (first) to P3.
On this page
Published#
Recent releases, newest first:
- 3.18.0 (2026-11-04): JSON Schema of the configuration file and
outskirts config check(#228);--changed-sinceand--changed-linesfor pull request checks (#231);--quietprints nothing when there is no result (#296). - 3.17.0 (2026-11-04): Metal functions analysis (
--detect-unused-metal-functions); the build cache is keyed by the build arguments. - 3.16.0 (2026-11-03): the project is renamed outskirts, with
peripherykept as an alias; Linux is built and tested in CI (#219). - 3.15.0 (2026-11-03):
--relative-to, baselines that only shrink (--prune-baseline,--strict-baseline) (#215), and thesarifformat for GitHub code scanning (#213). - 3.14.0 (2026-11-02): unused generic parameters of types are opt-in (
--report-unused-type-parameters). - 3.13.0 (2026-11-01): Bazel mode removed (#165).
In progress#
- Documentation site with one source for the README and outskirts.dev, generated options reference and changelog.
- Fix the
JobPoolerror data race and adopt the Swift 6 language mode target by target (#181). - Regenerate the Linux self-scan baseline and make the step blocking (#281); detect system modules on Linux (#280).
Next#
Analysis and retention:
- Assign-only analysis of properties without an explicit type annotation (#214).
retain_publicper module, for packages that mix libraries and apps (#217).- Platform
#ifretention limited to the clauses the indexed build did not compile (#218). scan --explain, to show why a declaration is reported, used or retained (#234).- Opt-in analysis of enum cases only matched in patterns and never constructed (#224).
- A type in a
where Self ==protocol extension is retained even when its members are unused (#223). - Gate the
appendInterpolationworkaround on the toolchains that need it (#222).
Tooling and distribution:
- Warn when an index store is older than its sources, and document merging variant stores (#230).
- A strict self-scan in CI (#220).
- Prebuilt binaries beyond macOS 27 (#229).
- CLI polish:
--version, grouped help and shell completions (#226).
Toward 4.0#
The 4.0 theme (#241): what ships on any platform or configuration is used; everything else is reported with a stable id and can be removed safely. These changes are breaking and ship together:
- Scan the union of all platform and configuration variants instead of name-based retention (#233).
- Configuration v2: schema, strict validation and per-module overrides (#238).
- Output v2: stable rule-aware ids, relative paths and baseline v2 (#239).
- Distinct, documented exit codes for findings and failures (#232).
- Cleanup: drop the hidden
--no-colorflag and the Bazel shims, and a quieter--index-store-pathmode (#240). - A support policy for Xcode, Swift and Linux, enforced by CI (#235).
- A
fixcommand: syntax-only fixes with a dry-run diff by default (#237), then removal of unused declarations once every variant is scanned (#236).
Ideas and requests are welcome as issues.