RepoPilotOpen in app →

realm/jazzy

Soulful docs for Swift & Objective-C

Healthy

Healthy across all four use cases

Use as dependencyHealthy

Permissive license, no critical CVEs, actively maintained — safe to depend on.

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit 2w ago
  • 8 active contributors
  • MIT licensed
Show 3 more →
  • CI configured
  • Tests present
  • Single-maintainer risk — top contributor 88% of recent commits

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.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/realm/jazzy)](https://repopilot.app/r/realm/jazzy)

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/realm/jazzy on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: realm/jazzy

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:

  1. 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.
  2. 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.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/realm/jazzy 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 all four use cases

  • Last commit 2w ago
  • 8 active contributors
  • MIT licensed
  • CI configured
  • Tests present
  • ⚠ Single-maintainer risk — top contributor 88% of recent commits

<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 realm/jazzy repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/realm/jazzy.

What it runs against: a local clone of realm/jazzy — 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 realm/jazzy | Confirms the artifact applies here, not a fork | | 2 | License is still MIT | Catches relicense before you depend on it | | 3 | Default branch master exists | Catches branch renames | | 4 | Last commit ≤ 46 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>realm/jazzy</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of realm/jazzy. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/realm/jazzy.git
#   cd jazzy
#
# 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 realm/jazzy and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "realm/jazzy(\\.git)?\\b" \\
  && ok "origin remote is realm/jazzy" \\
  || miss "origin remote is not realm/jazzy (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
  && ok "license is MIT" \\
  || miss "license drift — was MIT at generation time"

# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
  && ok "default branch master exists" \\
  || miss "default branch master no longer exists"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 46 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~16d)"
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/realm/jazzy"
  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).

</details>

TL;DR

Jazzy is a macOS command-line tool that generates beautiful API documentation for Swift and Objective-C projects by parsing their Abstract Syntax Trees (AST) via Clang and SourceKit, then rendering them to match Apple's official reference documentation style. It supports both Xcode and Swift Package Manager projects, and can generate docs from compiled Swift modules using symbol graphs. Monolithic Ruby gem: lib/jazzy/ contains the core engine split by concern (config.rb, doc_builder.rb, documentation_generator.rb, docset_builder/). Themes and extensions live in lib/jazzy/extensions/ (github, gitlab, bitbucket, katex). Frontend assets in js/ use Node dependencies. Entry point is bin/jazzy which calls lib/jazzy.rb.

👥Who it's for

Swift and Objective-C library/framework developers who want to auto-generate professional API documentation from source code comments without manually writing HTML, and teams managing open-source iOS/macOS libraries that need Apple-style reference docs.

🌱Maturity & risk

Production-ready and actively maintained. The project has GitHub Actions CI (Tests.yml), a comprehensive CHANGELOG, clear contributing guidelines, and structured test infrastructure. It's a Realm project with established governance, though commit recency and issue volume should be verified in the live repo.

Minimal risk. The Ruby gem has only 5 npm dependencies (lunr, katex, jquery, corejs-typeahead) and 0 Ruby dependencies visible in Gemfile structure. Primary risk is macOS-only requirement and tight coupling to Xcode/SourceKit versions; Linux support is experimental. Single-maintainer risk exists if owned solely by Realm.

Active areas of work

Cannot determine from file list alone — check GitHub Actions workflow status in .github/workflows/Tests.yml and recent commits. The repo structure suggests ongoing maintenance of Swift/Objective-C compatibility and theme extensions (Bitbucket, GitLab, GitHub).

🚀Get running

git clone https://github.com/realm/jazzy.git
cd jazzy
bundle install
bundle exec bin/jazzy --help

Daily commands: Run bundle exec bin/jazzy from root of a Swift/Xcode project. For npm frontend assets, run npm install in js/ directory. For tests: bundle exec rake (inferred from Rakefile presence).

🗺️Map of the codebase

🛠️How to make changes

Config changes: lib/jazzy/config.rb. Output generation: lib/jazzy/doc_builder.rb and lib/jazzy/documentation_generator.rb. Templates: lib/jazzy/docset_builder/info_plist.mustache and theme templates. Theme extensions: add to lib/jazzy/extensions/. Styling: edit js/ SCSS files. CLI interface: bin/jazzy and lib/jazzy/executable.rb.

🪤Traps & gotchas

macOS-only: Jazzy requires macOS; Linux support is experimental and not officially guaranteed. SourceKit coupling: Documentation generation depends on SourceKit availability in your Xcode version; mismatched Xcode versions may break parsing. Module detection: Jazzy auto-detects the primary module but may document the wrong one if multiple targets exist; use --module flag to disambiguate. Build prerequisites: Your Swift/Objective-C project must build successfully with xcodebuild or swift build before Jazzy can document it. Mustache templating: Theme customization requires understanding Mustache syntax; see lib/jazzy/docset_builder/ for template structure.

💡Concepts to learn

  • Abstract Syntax Tree (AST) — Jazzy's entire accuracy depends on parsing code via Clang/SourceKit AST rather than regex; this is why it handles complex Swift generics and macros correctly
  • SourceKit and Clang integration — Jazzy hooks directly into Xcode's SourceKit daemon and Clang compiler frontend; understanding this coupling explains macOS-only requirement and Xcode version sensitivity
  • Markup documentation (Swift docsyntax) — Jazzy renders special keywords like Parameters, Returns, Throws in documentation comments; understanding Apple's markup syntax is essential for writing documentable code
  • Mustache templating — Jazzy uses Mustache templates (in lib/jazzy/docset_builder/) to hydrate documentation into HTML; theme customization requires Mustache syntax knowledge
  • macOS docset format — Jazzy generates .docset bundles compatible with Xcode's offline documentation viewer; this format is why docset_builder.rb exists
  • Lunr full-text search indexing — The generated docs include client-side search powered by Lunr (JS dependency in package.json); understanding how Lunr indexes the documentation enables custom search tuning
  • Symbol graphs (Swift modules) — Jazzy can generate docs from compiled .swiftmodule files using their symbol graph metadata instead of source code; this enables documenting closed-source or pre-built frameworks
  • apple/swift-docc — Apple's official documentation compiler for Swift; modern alternative using Symbol Graphs, but Jazzy remains preferred for Objective-C and legacy Swift projects
  • realm/jazzy-plugin-swiftlint — Companion plugin integrating SwiftLint rule enforcement into Jazzy-generated docs for code quality insights
  • jpsim/SourceKitten — Underlying framework (vendored in bin/sourcekitten) that Jazzy uses to interface with SourceKit and extract AST data
  • nicklockwood/SwiftFormat — Complementary Swift code formatting tool often used alongside Jazzy in CI pipelines to ensure consistent documented code style

🪄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 lib/jazzy/config.rb configuration parsing

The config.rb file is critical for parsing jazzy configuration options, but there's no dedicated test file visible in the repo structure. Given the complexity of configuration handling (theme selection, output paths, source file patterns, etc.), this module needs robust test coverage to prevent regressions when configuration formats change.

  • [ ] Create spec/lib/jazzy/config_spec.rb with tests for YAML parsing
  • [ ] Test all documented config options from README and CONTRIBUTING.md
  • [ ] Add tests for default value handling and config validation
  • [ ] Test config merging from multiple sources (CLI args, config file, defaults)
  • [ ] Ensure tests run in CI via Tests.yml workflow

Add missing documentation for KaTeX math rendering feature in README.md

The repo includes extensive KaTeX font files and CSS assets (lib/jazzy/extensions/katex/), indicating math rendering is a supported feature. However, images/math.png exists but there's no documented example showing users how to use this feature. This is a high-value contributor task since the feature already exists but lacks visibility.

  • [ ] Add a 'Math Rendering' section to README.md with KaTeX syntax examples
  • [ ] Document the configuration option needed to enable KaTeX in jazzy
  • [ ] Include example Swift/Objective-C code comments with LaTeX math expressions
  • [ ] Reference the math.png image as a demonstration of the output
  • [ ] Update CHANGELOG.md if this is a recent feature without proper documentation

Create integration tests for docset_builder functionality in lib/jazzy/docset_builder/

The docset_builder module handles generating Apple-compatible documentation sets, which is a specialized feature affecting downstream tools like Xcode. The directory structure shows a mustache template (info_plist.mustache) but no visible test coverage for docset generation pipeline. This is critical for maintaining compatibility.

  • [ ] Create spec/lib/jazzy/docset_builder_spec.rb for end-to-end docset generation tests
  • [ ] Test Info.plist generation from the mustache template with various project configurations
  • [ ] Add tests verifying correct directory structure of generated .docset bundles
  • [ ] Test docset compatibility with Xcode and documentation viewers
  • [ ] Run tests in CI to catch regressions in the docset_builder workflow

🌿Good first issues

  • Add unit tests for lib/jazzy/config.rb configuration parsing, especially edge cases around .jazzy.yaml file loading and CLI argument override behavior.
  • Extend lib/jazzy/extensions/gitlab/ to feature-parity with the GitHub extension (currently minimalist compared to lib/jazzy/extensions/github/)—add repository link generation and file preview integrations.
  • Document the symbol graph support for compiled Swift modules (mentioned in README but no examples or guide in lib/jazzy/ code comments); add a tutorial in CONTRIBUTING.md with a runnable example.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • db9cbf8 — Move CI to Xcode 26.4 (#1432) (johnfairh)
  • 5ff7292 — Update apple theme demo location (#1428) (johnfairh)
  • 8852cdb — Add empty changelog, update specs to master (johnfairh)
  • 6429ecf — Release 0.15.4 and update gems (#1425) (johnfairh)
  • bc47153 — Suppress a bad duplicate-usr warning (#1426) (johnfairh)
  • 43a8855 — Update to KaTeX 0.16.25 (#1424) (johnfairh)
  • c286711 — Better identify Swift default implementations (#1423) (johnfairh)
  • b6365b4 — Allow custom_categories to define a regex or a name for each category child (#1418) (Enricoza)
  • 0956e7e — Move CI to Xcode 26 (#1422) (johnfairh)
  • e65282f — Work around activesupport logger bug (#1416) (johnfairh)

🔒Security observations

The jazzy codebase has a moderate security posture. Primary concerns include reliance on jQuery (with medium complexity), lack of documented input validation/sanitization for generated HTML output, and missing security headers guidance for deployment. Dependencies are relatively current (jQuery 3.7.1, KaTeX 0.16.8, etc.). The project lacks explicit security documentation and coordination policies. No critical vulnerabilities identified in the provided file structure and dependencies, but security hardening recommendations should be implemented, particularly around HTML escaping in documentation generation and security guidance for deployed documentation.

  • Medium · Outdated jQuery Dependency — js/package.json - jquery dependency. jQuery 3.7.1 is used in js/package.json. While this is a relatively recent version, jQuery is a large legacy library with a broad attack surface. Consider evaluating if jQuery is still necessary given modern JavaScript alternatives. Fix: Review if jQuery is still needed. If modernizing is not feasible, ensure jQuery updates are applied promptly when security patches are released. Monitor CVE databases for jQuery vulnerabilities.
  • Low · Missing Security Headers Configuration — Documentation generation pipeline (lib/jazzy/doc_builder.rb, lib/jazzy/documentation_generator.rb). No evidence of security headers configuration in generated documentation output. The tool generates static HTML documentation which should be served with appropriate security headers (CSP, X-Frame-Options, X-Content-Type-Options, etc.). Fix: Document security best practices for deploying generated documentation. Recommend users configure their web server with appropriate security headers when serving generated docs. Consider adding a security headers guide in CONTRIBUTING.md or README.md.
  • Low · No Input Validation Documentation for User Content — lib/jazzy/doc_builder.rb, lib/jazzy/documentation_generator.rb. As a documentation generator that processes Swift/Objective-C comments and metadata, there is potential for XSS if malformed or malicious content in code comments is not properly escaped. No evidence of sanitization strategy in file structure. Fix: Ensure all user-supplied content (from source code comments, docstrings, and metadata) is properly HTML-escaped before being embedded in generated documentation. Review HTML generation code for proper encoding of special characters.
  • Low · Missing Security Policy — Repository root. No visible SECURITY.md or security policy file for coordinated vulnerability disclosure. Fix: Create a SECURITY.md file with vulnerability disclosure procedures, contact information for security issues, and security best practices for users of the tool.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Healthy signals · realm/jazzy — RepoPilot