InstallationΒΆ

Quick startΒΆ

$ cd my-project
$ uvx -- repomatic init
$ git add .
$ git commit -m "Update repomatic files"
$ git push

Works for both new and existing repositories. Run repomatic init --help to see available components and options: the workflows then take it from there, opening issues and PRs to guide any remaining setup.

Try itΒΆ

Thanks to uv, you can run it in one command, without installation or venv:

$ uvx -- repomatic --help
$ repomatic --help
Usage: repomatic [OPTIONS] COMMAND [ARGS]...

Options:
  --time / --no-time           Measure and print elapsed execution time.
                               [default: no-time]
  --config CONFIG_PATH         Location of the configuration file. Supports
                               local path with glob patterns or remote URL.
                               [default: ~/.config/repomatic/{*.toml,*.yaml,*.ym
                               l,*.json,*.ini,pyproject.toml}]
  --no-config                  Ignore all configuration files and only use
                               command line parameters and environment
                               variables.
  --validate-config FILE       Validate the configuration file and exit.
  --export-config FORMAT       Export the configuration in the selected format
                               to <stdout>, then exit.
  --accessible                 Accessibility mode: disable colors and render
                               tables in a plain, screen-reader-friendly format.
  --color [auto|always|never]  Colorize the output. A bare --color is the same
                               as --color=always.  [default: auto]
  --no-color                   Disable colorization (alias of --color=never).
  --progress / --no-progress   Show progress indicators during long operations.
                               Disabled for non-interactive output (pipes, dumb
                               terminals, CI) and by --accessible.  [default:
                               progress]
  --theme [dark|dracula|light|manpage|monokai|nord|solarized_dark]
                               Color theme used for help screens.  [default:
                               dark]
  --params                     Show all CLI parameters, their provenance,
                               defaults and value, then exit.
  --table-format [aligned|asciidoc|colon-grid|csv|csv-excel|csv-excel-tab|csv-unix|double-grid|double-outline|fancy-grid|fancy-outline|github|grid|heavy-grid|heavy-outline|hjson|html|jira|json|json5|jsonc|latex|latex-booktabs|latex-longtable|latex-raw|mediawiki|mixed-grid|mixed-outline|moinmoin|orgtbl|outline|pipe|plain|presto|pretty|psql|rounded-grid|rounded-outline|rst|simple|simple-grid|simple-outline|textile|toml|tsv|unsafehtml|vertical|xml|yaml|youtrack]
                               Rendering style of tables.  [default: rounded-
                               outline]
  --verbosity LEVEL            Either CRITICAL, ERROR, WARNING, INFO, DEBUG.
                               [default: WARNING]
  -v, --verbose                Increase the default WARNING verbosity by one
                               level for each additional repetition of the
                               option.  [default: 0]
  -q, --quiet                  Decrease the default WARNING verbosity by one
                               level for each additional repetition of the
                               option.  [default: 0]
  --tree                       Show the tree of nested subcommands and exit.
  --man                        Show the command's man page (roff) and exit.
  --version                    Show the version and exit.
  --jobs [auto|max|INTEGER]    Number of parallel jobs. Accepts an integer,
                               'auto' (one fewer than the host's logical CPUs)
                               or 'max' (all logical CPUs). 0 runs sequentially.
                               [default: auto]
  -h, --help                   Show this message and exit.

GitHub issues & PRs:
  apply-labels          Label an issue or PR from its content and changed files
  broken-links          Manage broken links issue lifecycle
  ci-status             Report which CI jobs are red, and which of them gate a
                        merge
  sync-runner-images    Move runner images forward as GitHub retires and
                        supersedes them
  job-timings           Measure how long each runner image takes, from finished
                        runs
  cancel-runs           Cancel in-progress workflow runs for a branch
  lock-threads          Lock closed, inactive issues and PRs
  pr-body               Generate PR body with workflow metadata
  pr-sync               Create, refresh or retire an automation PR
  setup-guide           Manage setup guide issue lifecycle
  sponsor-label         Label issues/PRs from GitHub sponsors
  unsubscribe-threads   Unsubscribe from closed, inactive notification threads

Linting & checks:
  audit                 Report (and optionally fix) vulnerable dependencies
  cache                 Manage the download cache
  fix-awesome-toc       Remove the ToC entries awesome-lint forbids
  lint-anchors          Check same-page doc links against the built site
  lint-changelog        Check changelog dates against release dates
  lint-deps             Check dependencies resolve from the public index
  lint-repo             Run repository consistency checks
  cloudflare-pages      Reconcile the Cloudflare Pages project
  run                   Run an external tool with managed config
  verify-binary         Verify binary architecture and OS floor

Release & versioning:
  changelog             Maintain a Markdown-formatted changelog
  close-stale-bump-pr   Close a stale version-bump PR
  git-commit-push       Commit files and push, rebasing on rejection
  git-tag               Create and push a Git tag
  pack-attestation      Name an attestation bundle after the asset it attests
  pack-binaries         Pack compiled binaries and their versionless aliases
  pack-plugin           Pack the skills and agents as a Claude Code plugin
  prepare-release       Prepare files for a release
  scan-virustotal       Upload release binaries to VirusTotal
  sync-binaries         Regenerate the binaries catalog page

Forge sampling:
  sample-metrics        Record what forges say about the repositories this
                        project tracks

Project setup:
  update-dep-graph      Generate dependency graph from uv lockfile
  format-images         Format images with lossless optimization
  init                  Bootstrap a repository to use reusable workflows
  list-skills           List available Claude Code skills
  metadata              Output project metadata
  show-config           Print [tool.repomatic] configuration reference
  show-test-matrix      Render the CI test matrix as a grid
  update-checksums      Recompute SHA-256 checksums for the binary tool registry
  update-docs           Regenerate Sphinx API docs and dynamic content
  workflow              Lint downstream workflow caller files

Sync:
  sync-action-pins      Bump SHA-pinned GitHub Actions to their latest release
  sync-bumpversion      Sync bumpversion config from bundled template
  sync-dep-sources      Swap git-tracked dependencies to their released versions
  sync-deps             Update dependencies, all or a named subset
  sync-dev-release      Sync rolling dev pre-release on GitHub
  sync-github-releases  Sync GitHub release notes from changelog
  sync-gitignore        Sync .gitignore from gitignore.io templates
  sync-labels           Sync repository labels via labelmaker
  sync-mailmap          Sync Git's .mailmap file with missing contributors
  sync-tool-versions    Bump registry tool versions from upstream releases
  sync-uv-lock          Re-lock dependencies and roll cooldown overrides forward
  sync-workflow-pins    Bump npm/PyPI version literals in workflow YAML

Other commands:
  help                  Show help for a command.
$ uvx -- repomatic==7.13.0 --help
$ uvx --from "repomatic @ git+https://github.com/kdeldycke/repomatic" -- repomatic --help

Install methodsΒΆ

repomatic is available on a couple of package managers:

Easiest way is to install uv, then install repomatic system-wide with the uv tool command:

$ uv tool install repomatic

You can install the latest stable release and its dependencies with a simple pip call:

$ python -m pip install repomatic

If you have difficulties to use pip, see pip’s own installation instructions.

pipx is a great way to install Python applications globally:

$ pipx install repomatic

A repomatic package is available on AUR and can be installed with any AUR helper:

$ yay -S python-repomatic
$ paru -S python-repomatic
$ pacaur -S python-repomatic

Python compatibilityΒΆ

The table below shows which Python versions each repomatic release range supports, derived from the declarations in each git tag’s pyproject.toml. It is refreshed by click-extra’s {matrix} directive machinery through the update-docs job. Releases prior to 4.0.0 did not declare Python version support in any form and are not represented.

repomatic

Released

3.14

3.13

3.12

3.11

3.10

3.9

3.8

4.25.x β†’ 7.x

2025-12-05

βœ…

βœ…

βœ…

βœ…

βœ…

❌

❌

4.20.x β†’ 4.24.x

2025-10-10

βœ…

βœ…

βœ…

βœ…

❌

❌

❌

4.15.x β†’ 4.19.x

2025-03-05

❌

βœ…

βœ…

βœ…

❌

❌

❌

4.7.x β†’ 4.14.x

2024-11-03

❌

βœ…

βœ…

βœ…

βœ…

❌

❌

4.4.x β†’ 4.6.x

2024-07-27

❌

❌

βœ…

βœ…

βœ…

βœ…

❌

4.0.x β†’ 4.3.x

2024-06-29

❌

❌

βœ…

βœ…

βœ…

βœ…

βœ…

ExecutablesΒΆ

To ease deployment, standalone executables of repomatic’s latest version are available as direct downloads for several platforms and architectures:

That way you have a chance to try it out without installing Python or uv. Or embed it in your CI/CD pipelines running on minimal images. Or run it on old platforms without worrying about dependency hell.

Binaries of all past releases, with their VirusTotal analyses, are cataloged on the binaries page.

Release verificationΒΆ

Every binary is signed with a build provenance attestation at release time. After downloading one, verify it with the gh CLI:

$ gh attestation verify repomatic-7.13.0-linux-x64.bin --repo kdeldycke/repomatic --signer-repo kdeldycke/repomatic

--signer-repo kdeldycke/repomatic is required because the release runs from the reusable _release-engine.yaml workflow whose signing identity is kdeldycke/repomatic. Downstream projects that build binaries through the same reusable workflow verify with their own --repo but keep --signer-repo kdeldycke/repomatic.

The PyPI distributions carry their own PEP 740 attestations, visible and verifiable on the PyPI project page.