realm/jazzy
Soulful docs for Swift & Objective-C
Healthy across all four use cases
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 2w ago
- ✓8 active contributors
- ✓MIT licensed
Show 3 more →Show less
- ✓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.
[](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:
- 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/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 |
#!/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).
⚡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
- lib/jazzy.rb: Main entry point that orchestrates the entire documentation generation pipeline
- lib/jazzy/doc_builder.rb: Core logic for parsing Swift/Objective-C code and extracting documentation metadata
- lib/jazzy/documentation_generator.rb: Converts parsed AST and documentation into renderable HTML/Markdown representation
- lib/jazzy/config.rb: Handles .jazzy.yaml configuration file parsing and CLI argument processing
- lib/jazzy/docset_builder.rb: Generates macOS docset format for Xcode integration
- bin/jazzy: CLI entry point that users invoke; routes to lib/jazzy/executable.rb
- js/package.json: Frontend dependency management (search, math rendering, typeahead)
- .github/workflows/Tests.yml: CI/CD configuration showing how the project is tested and deployed
🛠️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,Throwsin 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
.docsetbundles compatible with Xcode's offline documentation viewer; this format is whydocset_builder.rbexists - 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
.swiftmodulefiles using their symbol graph metadata instead of source code; this enables documenting closed-source or pre-built frameworks
🔗Related repos
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 projectsrealm/jazzy-plugin-swiftlint— Companion plugin integrating SwiftLint rule enforcement into Jazzy-generated docs for code quality insightsjpsim/SourceKitten— Underlying framework (vendored inbin/sourcekitten) that Jazzy uses to interface with SourceKit and extract AST datanicklockwood/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.rbconfiguration parsing, especially edge cases around.jazzy.yamlfile loading and CLI argument override behavior. - Extend
lib/jazzy/extensions/gitlab/to feature-parity with the GitHub extension (currently minimalist compared tolib/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
Top contributors
- @johnfairh — 88 commits
- @dependabot[bot] — 6 commits
- @Enricoza — 1 commits
- @scosman — 1 commits
- @argjiramala-tomtom — 1 commits
📝Recent commits
Click to expand
Recent commits
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— Allowcustom_categoriesto 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.
👉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.