v1.0.0 — Initial stable release
The first stable release of swift-mutation-testing — an AST-based CLI that finds untested behaviour in Swift codebases by systematically introducing code mutations and verifying that your test suite detects them.
What's included
Mutation pipeline
- Two-phase architecture: discovery (AST parsing + mutant identification + schematization) followed by execution (sandbox → build → test → results)
- Schema-based execution: all mutants are embedded behind a runtime switch and the project is built exactly once — no per-mutant recompilation
- The original project is never modified — all mutations happen inside an isolated sandbox in
$TMPDIR - Parallel test execution via
withThrowingTaskGroupacross cloned simulators - Incompatible mutants (those that cannot be schematized) are handled in a sequential fallback path with one build per file
Mutation operators
RelationalOperatorReplacement— replaces>>=<<===!=BooleanLiteralReplacement— swapstrue↔falseLogicalOperatorReplacement— swaps&&↔||ArithmeticOperatorReplacement— replaces+-*/%NegateConditional— wraps conditions in!()SwapTernary— swaps ternary branchesRemoveSideEffects— removes standalone function call statements
Platform support
- macOS — runs directly without a simulator
- iOS, tvOS, watchOS — parallel execution via a pool of cloned simulators
- Destination specified as a standard
xcodebuilddestination string
Developer experience
swift-mutation-testing initgenerates a project-scoped.swift-mutation-testing.ymlwith auto-detected scheme and destination@SwiftMutationTestingDisabledattribute suppresses mutations within any function, type, or property scope--operatorand--disable-mutatorflags for per-run operator control--quietflag for CI-friendly output--no-cacheflag to force a full re-run
Reports
- Text summary always printed to stdout — per-file scores, survived mutants, and overall score
- JSON report (
--output) in Stryker-compatible format - Interactive HTML report (
--html-output) with colour-coded per-file dashboards - SonarQube Generic Issue Import report (
--sonar-output) — survived mutants asMAJOR CODE_SMELL, no-coverage mutants asMINOR
Caching
- Results are persisted at
.swift-mutation-testing-cache/results.json, keyed by SHA256 of source and test file contents - Unchanged mutants are skipped entirely on subsequent runs
Requirements
- macOS 15+
- Swift 6.2+
- Xcode project with a valid scheme and test target
Installation
See the Installation Guide for Homebrew, pre-built binary, and build from source instructions.
What's Changed
- Repo setup by @ericodx in #2
- Bootstrap by @ericodx in #3
- feat: CLI and configuration by @ericodx in #4
- feat: process launcher and sandbox by @ericodx in #5
- feat: build stage by @ericodx in #6
- feat: Simulator Pool by @ericodx in #7
- feat: Test Execution Stage by @ericodx in #8
- feat: IncompatibleMutantExecutor by @ericodx in #9
- feat: PerFileBuildFallback by @ericodx in #10
- Cache by @ericodx in #11
- Reporting by @ericodx in #12
- MutantExecutor and wire @main entry point (Phase 10) by @ericodx in #13
- Validation and Integration by @ericodx in #14
- Models and discovery layer by @ericodx in #15
- Operators infrastructure by @ericodx in #16
- Operators implementation by @ericodx in #17
- feat: add suppression annotation mechanism by @ericodx in #18
- feat: add discovery pipeline stages by @ericodx in #19
- Schematization by @ericodx in #20
- feat: Phase 8 — DiscoveryPipeline integration by @ericodx in #21
- CLI update and self-contained entry point by @ericodx in #22
- test: Phase 10 — DiscoveryPipeline integration tests by @ericodx in #23
- Performance baseline by @ericodx in #24
- test: cover critical attention points 6.1 and 6.3 by @ericodx in #25
- refactor: remove legacy --input mode and SMT integration code by @ericodx in #26
- Improve CLI and console experience by @ericodx in #27
- Fix mutant classification by @ericodx in #28
- Reports revision: relative paths, cache feedback, UX polish and score accuracy by @ericodx in #29
- refactor: architecture review — dissolve Models, one type per file, reorganize directories by @ericodx in #30
- refactor: Swift 6 strict concurrency audit and SOLID corrections by @ericodx in #31
- feat: enrich reports and simplify CLI invocation by @ericodx in #32
- Increase test coverage by @ericodx in #33
- docs: add project documentation by @ericodx in #34
- Update swift-syntax by @ericodx in #35
- Code refinement: structural improvements and coverage expansion by @ericodx in #36
- CI/CD: workflows, Version enum and test coverage improvements by @ericodx in #37
- Fix main branch analysis by @ericodx in #38
- Simplify workflows by @ericodx in #39
- Update CI badge by @ericodx in #40
New Contributors
Full Changelog: https://github.com/ericodx/swift-mutation-testing/commits/v1.0.0