AccessLint logo

Catch iOS accessibility violations at build time, not after release.

25 rules. SwiftUI + UIKit. WCAG-mapped. Start free, scale with your team.

Terminal — accesslint
$ accesslint analyze ./Sources

AccessLint v1.3.0
Discovered 3 Swift files

AccessLint Analysis Complete
============================
Files analyzed: 3   Rules run: 10 (Free tier)   Duration: 0.01s

Findings: 12
  [MAJOR] Major: 5   [MINOR] Minor: 6   [INFO] Info: 1

Top issues:
  [MAJOR] [A11Y.SWIFTUI.MISSING_LABEL] Button missing accessibility label
         HomeView.swift:24
  [MAJOR] [A11Y.SWIFTUI.MISSING_TRAITS] Interactive element missing button trait
         HomeView.swift:30
  [MAJOR] [A11Y.UIKIT.HIDDEN_BUT_ACCESSIBLE] Hidden view still accessible
         SettingsViewController.swift:28

⚡ 9 additional issues found by 15 paid rules.
   Upgrade to Team ($19.99/mo) to unlock all 25 rules

Your code on the left. The finding on the right.

AccessLint reads your Swift source files and flags accessibility violations with exact line numbers, severity, fix suggestions, and WCAG references.

HomeView.swift
20var body: some View {
21  VStack {
22    Text("Welcome")
23      .font(.system(size: 24))
24    Button(action: checkout) {
25      Image(systemName: "cart")
26    }
27    // ^ No accessibility label!
28    // VoiceOver says: "Button"
29    // User has no idea what it does
30  }
31}
AccessLint Finding
MAJOR A11Y.SWIFTUI.MISSING_LABEL
Button missing accessibility label
This Button contains non-text content (like an Image) but does not have an accessibility label. VoiceOver users will not know what this button does.
Suggested fix
.accessibilityLabel("Add to cart")
WCAG 4.1.2 — Name, Role, Value (Level A)
MINOR A11Y.SWIFTUI.FIXED_FONT
Fixed font size detected
Using .font(.system(size:)) prevents Dynamic Type scaling. Users who set larger text sizes won't see your changes.
Suggested fix
.font(.title) // or .font(.system(.title))
WCAG 1.4.4 — Resize Text (Level AA)

Three steps to accessible iOS code.

Install the CLI, point it at your source directory, and enforce in CI. No runtime SDK required.

01

Install

Add AccessLint via Homebrew. One command, no dependencies.

brew tap synctek-llc/accesslint && brew install accesslint
02

Analyze

Run analysis on your Swift source files. Results in your terminal, Xcode, or CI.

$ accesslint analyze ./Sources

AccessLint v1.3.0
Discovered 3 Swift files

Findings: 12
  [MAJOR] Major: 5
  [MINOR] Minor: 6
  [INFO]  Info: 1

Duration: 0.01s
03

Enforce

Add the GitHub Action to your CI pipeline. Block PRs that introduce violations.

- uses: SyncTek-LLC/[email protected]

Same code. Different coverage.

Free catches the obvious issues. Team catches the ones that fail accessibility audits.

Free — 10 Rules

Good baseline

12
findings from 10 rules

Catches the essentials: missing labels on buttons and images, fixed fonts, views hidden but still in the accessibility tree, and interactive elements without button traits.

Rules included
MISSING_LABEL · IMAGE_DECORATIVE · MISSING_TRAITS · FIXED_FONT · SCREEN_TITLE · BUTTON_MISSING_LABEL · HIDDEN_BUT_ACCESSIBLE · FIXED_FONT_DYNAMIC_TYPE · + 2 more
Team — All 25 Rules

Full coverage

21
findings from 25 rules

Everything in Free, plus heading structure, label-in-name mismatches, reduce motion, touch target sizes, orientation locks, accessibility hints, and meaningful names.

9 issues you would have missed
  • Heading missing header trait (HEADING_STRUCTURE)
  • Accessible name doesn't match visible text (LABEL_IN_NAME)
  • Animation without reduce motion check (REDUCE_MOTION)
  • Touch target below 44x44pt (TOUCH_TARGET_SIZE)
  • Content locked to one orientation (ORIENTATION_LOCK)
  • Redundant trait words in labels (MEANINGFUL_NAME)
  • Missing hints on complex actions (ACCESSIBILITY_HINT)

9 more issues on the same 3 files. Same code. More coverage.

These are the findings that fail WCAG AA audits and get flagged in App Store accessibility reviews.

Start free. Scale when you need to.

10 rules, forever free. Unlock the full rule set and team features when you're ready.

Free

"I just want to know if my buttons have labels."
$0 forever
For solo developers shipping accessible side projects
  • 10 rules — covers missing labels, broken images, fixed fonts
  • SwiftUI + UIKit support
  • Terminal output with severity + line numbers
  • Local baseline comparison
  • CI exit codes (0=pass, 1=warn, 2=fail)
  • WCAG-mapped diagnostics
  • 1 project
MISSING_LABEL · IMAGE_DECORATIVE · MISSING_TRAITS · FIXED_FONT · SCREEN_TITLE · BUTTON_MISSING_LABEL · HIDDEN_BUT_ACCESSIBLE · FIXED_FONT_DYNAMIC_TYPE · UIKIT.MISSING_TRAITS · UIKIT.IMAGE_DECORATIVE
Install Free

Enterprise

"We need WCAG AA documentation for our next audit."
$49.99 / month
For compliance teams at healthcare, fintech, and government apps
  • Everything in Team
  • WCAG AA audit-ready reports
  • Custom rules for your design system
  • WCAG preset configs (A, AA, AAA)
  • Unlimited projects
  • SSO / SAML
  • SLA guarantee
  • Priority support
Feature Free Team Enterprise
Rules 10 25 25 + custom
SwiftUI + UIKit
Terminal output
Xcode inline warnings
JSON output (for AI / MCP)
Markdown reports
PR comments
Baseline comparison Local only Cloud Cloud
CI exit codes
WCAG presets (A/AA/AAA)
Trend dashboards
Slack notifications
Custom rules
SSO / SAML
SLA
Projects 1 10 Unlimited

Works with your tools. And your AI.

Built for humans who code in Xcode and agents that consume JSON. Same analysis engine, multiple output formats.

Xcode

Findings appear as inline warnings and errors in your build log. No context switching.

HomeView.swift:24:17: error:
[A11Y] Button missing label

GitHub Actions

PR comments flag regressions before code review. Block merges on new violations.

● 2 regressions detected
● HomeView.swift:24 MISSING_LABEL

Claude / AI Agents

JSON output with structured findings, fix patches, and confidence scores. Built for MCP.

{"id": "MISSING_LABEL",
 "confidence": 0.9,
 "fix": {"patch": "..."}}
>_

Terminal / CLI

Colored output with severity indicators. Pipe to jq, grep, or your own scripts.

$ accesslint analyze ./Sources
Findings: 12 — 0.01s

Get up and running in seconds.

Multiple installation options. Pick the one that fits your workflow.

Homebrew (recommended)

Tap the formula and install. Works on macOS.

brew tap synctek-llc/accesslint && brew install accesslint

Direct Download

Grab the latest binary from GitHub Releases.

GitHub Action

Add to your CI workflow to enforce accessibility on every pull request.

name: AccessLint on: [pull_request] jobs: lint: runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: SyncTek-LLC/[email protected] with: path: ./Sources format: github

Swift Package Manager

Add AccessLint as a package dependency in Xcode or Package.swift.