Changelog#
All notable changes to this project will be documented in this file.
[0.8.1]#
New Features#
- Add Cython, reStructuredText, and LaTeX language presets with detection metadata.
- Add an Agent Skills framework preset with automatic project detection.
- Expand the curated hook catalog with additional linting, formatting, documentation, security, and code-quality hooks.
- Add experimental hooks for Markdown doctests, Python export checks, and Git hygiene validation.
Enhancements#
- Update existing language and framework presets to newer hook revisions and refine selected hook stages and profiles.
- Improve README quickstart guidance by recommending uvx and document the expanded language, framework, and detection support.
- Add generated repository code-map guidance to the contributor instructions.
[0.8.0]#
Adds a --profile flag for opting into legacy/experimental hooks, makes language/framework metadata fully data-driven, and rounds out the preset catalog with reStructuredText and dead-link checking.
New Features#
- Add a
--profileflag to opt intolegacyandexperimentalhook categories on top of the always-on default preset baseline.
pc-initnow lists the available profiles alongside languages and frameworks, and hooks are annotated by category in the generatedAWESOME.md(#4, #46). - Add
rst(reStructuredText) language preset (rstcheck). - Add
nikaframework preset (nika-check) for statically auditing*.nika.yamlAI workflow files, auto-detected via any*.nika.yamlfile in the repo, and added to the generatedAWESOME.mdlist with a display name and emoji.
Enhancements#
- Add dead-link checkers (
darnlink,md-dead-link-check) to themdpreset. - Reclassify and expand the Python preset's hooks into
preset,legacy, andexperimentalcategories (e.g.mypy,flake8,isort,black,pyrightmove tolegacy/experimental). - Split the Jupyter Notebook preset's combined
nbqa-ruffhook intonbqa-ruff-checkandnbqa-ruff-format, and recategorizenbqa-check-ast,nbqa-isort, andnbqa-pyupgradeaslegacy. - Replace the hardcoded extension/filename/alias/display-name/icon/framework-detector dictionaries scattered across
detector.py,resolver.py, andgenerate_awesome_list.pywith ametadata.yamlfile co-located in eachlang/<id>/andframework/<id>/directory, loaded through a new shared catalog module.
Adding a new language or framework no longer requires touching multiple Python files.
Documentation#
- Document the
metadata.yamlrequirement for new languages/frameworks, and the--profileflag / hook-category concept, inCONTRIBUTING.mdandREADME.md. - Fix a relative
CONTRIBUTING.mdlink in the README that 404s on the PyPI project page (it resolves against pypi.org rather than the repo tree).
Build#
- Add
zubanas a third strict type checker alongsidetyandpyrefly, enable each tool's strictest preset/rule set, and fix every finding surfaced.
[0.7.0]#
Adds the Behave BDD framework preset with auto-detection, a Python safety-linting hook, and fixes a language-id typo.
New Features#
- Add
behaveframework preset, recommending thepylanguage and Behave-specific hooks, auto-detected via afeatures/steps/directory or abehave.ini/.behavercfile at the repo root, and added to the generatedAWESOME.mdlist with a display name and emoji. - Add
safelintto the Python preset for safety-critical coding rule checks.
Bug Fixes#
- Rename the Rust language id from
ru(which collided with the ISO 639-1 code for Russian) tors(matching its.rsextension) across the CLI, detector, resolver, scripts, docs, and tests.
Build#
- Bump bundled hook revisions across most presets, including
ruff,ty,mypy,complexipy,typos,rumdl,trufflehog,semgrep,codespell,jscpd,vale,djlint,Biome,oxlint,eslint,stylelint,buf,squawk,terraform,tombi, and others.
Documentation#
- Refresh the README's language/framework tables and auto-detection docs to cover Behave and the
rsrename, and add a monthly PyPI downloads badge.
[0.6.0]#
Expanded the language catalog further and taught --detect to recognize the new languages.
New Features#
- Add
env(dotenv-linter),groovy(npm-groovy-lint), andlua(luacheck) language presets. - Auto-detect the new languages via
.env/.env.*files,.groovy/.gvy/.gradleextensions andJenkinsfile, and the.luaextension, respectively.
[0.5.0]#
Expanded the language/framework catalog, made every bundled hook self-documenting, and closed gaps found by cross-referencing MegaLinter's bundled linters.
New Features#
- Add
makelanguage preset (checkmake) for Makefile linting. - Add
rb(Ruby),cpp(C/C++),proto(Protocol Buffers),swift,kt(Kotlin), andcss(CSS/SCSS/Sass) language presets. - Add
ansibleframework preset (ansible-lint), detected via anansible.cfgfile at the repo root.
Enhancements#
- Cross-reference MegaLinter's bundled linters against every existing preset and add genuine gaps with verified, actively-maintained pre-commit hooks:
shfmt(sh),lintr(R),mypy(Python),stylelint(react),rstcheck/rstfmt(Sphinx), Helm lint (k8s), andjscpd/vale/lychee(common). - Refactor the
reactpreset to recommend the newcsslanguage preset instead of hardcoding a duplicatestylelinthook. - Backfill a
description:field on every hook across all presets (~250 hooks), harvested from each hook's own upstream.pre-commit-hooks.yamlmanifest (falling back to the hook's name, then the repo's GitHub description) via a newscripts/harvest_hook_docs.pymaintainer script.
Generated.pre-commit-config.yamlfiles are now self-documenting. - Add roughly three dozen additional hook ids discovered from repos already in use, limited to genuinely distinct capabilities — skipping alternate install-method variants, upstream-deprecated ids, and hooks from "grab-bag" repos that are unrelated to the preset they'd land in.
- Add long-form names and emoji to
AWESOME.md's table of contents and section headings (e.g. "🦀 Rust (ru)"), with anchors generated to match GitHub's actual heading-slug algorithm.
CI#
- Enable the
verchecktag-name/version check on release tag pushes, verifying the git tag matches the version declared inpyproject.toml.
Documentation#
- Add an "Alternatives" section to the README pointing to MegaLinter for users who want a single all-in-one linter instead of curated pre-commit hooks.
- Add
CONTEXT.mddocumenting the "hook capability" vs. "hook variant" distinction used when deciding which additional hook ids to include. - Require every hook to declare a
descriptioninCONTRIBUTING.md's hook quality bar, with a matching pull request checklist item.
Build#
- Add
ruamel.yamlas a dev dependency, used by the new hook-description harvesting script to editpreset.yamlfiles without disturbing hand-written comments.
[0.4.0]#
Enhanced preset support with detection and recommendations, improved YAML rendering, and code quality improvements.
New Features#
- Add language and framework detection from repository structure:
--detectflag automatically identifies programming languages and frameworks present in the repository. - Implement
--recommendedflag to suggest and auto-apply recommended languages/frameworks from preset metadata. - Support preset recommendations metadata: presets can now declare
recommendedfield to suggest compatible language and framework combinations.
Enhancements#
- Improve YAML output rendering to strictly conform with pre-commit conventions and spacing requirements.
- Refactor preset loading and merging logic to support the new
recommendedmetadata structure. - Enhance resolver logic to provide actionable recommendations when user-selected languages or frameworks have suggestions.
- Improve test coverage for detection, recommendations, and YAML output validation.
- Update contributing guidelines with preset validation and installation commands.
- Refactor codebase for improved readability and maintainability with better separation of concerns.
Tests#
- Add comprehensive tests for language and framework detection from common file patterns.
- Add tests for recommendation resolution and suggestion generation.
- Add tests validating YAML output structure and pre-commit compliance.
- Enhance integration tests for CLI flows combining detection and recommendations.
[0.3.1]#
Preset updates and generate_awesome_list improvements.
Enhancements#
- Add
uv-audithook to the Python preset (runs on changes touv.lockor
pyproject.toml). - Add
deptryhook to the Python preset for detecting unused, missing, or
transitive dependency issues. - Add
primary_languages(docker,tf) to the Kubernetes framework preset. - Remove
checkov_difffrom the Kubernetes preset. - Bump bundled hook revisions:
ruff→ v0.15.20,ty→ v0.0.54,
rumdl→ v0.2.23,django-upgrade→ 1.31.1. - Filter
metarepos from the generated AWESOME.md output. - Remove the "Applied to every generated configuration" note from the Common
section of AWESOME.md. - Improve type annotations in
generate_awesome_list.py.
[0.3.0]#
Expanded preset catalog, framework/language UX improvements, and CI refinements.
New Features#
- Add actionable language suggestion on framework mismatch: when none of the selected
languages satisfy a framework'sprimary_languages, emit a consolidatedTry:command
that preserves existing--langvalues so it is safe to re-run with--force.
Enhancements#
- Modernise
jspreset to complementts: replace local prettier + typos with
biome-check and mirrors-prettier scoped to JS/JSX/JSON/CSS/Markdown types. - Add
tsas a primary language for thereactpreset alongsidejs. - Remove
biome-checkfrom thereactpreset — it is now inherited from thejspreset. - Consolidate
typoshook into thecommonpreset, removing redundant copies from
individual language presets (js,md,ru). - Add
codespellhook to thecommonpreset. - Add R language preset with pre-commit hooks for the statistical programming language.
- Expand Python preset: add
numpydoc,nbstripout, andnbQAhooks and autoupdate pins. - Expand Jupyter Notebooks preset: add
nbqahooks forcheck-astandisort. - Expand Markdown preset: add
markdownlint-cli2hook and autoupdate pins. - Print unique repo count in
generate_awesome_list.py.
CI#
- Restrict the "fail if hook revisions are outdated" step to tag pushes and the main
branch, so it does not block work-in-progress feature branches.
[0.2.0]#
Enhanced CLI, richer preset catalog, and stronger validation and testing around preset loading, merging, and error handling.
New Features#
- Add a
pc-init listsubcommand and comma-delimited argument support for languages and frameworks. - Introduce a version flag that prints the installed
pc-initversion and exits. - Support custom preset catalogs from local directories or git URLs via a unified presets option and context-managed resolution.
- Implement diff-only behavior for existing config files, requiring
--forceto overwrite and providing unified diffs and guidance.
Enhancements#
- Refine CLI messages, exit codes, and stderr usage for unsupported languages/frameworks, missing presets, parse failures, and write errors.
- Extend preset discovery and alias resolution, standardizing on
preset.yamlfiles and expanding language aliases. - Add a common preset and expand bundled language and framework presets with curated hooks for Python, JS/TS, Go, Docker, Terraform, Markdown, SQL, notebooks, YAML, images, Git, Django, React, Sphinx, and Kubernetes.
- Introduce an AWESOME.md generator script based on the curated presets and document contribution guidelines for preset changes.
- Update README with detailed usage, preset lists, and examples, and refresh project metadata, licensing, and supported Python versions.
- Adopt
rylfor YAML linting, configuremutmut, and adjust CI to validate and keep all preset hook revisions up to date.
Build#
- Adjust development dependencies to include tools for YAML linting, mutation testing, and broader Python version support, and remove now-unnecessary metadata files.
CI#
- Add a dedicated workflow to validate all preset YAML files and ensure hook revisions are current using
pre-commitandprek, and switch existing workflow YAML linting toryl.
Documentation#
- Rewrite and expand the README with motivation, installation, usage, preset tables, custom catalogs, and maintenance workflows.
- Add CONTRIBUTING guidelines, a pull request template, and YAML linting configuration documentation via
.ryl.toml.
Tests#
- Greatly expand integration and unit tests to cover CLI flows, diff/force behavior, list/version commands, preset resolution, merging logic, YAML rendering, loader error paths, and exception messages.
- Add fixtures for language and framework presets to validate behavior with both bundled and custom catalogs.