RepoPilotOpen in app →

citation-style-language/styles

Official repository for Citation Style Language (CSL) citation styles.

Mixed

Missing license — unclear to depend on

worst of 4 axes
Use as dependencyConcerns

no license — legally unclear; no tests detected

Fork & modifyConcerns

no license — can't legally use code; no tests detected

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isConcerns

no license — can't legally use code

  • Last commit 2d ago
  • 10 active contributors
  • Distributed ownership (top contributor 36% of recent commits)
Show 3 more →
  • CI configured
  • No license — legally unclear to depend on
  • No test directory detected
What would change the summary?
  • Use as dependency ConcernsMixed if: publish a permissive license (MIT, Apache-2.0, etc.)
  • Fork & modify ConcernsMixed if: add a LICENSE file
  • Deploy as-is ConcernsMixed if: add a LICENSE file

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 "Great to learn from" badge

Paste into your README — live-updates from the latest cached analysis.

RepoPilot: Great to learn from
[![RepoPilot: Great to learn from](https://repopilot.app/api/badge/citation-style-language/styles?axis=learn)](https://repopilot.app/r/citation-style-language/styles)

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/citation-style-language/styles on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: citation-style-language/styles

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/citation-style-language/styles 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

WAIT — Missing license — unclear to depend on

  • Last commit 2d ago
  • 10 active contributors
  • Distributed ownership (top contributor 36% of recent commits)
  • CI configured
  • ⚠ No license — legally unclear to depend on
  • ⚠ No test directory 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 citation-style-language/styles repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/citation-style-language/styles.

What it runs against: a local clone of citation-style-language/styles — 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 citation-style-language/styles | Confirms the artifact applies here, not a fork | | 2 | Default branch master exists | Catches branch renames | | 3 | Last commit ≤ 32 days ago | Catches sudden abandonment since generation |

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

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

# 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 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/citation-style-language/styles"
  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

The official curated repository of Citation Style Language (CSL) styles—XML-based formatting templates that define how citations and bibliographies should appear across thousands of academic journals, conferences, and publications. It contains ~2,000+ pre-built CSL style files (e.g., acta-physiologica.csl, academy-of-management-review.csl) that third-party citation processors use to automatically format references in the exact format required by specific journals or standards. Flat file structure: 2,000+ CSL style XML files at root level (named by journal/citation-style like academy-of-management-review.csl), with supporting documentation files (STYLE_REQUIREMENTS.md, STYLE_DEVELOPMENT.md, etc.), a Ruby test/validation pipeline in the Rakefile, and GitHub Actions workflows for automated validation and merging.

👥Who it's for

Citation management software developers (Zotero, Mendeley, Papers, etc.) who need pre-built, production-ready citation formatting templates; academic journal publishers who require CSL style files for their submission systems; and researchers who use these styles via desktop or web-based reference managers to auto-format bibliographies.

🌱Maturity & risk

Highly mature and production-critical. This is the single authoritative CSL style repository used by hundreds of thousands of end users across dozens of third-party tools. CI pipelines are active (GitHub Actions: label-gun.yml, merge.yaml, sheldon.yaml), with automated merge workflows and quality control gates. The repo has strict contribution guidelines (CONTRIBUTING.md, REVIEW_GUIDELINES.md, QUALITY_CONTROL.md) indicating active curation.

Low technical risk but high curation risk. The repo has minimal code dependencies (15,150 lines Ruby, mostly tooling), but depends entirely on community contributions and careful manual review of XML files. Risks include: style quality degradation if review capacity decreases, breaking changes to CSL schema requiring batch re-validation of all styles, and potential lag between spec updates and style repository updates. The stale.yml and PR template suggest active management of issue backlog.

Active areas of work

Active curation and submission processing. The repository uses GitHub Actions workflows (sheldon.yaml likely runs CSL validators, merge.yaml handles PR merges) and a PR template to standardize incoming style submissions. The dependabot.yml indicates dependency management is enabled. Specific workstreams visible: style validation automation, dependency updates, and community PR triage.

🚀Get running

Clone and validate styles locally: git clone https://github.com/citation-style-language/styles.git && cd styles && bundle install (uses Gemfile/Gemfile.lock for Ruby dependencies). Then run validation: bundle exec rake (see Rakefile for available tasks). No live service needed—this is a pure data + validation tools repository.

Daily commands: This repo is not a running service but a validation/build system. To validate styles locally: bundle exec rake (runs test suite defined in Rakefile). To check a specific style: ruby scripts likely exist in the repo root or a lib/ folder (not shown in file list, but implied by Gemfile). To see available tasks: bundle exec rake -T.

🗺️Map of the codebase

  • STYLE_REQUIREMENTS.md: Authoritative specification for what makes a valid CSL style file—required reading before contributing any style.
  • STYLE_DEVELOPMENT.md: Practical guide and best practices for writing or modifying CSL styles; essential for understanding CSL XML structure and testing.
  • REVIEW_GUIDELINES.md: Documents the curation criteria and review process used by maintainers to assess incoming style submissions.
  • Rakefile: Defines the build and validation pipeline; likely invokes CSL schema validators and runs test suite on all style files.
  • .github/workflows/sheldon.yaml: Automated CSL style validation workflow; likely runs on every PR to catch schema violations and feature issues early.
  • .github/PULL_REQUEST_TEMPLATE.md: Standardized PR template enforces consistent metadata and reasoning for style submissions or changes.
  • QUALITY_CONTROL.md: Details the QA processes and testing methodology for maintaining repository integrity and consistency.
  • [Gemfile / Gemfile.lock](https://github.com/citation-style-language/styles/blob/master/Gemfile / Gemfile.lock): Declares Ruby dependencies for validation and testing tools; lock file ensures reproducible CI runs across contributors.

🛠️How to make changes

For adding/modifying CSL styles: (1) Edit or create .csl files at root level following STYLE_REQUIREMENTS.md and STYLE_DEVELOPMENT.md; (2) Run bundle exec rake to validate against CSL schema and test suite; (3) Submit PR referencing PULL_REQUEST_TEMPLATE.md; (4) Address review feedback per REVIEW_GUIDELINES.md. For repo tooling: modify Rakefile or scripts in lib/ (inferred) and add tests under .rspec config.

🪤Traps & gotchas

CSL XML schema version mismatches: styles must validate against a specific CSL schema version (defined in spec, not always explicit in repo). The sheldon.yaml workflow likely enforces this, but local Ruby environment must match CI environment exactly. PR merging uses GitHub Actions (merge.yaml), so PRs may auto-merge without human intervention if they pass all checks—be aware that typos or subtle style issues might slip through if validators don't catch them. Locale files are in a separate repo (citation-style-language/locales), so styles may reference localization keys that won't resolve locally without that repo cloned alongside.

💡Concepts to learn

  • Citation Style Language (CSL) — CSL is the core domain language used throughout this repo—it's an XML-based format for defining citation formatting rules; understanding CSL syntax and semantics is mandatory to contribute styles.
  • XML Schema Validation — Every CSL style file in this repo must validate against the CSL schema; contributors must understand how schema validation works to debug failed CI checks.
  • Locale Inheritance & Fallback — CSL styles reference locale identifiers (e.g., 'en-US') to pull localized strings; understanding how locales cascade and fallback is critical when debugging missing translations or date formats.
  • Citeproc Item Metadata Model — CSL styles operate on structured item metadata (author, title, date, DOI, etc.); knowing the expected fields and their semantics helps write styles that handle edge cases like missing authors or multi-author scenarios.
  • GitHub Actions CI/CD Workflows — This repo uses GitHub Actions (sheldon.yaml, merge.yaml) to automate validation and merging; understanding how these workflows validate styles and enforce quality gates is essential for smooth PR submissions.
  • Curated Repository Governance — Unlike open-source software repos, this is a curated data repository with strict quality gates and human review; understanding the submission, review, and curation process (REVIEW_GUIDELINES.md, QUALITY_CONTROL.md) is key to successful contributions.
  • citation-style-language/locales — Companion repo providing localization data (translations, date formats, terms) that CSL styles in this repo reference via locale identifiers.
  • citation-style-language/schema — The official CSL XML schema specification repository; defines the grammar and valid elements all styles in this repo must conform to.
  • Zotero/zotero — Major third-party consumer of this style repository; Zotero uses these CSL files to power its citation formatting engine for millions of researchers.
  • citeproc-js/citeproc-js — JavaScript CSL processor that renders citations and bibliographies using styles from this repository; widely embedded in browsers and web apps.
  • citation-style-language/citeproc-ruby — Ruby implementation of the CSL processor; likely used by validation and testing tools within this repo's Rakefile.

🪄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 RSpec tests for CSL XML schema validation in Rakefile

The repo contains a Rakefile and .rspec config indicating a Ruby test suite exists, but there's no visible spec/ directory in the file listing. Given 2000+ .csl files need validation, adding comprehensive RSpec tests to validate CSL syntax, required fields, and style compliance would catch regressions early. This directly supports QUALITY_CONTROL.md and STYLE_REQUIREMENTS.md standards.

  • [ ] Create spec/ directory with csl_validation_spec.rb
  • [ ] Add tests for valid/invalid CSL XML structure against CSL schema
  • [ ] Add tests validating required fields per STYLE_REQUIREMENTS.md
  • [ ] Add tests for common style violations (e.g., missing info/title)
  • [ ] Integrate test execution into Rakefile default task
  • [ ] Update .rspec with appropriate formatter and options

Enhance merge.yaml workflow to validate style files before merge

The .github/workflows/merge.yaml exists but likely doesn't perform deep CSL validation. Add a workflow step that runs CSL schema validation (using a tool like csl-validator or custom Ruby script) on modified .csl files in PRs. This prevents malformed styles from reaching the release branch and aligns with REVIEW_GUIDELINES.md.

  • [ ] Update .github/workflows/merge.yaml to add validation job
  • [ ] Add step to detect changed .csl files using git diff
  • [ ] Integrate CSL validator (csl-validator or xmllint-based check)
  • [ ] Add step to validate against official CSL schema
  • [ ] Add reporting of validation errors as workflow annotations
  • [ ] Document validation requirements in CONTRIBUTING.md

Create automated style metadata indexing workflow and index.json

With 2000+ .csl files, maintainers need a way to search/filter styles by metadata (journal name, citation format, locale). Add a GitHub Action that parses all .csl files, extracts title/info/category, and generates an index.json. This supports both contributors and downstream users, and is referenced implicitly in REQUESTING.md.

  • [ ] Create .github/workflows/generate-index.yaml triggered on push to main
  • [ ] Write Ruby script (scripts/generate_index.rb) to parse all .csl files
  • [ ] Extract key metadata: title, id, category, info/author, info/link
  • [ ] Generate committed index.json at repo root
  • [ ] Add index.json to .gitignore if generated, or commit if stable
  • [ ] Document index format in README.md for API consumers

🌿Good first issues

  • Audit a subset of existing .csl files (e.g., all acta-*.csl styles) for compliance with current STYLE_REQUIREMENTS.md and flag any that use deprecated CSL syntax or non-standard variable names—create a GitHub issue with findings and fix candidates.
  • Create example test cases in .rspec or a new spec/styles/ directory with concrete, runnable tests for edge cases in CSL processing (e.g., handling missing author names, multilingual titles, complex date ranges). Reference QUALITY_CONTROL.md to align with existing QA standards.
  • Document and test the exact steps to validate a single style locally (e.g., 'How to run CSL validators on one .csl file'), then create a VALIDATION_QUICKSTART.md file with copy-paste commands and troubleshooting—lower the barrier for first-time contributors.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 78789b1 — Merge pull request #8146 from Specialman8/Lutheran-Theological-University (POBrien333)
  • e1ef21e — Add substitute-short macro for substitute name formatting (Specialman8)
  • e5e10a9 — Merge pull request #8159 from shiyuwang-jamk/master (POBrien333)
  • 54b4dba — Update publication date in suomen-laakarilehti.csl (POBrien333)
  • 2c7b8ba — Add contributor information to suomen-laakarilehti.csl (shiyuwang-jamk)
  • 5a16334 — Update documentation link in suomen-laakarilehti.csl (shiyuwang-jamk)
  • 77bcd6d — Add contributor and update style information (POBrien333)
  • f78e74b — Re-indent CSL styles (Specialman8)
  • 83649ed — Modify collection-title formatting in CSL file (Specialman8)
  • 60e54c8 — minor bug fix with missing dots at the end of year (Specialman8)

🔒Security observations

This is a Citation Style Language (CSL) repository containing XML-based citation style definitions rather than executable application code. The security posture is relatively low-risk due to the nature of the content (static XML files). No hardcoded secrets, SQL injection, or XSS vectors were identified in the visible file structure. However, complete analysis is limited due to missing content from dependency files (Gemfile/Gemfile.lock) and GitHub Actions workflows. The repository uses Dependabot for dependency management, which is a positive security practice. Recommendations include verifying Ruby gem dependencies and reviewing CI/CD workflow configurations for any security misconfigurations.

  • Low · Missing dependency file content analysis — Gemfile, Gemfile.lock. The Gemfile and Gemfile.lock were not provided for analysis. Ruby dependencies cannot be verified for known vulnerabilities. Fix: Run 'bundle audit' or 'bundler-audit' to check for vulnerable gems. Consider using Dependabot (already configured) to monitor dependency vulnerabilities.
  • Low · Incomplete GitHub Actions workflow visibility — .github/workflows/. Several GitHub Actions workflows are present but their content was not provided for review (.github/workflows/label-gun.yml, merge.yaml, sheldon.yaml). Cannot verify for potential security issues like exposed secrets or insecure configurations. Fix: Review all workflow files to ensure: no hardcoded secrets, proper use of GitHub Secrets for sensitive data, minimal permissions granted to actions, and no command injection vectors.
  • Info · Dependabot configuration present — .github/dependabot.yml. Dependabot is configured (.github/dependabot.yml) which indicates automated dependency monitoring is in place. Fix: Ensure Dependabot is actively monitoring the Gemfile and other dependency files. Review and merge security-related PRs promptly.

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.

Mixed signals · citation-style-language/styles — RepoPilot