Skip to main content

🪶 Quill (Query-based Unified Issue Lightweight Linker)

quill syncs GitHub issues and comments from multiple public repositories to an on-premise Jira instance. It is fully stateless — no local database or state file needed.

How the stateless design works

Each synced Jira issue gets the original GitHub issue URL stored in a Jira custom field (e.g., customfield_10200). On every sync run, quill queries Jira via JQL to discover which issues are already synced, then creates or updates as needed.

A content hash is embedded as an invisible footer in the Jira description (<!-- quill:sha256:... -->), enabling fast change detection without full-text diffing.

Features

  • Multi-repository sync: Map multiple GitHub repos to specific Jira projects.
  • Stateless: No local database — works natively in GitHub Actions without caching hacks.
  • Incremental updates: SHA256 content hashes detect changes to title, body, labels, or state.
  • State transitions: Optionally closes Jira issues when GitHub issues are closed.
  • Comment sync: Comments are attributed (e.g., "@user commented on GitHub").
  • Dry-run mode: Preview changes without writing to Jira.
  • Minimal dependencies: PyGithub, python-jira, pydantic, pyyaml, rich, and stdlib argparse.

Installation

pixi install

This creates a Conda environment, installs all dependencies, and links the quill package in editable mode.

Configuration

quill is configured via a YAML file (see quill.yaml.example):

github:
  token: ${GITHUB_TOKEN}
  repos:
    - owner: your-org
      repo: your-repo
      jira_project: CAS
      sync_labels: true
      sync_comments: true
      issue_filter:
        labels: ["bug", "enhancement"]
        state: open
        since: "2024-01-01"

jira:
  server: https://jira.example.com
  token: ${JIRA_PAT}
  verify_ssl: true
  default_issue_type: Task
  github_link_field: customfield_10200   # custom field for GitHub URL

sync:
  dry_run: false
  batch_size: 50

Jira custom field setup

You need a custom field in Jira (type: URL or Text) to store the GitHub issue link. Set github_link_field in the config to the field's internal ID (e.g., customfield_10200). Ask your Jira admin if you don't have one.

Usage

# Generate a template config
pixi run quill init

# Test connectivity to GitHub and Jira
pixi run quill check

# Run synchronization
pixi run quill sync

# Sync a specific repo only
pixi run quill sync --repo your-org/your-repo

# Dry run — preview without writing
pixi run quill sync --dry-run

# Show synced issue counts (queries Jira)
pixi run quill status

Or using pixi tasks directly:

pixi run sync
pixi run check
pixi run status
pixi run test

Metadata

Release files for quill-sync 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quill-sync 0.1.4
File Size Uploaded Provenance
quill_sync-0.1.4.tar.gz 108.2 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for quill-sync 0.1.4
File Interpreter ABI Platform
quill_sync-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 146.1 kB

Release files / quill_sync-0.1.4.tar.gz

Download URL quill_sync-0.1.4.tar.gz
Size 108.2 kB
Tags Source
SHA-256 checksum
How to use checksums
4a10f1b7552ec7810ceb5b50e183b5b6fd6a209fc62a630a2758917167584dd7
BLAKE2b-256 checksum
How to use checksums
1d6e16ede290568eaae2e8bab22a669c772bc80c03e1ea57da5e283606264e64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 26, 2026.

Transparency log

Release files / quill_sync-0.1.4-py3-none-any.whl

Download URL quill_sync-0.1.4-py3-none-any.whl
Size 38.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
247072190ff1fe72253400e2df90084e667901cc82253dade11b01186d6e33bb
BLAKE2b-256 checksum
How to use checksums
d1e7c5d2111ed40b8916bcf0db3eaecbf1f63aed4efb4c2435512b571c42cf97
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 26, 2026.

Transparency log

Security for quill-sync 0.1.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for quill_sync-0.1.4.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 26, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page