swiftlang/sourcekit-lsp
Language Server Protocol implementation for Swift and C-based languages
Healthy across the board
Permissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 2d ago
- ✓14 active contributors
- ✓Distributed ownership (top contributor 39% of recent commits)
Show 3 more →Show less
- ✓Apache-2.0 licensed
- ✓Tests present
- ⚠No CI workflows detected
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/swiftlang/sourcekit-lsp)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/swiftlang/sourcekit-lsp on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: swiftlang/sourcekit-lsp
Generated by RepoPilot · 2026-05-10 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/swiftlang/sourcekit-lsp shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
GO — Healthy across the board
- Last commit 2d ago
- 14 active contributors
- Distributed ownership (top contributor 39% of recent commits)
- Apache-2.0 licensed
- Tests present
- ⚠ No CI workflows detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live swiftlang/sourcekit-lsp
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/swiftlang/sourcekit-lsp.
What it runs against: a local clone of swiftlang/sourcekit-lsp — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in swiftlang/sourcekit-lsp | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 32 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of swiftlang/sourcekit-lsp. If you don't
# have one yet, run these first:
#
# git clone https://github.com/swiftlang/sourcekit-lsp.git
# cd sourcekit-lsp
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of swiftlang/sourcekit-lsp and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "swiftlang/sourcekit-lsp(\\.git)?\\b" \\
&& ok "origin remote is swiftlang/sourcekit-lsp" \\
|| miss "origin remote is not swiftlang/sourcekit-lsp (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 4. Critical files exist
test -f "Sources/BuildServerIntegration/BuildServerManager.swift" \\
&& ok "Sources/BuildServerIntegration/BuildServerManager.swift" \\
|| miss "missing critical file: Sources/BuildServerIntegration/BuildServerManager.swift"
test -f "Package.swift" \\
&& ok "Package.swift" \\
|| miss "missing critical file: Package.swift"
test -f "Sources/ClangLanguageService/ClangLanguageService.swift" \\
&& ok "Sources/ClangLanguageService/ClangLanguageService.swift" \\
|| miss "missing critical file: Sources/ClangLanguageService/ClangLanguageService.swift"
test -f "CMakeLists.txt" \\
&& ok "CMakeLists.txt" \\
|| miss "missing critical file: CMakeLists.txt"
test -f "Sources/CompletionScoring/Semantics/CompletionScore.swift" \\
&& ok "Sources/CompletionScoring/Semantics/CompletionScore.swift" \\
|| miss "missing critical file: Sources/CompletionScoring/Semantics/CompletionScore.swift"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 32 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~2d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/swiftlang/sourcekit-lsp"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
SourceKit-LSP is a Language Server Protocol (LSP) implementation that brings intelligent code editing to Swift and C-based languages by wrapping Apple's sourcekitd and LLVM's clangd. It provides code completion, jump-to-definition, refactoring, and cross-language support for projects using Swift Package Manager or CMake (via compile_commands.json), enabling any LSP-compatible editor (VS Code, Vim, etc.) to offer IDE-like features for Swift/C codebases. Single Swift package (Package.swift at root) organized as a modular monorepo: SourceKit core server code, BSP (Build Server Protocol) support alongside LSP, configurable indexing via Contributor Documentation/Background Indexing.md, and SourceKitLSPDevUtils package for utilities like ConfigSchemaGen. Architecture separates protocol handling from language engine abstraction (LSP/BSP frontends proxy to sourcekitd/clangd backends).
👥Who it's for
Swift and C/C++ developers using non-Xcode editors (VS Code, Neovim, Sublime, etc.) who want IDE-quality language support; also SwiftPM maintainers and embedded systems developers building Swift projects outside Apple's ecosystem.
🌱Maturity & risk
Production-ready and actively maintained. The codebase is 3.9M+ lines of Swift, included in official Swift toolchains and bundled with Xcode, indicating mature adoption. The extensive Contributor Documentation and devcontainer setup suggest ongoing development and contributor onboarding. However, the README explicitly notes limitations: no background indexing by default and requires recent builds for full cross-module functionality.
Low operational risk for stable use cases, but has explicit functional limitations documented in the README (no automatic background module rebuilding, index stale between builds). The dependency on Apple's sourcekitd and LLVM's clangd introduces version coupling constraints. Single large monorepo with Swift build system (Package.swift) means platform/toolchain version mismatches could block contributors on non-macOS systems.
Active areas of work
Active development in background indexing (see Contributor Documentation/Enable Experimental Background Indexing.md), BSP extensions (Contributor Documentation/BSP Extensions.md), and configuration schema generation (SourceKitLSPDevUtils/Sources/ConfigSchemaGen). The presence of detailed contributor docs on Adding LSP/BSP Messages, Code Actions, and Memory Leak Debugging indicates ongoing feature work and quality improvements.
🚀Get running
Clone and build with Swift: git clone https://github.com/swiftlang/sourcekit-lsp && cd sourcekit-lsp && swift build. For development, use the devcontainer: open in VS Code with the .devcontainer/default/devcontainer.json config. Requires Swift 5.9+ and clang/clangd headers.
Daily commands:
swift build produces an executable. Run with swift run sourcekit-lsp or point your editor's LSP client at the built binary. For development with logging, see Contributor Documentation/Logging.md. VS Code launch config available at .vscode/launch.json.
🗺️Map of the codebase
Sources/BuildServerIntegration/BuildServerManager.swift— Central orchestrator for build server lifecycle and communication; all LSP requests depend on this for understanding project structure.Package.swift— Defines all Swift module dependencies, build targets, and the complete project structure; essential for understanding how to compile and extend the codebase.Sources/ClangLanguageService/ClangLanguageService.swift— Main bridge to clangd for C/C++/Objective-C support; critical path for non-Swift language server requests.CMakeLists.txt— Build configuration for native dependencies (CCompletionScoring C module); required for Linux/non-Xcode builds.Sources/CompletionScoring/Semantics/CompletionScore.swift— Semantic ranking engine for code completions; directly impacts quality of IDE suggestions which is core product value.Sources/BuildServerIntegration/SwiftPMBuildServer.swift— Swift Package Manager integration layer; handles most Swift projects' build discovery and settings.Contributor Documentation/Overview.md— High-level architecture and design decisions documented; foundational reading for understanding module organization and design patterns.
🛠️How to make changes
Add a new code action (refactoring/fix)
- Review existing refactoring action patterns in (
Contributor Documentation/Code Action.md) - Implement the action handler in the appropriate language service (ClangLanguageService for C-based, or sourcekitd wrapper for Swift) (
Sources/ClangLanguageService/ClangLanguageService.swift) - Register the action in the LSP codeActionProvider handler (
Sources/LanguageServerProtocol (inferred)) - Add test cases following the test patterns documented in (
Contributor Documentation/Testing.md)
Add support for a new build system
- Create a new build server adapter implementing the BuildServerAdapter protocol (
Sources/BuildServerIntegration/ExternalBuildServerAdapter.swift) - Implement project detection logic by adding a case to DetermineBuildServer (
Sources/BuildServerIntegration/DetermineBuildServer.swift) - Parse build settings and populate FileBuildSettings for the new system (
Sources/BuildServerIntegration/FileBuildSettings.swift) - Add integration tests to verify build discovery and settings population (
Contributor Documentation/Testing.md)
Improve completion scoring for a specific scenario
- Understand existing scoring components and weights in (
Sources/CompletionScoring/Semantics/CompletionScore.swift) - Add or modify a component scorer (e.g., TypeCompatibility, ScopeProximity) (
Sources/CompletionScoring/Semantics/Components/) - If performance is critical, implement C acceleration in (
Sources/CCompletionScoring/CCompletionScoring.c) - Validate with completion ranking tests and real project scenarios (
Contributor Documentation/Testing.md)
Add a new LSP extension or custom message
- Document the extension specification following the pattern in (
Contributor Documentation/LSP Extensions.md) - Define message types and handlers in the LSP protocol layer (
Sources/LanguageServerProtocol (inferred)) - Implement the handler logic in BuildServerManager or the appropriate service (
Sources/BuildServerIntegration/BuildServerManager.swift) - Document the extension for end users in (
Documentation/README.md)
🔧Why these technologies
- Swift (primary language) — Type safety and toolchain integration; native LSP implementation runs on macOS, Linux, Windows via Swift runtime
- sourcekitd (Apple's SourceKit daemon) — High-fidelity Swift IDE support; leverages the same backend as Xcode for consistency and completeness
- clangd (LLVM/Clang LSP) — Industry-standard C/C++/Objective-C support; avoids reimplementing language semantics for 20+ years of C evolution
- C for completion scoring — Performance: completion scoring is invoked on every keystroke; C allows tight loops for ranking thousands of candidates
- Build Server Protocol (BSP) — Decouples language server from specific build tools; supports Swift PM, CMake, Gradle, Bazel via unified interface
- Swift Package Manager — Native Swift project structure; enables single-command build and test of SourceKit-LSP itself
⚖️Trade-offs already made
-
Rely on external build servers (Swift PM, CMake) rather than re-implement build logic
- Why: Build systems are complex and frequently change; reuse existing, battle-tested implementations reduces maintenance burden
- Consequence: Requires additional server discovery/detection step; projects must have a recognized build system or use BSP
-
Two separate language backends (sourcekitd + clangd) rather than one unified analyzer
- Why: sourcekitd and clangd are maintained by their respective communities and provide best-in-class features for each language
- Consequence: Added complexity in LSP routing logic; completion scoring must work across different semantic models; potential feature parity gaps
-
Stateful, long-lived server process rather than stateless on-demand invocations
- Why: Maintains persistent symbol index, project state, and connections; provides fast incremental updates for editor interactions
- Consequence: Memory footprint grows with project size; requires graceful shutdown/reindex on configuration changes; harder to test in isolation
-
Completion scoring in C for performance
- Why: Scores must be computed in milliseconds for every keystroke across thousands of candidates
- Consequence: Harder to maintain and modify scoring logic; C module must be kept in sync with Swift completion logic
-
No built-in background indexing by default (opt-in experimental feature)
- Why: Background indexing can interfere with builds, consume resources, and is complex to
- Consequence: undefined
🪤Traps & gotchas
Swift version coupling: requires Swift 5.9+; sourcekitd ABI changes between toolchain versions can break indexing. No background indexing by default: users must build projects manually or enable experimental feature; this is a critical limitation not obvious from README. Platform-specific: sourcekitd is macOS-only; Linux/Windows development requires clangd fallback. Stale index gotcha: if Swift modules aren't rebuilt, cross-module completion fails silently. CMake coupling: compile_commands.json must be in repo root or configured path; missing or stale JSON causes C/C++ features to fail without clear error. Environment variables: multiple options documented in Contributor Documentation/Environment Variables.md control logging and indexing; CI/testing may require specific settings.
🏗️Architecture
💡Concepts to learn
- Language Server Protocol (LSP) — SourceKit-LSP's core architecture: understanding LSP's request/response model (textDocument/completion, textDocument/definition, etc.) is essential to understanding how editor features map to backend services
- Build Server Protocol (BSP) — SourceKit-LSP extends LSP with BSP for build system integration (detecting source files, compilation flags); critical for handling SPM and CMake projects
- sourcekitd IPC (Inter-Process Communication) — SourceKit-LSP communicates with Apple's sourcekitd daemon over IPC; understanding this boundary explains indexing delays, ABI fragility, and why Swift version alignment matters
- Semantic indexing and symbol tables — SourceKit-LSP maintains an in-memory index of symbols (functions, types, variables) for fast jump-to-definition and completion; understanding the index structure is key to debugging cross-module lookup failures
- compile_commands.json (LLVM compilation database) — SourceKit-LSP consumes compile_commands.json for C/C++ projects (CMake-generated); understanding this format and toolchain coupling is essential for supporting non-SPM projects
- Incremental indexing and change tracking — SourceKit-LSP must efficiently handle document edits and reindex only affected symbols; the TextDocumentSyncKind (full vs. incremental) and background indexing (experimental) rely on this pattern
- Diagnostic aggregation across multiple backends — SourceKit-LSP runs both sourcekitd and clangd in parallel and merges diagnostics; understanding how conflicts are resolved and how errors are deduplicated is critical for diagnosis correctness
🔗Related repos
apple/swift— Contains sourcekitd implementation; SourceKit-LSP wraps sourcekitd as its Swift indexing backendclangd/clangd— LLVM's language server for C/C++; SourceKit-LSP uses clangd as the C-language backendMicrosoft/language-server-protocol— Canonical LSP specification; SourceKit-LSP implements the protocol defined herebuild-server-protocol/build-server-protocol— BSP specification (Build Server Protocol); SourceKit-LSP implements BSP extensions for build integrationswiftlang/swift-package-manager— Companion project; SourceKit-LSP tightly integrates with SPM for project discovery and build configuration
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add comprehensive unit tests for BuildServerIntegration module
The BuildServerIntegration directory contains 10+ critical files handling build server communication (BuildServerManager.swift, ExternalBuildServerAdapter.swift, BuiltInBuildServerAdapter.swift, etc.), but there's no visible test coverage in the file structure. Given the complexity of BSP/LSP integration and the potential for build failures, adding unit tests for build server lifecycle, message routing, and error handling would significantly improve reliability and prevent regressions.
- [ ] Create Tests/BuildServerIntegrationTests/ directory structure
- [ ] Add BuildServerManagerTests.swift covering initialization, connection, and disconnection flows
- [ ] Add ExternalBuildServerAdapterTests.swift with mock BSP server interactions
- [ ] Add CompilationDatabaseTests.swift for parsing and caching logic
- [ ] Add BuildTargetIdentifierExtensionTests.swift for identifier validation and matching
- [ ] Document test setup in Contributor Documentation/Testing.md if not already present
Expand Contributor Documentation with LSP/BSP message flow diagrams and examples
The Contributor Documentation includes 'Adding LSP and BSP Messages.md' and 'LSP Extensions.md', but based on the file structure, there's no detailed guide with code examples showing how messages flow through the system. New contributors adding features often struggle with understanding where to hook into the codebase. Adding sequence diagrams, code examples, and a walkthrough of how a single request (e.g., textDocument/completion) flows from editor → SourceKit-LSP → clangd would dramatically reduce onboarding friction.
- [ ] Create Contributor Documentation/Message Flow Architecture.md with sequence diagrams
- [ ] Add code examples showing a complete request/response cycle for textDocument/definition
- [ ] Document how BSP BuildTargetIdentifier routing works in practice with examples
- [ ] Update Contributor Documentation/Overview.md to link to the new message flow guide
- [ ] Include examples of how to add a new LSP message in Contributor Documentation/Adding LSP and BSP Messages.md
Add GitHub Actions workflow for testing against multiple Swift toolchain versions
The .github/ISSUE_TEMPLATE directory exists, but there's no CI configuration visible in the partial file structure. Given that SourceKit-LSP ships with Swift toolchains and must maintain compatibility across versions, adding a matrix-based GitHub Actions workflow to test against multiple Swift versions (6.0, 5.10, 5.9, etc.) would catch version-specific regressions early and provide confidence for releases.
- [ ] Create .github/workflows/ci-swift-versions.yml with matrix testing across 3+ Swift versions
- [ ] Include build, unit test, and integration test stages
- [ ] Test against both macOS and Linux (Ubuntu) runners to ensure cross-platform compatibility
- [ ] Add badge/status check to README.md linking to workflow results
- [ ] Document in CONTRIBUTING.md how to manually test against different Swift versions locally
🌿Good first issues
- Add missing test coverage for the ConfigSchemaGen module (SourceKitLSPDevUtils/Sources/ConfigSchemaGen/) by writing Swift tests that verify JSON schema generation matches documented LSP extensions
- Expand Contributor Documentation/Code Action.md with a worked example: walk through implementing a single new refactoring action (e.g., a simple symbol rename helper) and document the file changes needed
- Create automated linting checks in CI for environment variable documentation: the Contributor Documentation/Environment Variables.md list should be auto-validated against code that actually reads env vars; write a Python script to detect undocumented vars
⭐Top contributors
Click to expand
Top contributors
- @rintaro — 39 commits
- @ahoppen — 30 commits
- @Steffeeen — 5 commits
- @owenv — 5 commits
- @plemarquand — 4 commits
📝Recent commits
Click to expand
Recent commits
2773bcd— Merge pull request #2633 from rintaro/sourcekitd-inject (rintaro)6be68bb— Merge pull request #2636 from jakepetroules/patch-1 (rintaro)4b2fa31— Allow injection of a pre-initialized sourcekitd connection (rintaro)7a8aaea— Update minimum macOS version to v15 (jakepetroules)234890c— Merge pull request #2607 from DeeSee/fix-duplicate-rename-edits (ahoppen)5dfb4d4— Merge pull request #2623 from bkhouri/t/gh2576/follow-up-pr (ahoppen)1f7be4b— Tests: Update tests based (bkhouri)0b1a2cb— Make RenameLocation unique (askvortsov-yandex-team)caa4b97— Merge pull request #2597 from Steffeeen/inlay-hint-performance (ahoppen)c5593c0— Cache inlay hints to avoid flickering (Steffeeen)
🔒Security observations
SourceKit-LSP has a moderate security posture. The main concerns are: (1) C code components that may be vulnerable to memory safety issues, (2) external build server integration without explicit security controls, (3) shell command and JSON parsing that requires input validation. The codebase lacks visible secrets in configuration files and follows reasonable project structure. Recommendations include implementing strict input validation, adding TLS verification for external connections, using safe system command execution, and conducting security-focused code review of the C components and build server integration code. No critical vulnerabilities were identified, but Medium-severity issues should be addressed before production deployment in high-security environments.
- Medium · C Code Without Input Validation —
Sources/CCompletionScoring/CCompletionScoring.c, Sources/CSKTestSupport/CSKTestSupport.c. The codebase contains C source files (CCompletionScoring.c, CSKTestSupport.c) that may process untrusted input from LSP protocol messages or file content. C code is inherently vulnerable to buffer overflows and memory safety issues if input validation is insufficient. Fix: Implement strict input validation and bounds checking in C code. Consider using safe C libraries or replacing with Swift where possible. Apply fuzzing tests to C components. - Medium · External Build Server Integration Without Security Boundary —
Sources/BuildServerIntegration/ExternalBuildServerAdapter.swift. The ExternalBuildServerAdapter allows communication with external build servers. If the build server connection is not properly authenticated and encrypted, this could allow man-in-the-middle attacks or unauthorized command execution. Fix: Implement TLS/SSL verification for external build server connections. Validate build server certificates. Add authentication mechanisms (API keys, tokens) for build server communication. Document security requirements for external build servers. - Medium · Potential Command Injection in Shell Command Parsing —
Sources/BuildServerIntegration/SplitShellCommand.swift. The SplitShellCommand.swift handles parsing of shell commands from build systems. Improper parsing could lead to command injection vulnerabilities if the output is used to execute system commands. Fix: Use parameterized execution instead of shell interpretation. Never pass unparsed shell commands directly to system() or similar functions. Implement whitelist validation for expected command patterns. - Low · Compilation Database Processing Without Validation —
Sources/BuildServerIntegration/JSONCompilationDatabaseBuildServer.swift, Sources/BuildServerIntegration/FixedCompilationDatabaseBuildServer.swift. The JSONCompilationDatabaseBuildServer and FixedCompilationDatabaseBuildServer parse JSON files that may contain paths and compiler flags from untrusted sources. Insufficient validation could lead to path traversal or argument injection. Fix: Validate all file paths to prevent directory traversal. Sanitize compiler flags before use. Implement JSON schema validation for compilation databases. Use safe APIs for file access. - Low · Missing Security Headers in DevContainer Configuration —
.devcontainer/default/Dockerfile. The Dockerfile in .devcontainer may not include security best practices such as running as non-root user or using minimal base images. Fix: Run container as non-root user. Use specific base image versions (not 'latest'). Include USER directive. Scan base image for vulnerabilities. Minimize layer count. - Low · Potential Sensitive Information in Configuration Files —
Documentation/Configuration File.md, Contributor Documentation/Environment Variables.md. Configuration files (Configuration File.md, environment variables documentation) may inadvertently document sensitive settings or contain examples with credentials. Fix: Audit all documentation for sensitive examples. Never include credentials in documentation or example configs. Use placeholder values (e.g., ${API_KEY}). Document secure configuration practices.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.