curlylint
{{ 🎀}} Experimental HTML templates linting for Jinja, Nunjucks, Django templates, Twig, Liquid
What it is and what it does
Curlylint is a command-line linter for HTML templates written in curly-brace template languages—Jinja, Nunjucks, Django templates, Twig, and Liquid. It parses template syntax and HTML structure together to detect issues that a plain HTML linter would miss. The tool focuses on accessibility checks, flagging common patterns that create barriers for users with disabilities.
The package is built on parsy for parsing, attrs for data structures, click for CLI, and toml for configuration files. It started as a fork of jinjalint and is classified as Alpha software. While the project is dormant (no releases since March 2022), it remains archived-free on GitHub and has no known security vulnerabilities.
Use it for:
- Lint Django template files in a CI/CD pipeline to catch accessibility violations before deployment.
- Check Jinja templates in a static site generator or Flask application for common HTML issues.
- Validate Nunjucks or Twig templates in a web project to enforce accessibility standards.
- Integrate template linting into a pre-commit hook to catch issues during development.
- Audit existing template codebases for accessibility problems across multiple template languages.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Lints HTML templates in Jinja, Nunjucks, Django, Twig, and Liquid, checking for accessibility and common template issues via command-line tool.
Yes, if you actively lint templates in one of the five supported languages and need accessibility-focused checks. The low install friction and permissive license make it easy to try. However, dormancy since 2022 means no active maintenance—use it for existing projects but verify compatibility with your template engine versions and be prepared to maintain a fork if critical issues arise.
Install
curlylint on PyPI
pip
pip install curlylintuv
uv add curlylintpoetry
poetry add curlylintInstalling curlylint
Before you install
Low install friction with six runtime dependencies. Maintenance is dormant—last release was 2022-03-30 and no commits since 2024-01-28—so expect no active bug fixes or feature development.
License in practice
MIT license is permissive; you can use, modify, and distribute this package with minimal restrictions, provided you retain the license notice.
Quickstart
pip install curlylint
curlylint template-directory/
Requires Python 3.6 or later.
Verify before relying
- Whether dormant status and 1598 days since last release affect real-world usability with current template engine versions.
- Scope and maturity of accessibility checks relative to other linters in this space.
- Whether the tool handles all syntax variants of the five supported template languages equally well.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.6) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 6 — parsy, attrs, click, toml, pathspec, dataclasses |
| Maintenance | dormant — 1,598 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 101,315/month — #12,947 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: curlylint-0.13.1-py3-none-any.whl
Keywords: curlylint, linter, linting, jinja, jinja2, django templates, twig, nunjucks, liquid, templates, html
Tags
More Quality Assurance packages
Coverage.py measures which lines of Python code…
permissive · top 1,000 on PyPI
ruffRuff is a Python linter and code formatter…
permissive · top 1,000 on PyPI
pexpectPexpect spawns and controls interactive console…
permissive · top 1,000 on PyPI
blackBlack reformats Python source code to a…
permissive · top 1,000 on PyPI
pytest-xdistpytest-xdist distributes pytest tests across…
permissive · top 1,000 on PyPI
cfn-lintValidates AWS CloudFormation templates in YAML…
permissive · top 1,000 on PyPI
djlintdjlint formats and lints HTML templates with…
copyleft · top 5,000 on PyPI
j2lintj2lint validates Jinja2 template syntax and…
permissive · top 15,000 on PyPI
python-liquidPython Liquid is a template engine that renders…
permissive · top 5,000 on PyPI
liquidpyLiquidpy is a Python port of the Liquid…
permissive · top 15,000 on PyPI
jinja_partialsAdds a `render_partial()` function to Jinja2…
permissive · top 5,000 on PyPI
Jinja2Jinja2 is a templating engine that renders…
permissive · top 100 on PyPI
djhtmlDjHTML indents Django and Jinja template files…
copyleft · top 15,000 on PyPI
jinja-cliA command-line tool that renders Jinja2…
copyleft · top 15,000 on PyPI
djadeDjade is a command-line formatter for Django…
permissive · top 15,000 on PyPI
yamllintyamllint checks YAML files for syntax errors,…
copyleft · top 1,000 on PyPI