Curlylint is an experimental HTML template linter that checks Jinja, Nunjucks, Django templates, Twig, and Liquid files for common accessibility issues. It is a command-line tool available on PyPI, forked from jinjalint, and designed to bring linting to the curly-brace template languages used across Python and JavaScript projects.
What is Curlylint?
Curlylint is a command-line linter for HTML-based template languages, installable with pip install curlylint and executed with the curlylint command followed by a template directory. It takes template files written in Jinja, Nunjucks, Django templates, Twig, or Liquid as input and outputs parsing issues and accessibility rule errors to the terminal. The project lives at github.com/thibaudcolas/curlylint and is released under the MIT license, with its documentation hosted at curlylint.org.
Key Features
- Multi-template-language support — Curlylint lints Jinja, Nunjucks, Django templates, Twig, and Liquid, making it useful across Python web frameworks and static site generators.
- Accessibility-first rule set — The tool focuses on rules that check for common accessibility problems in HTML; the full list of rules is documented at curlylint.org/docs/rules/all.
- Simple CLI workflow — After
pip install curlylint, runningcurlylint template-directory/parses every supported template in the directory and reports both template syntax issues and rule violations. - Documented configuration — The official docs cover command-line usage, configuration, and the supported template languages, so teams can fit the linter to their project structure.
- Clear roadmap for security checks — Planned enhancements include enforcing
rel="noopener noreferrer"and flagging known sources of XSS vulnerabilities. - Permissive licensing — The source is MIT-licensed and the website content is CC0, so it can be freely used and extended.
Who is it for?
- Django developers — Use Curlylint to catch accessibility mistakes in Django templates during local development or in CI pipelines.
- Jinja2 and Flask users — Teams building templates with Jinja2 can run Curlylint on their template directories to validate HTML output.
- Front-end developers working with Nunjucks or Twig — Developers using Nunjucks (JavaScript) or Twig (PHP) can invoke the same CLI to lint templates across mixed-language projects.
- Accessibility-minded teams — Organizations that want automated checks for common HTML accessibility issues can add Curlylint to their existing linting toolchain.
What can you do with Curlylint?
- Audit a template directory — Run
curlylinton any folder containing supported templates to get a terminal report of parsing errors and accessibility rule violations. - Add linting to continuous integration — Because it is a standalone CLI, Curlylint can be added to a CI job so build failures appear when templates introduce accessibility problems.
- Lint multiple template engines at once — Point Curlylint at a project that mixes Django templates, Jinja, and Nunjucks files and it will handle all supported curly-brace syntaxes in one pass.
How does Curlylint work?
After installing Curlylint, you run the curlylint command with a template directory path. The tool parses each template file according to its detected template language, evaluates the built-in rules, and prints any problems to standard output. The documentation at curlylint.org provides setup steps, configuration options, and a complete rule reference.
FAQ
Is Curlylint free?
Yes. Curlylint is open source under the MIT license and can be installed from PyPI at no cost.
Which template languages does Curlylint support?
Curlylint supports Jinja, Nunjucks, Django templates, Twig, and Liquid. This covers the most common curly-brace template languages in Python and JavaScript ecosystems.
What issues does Curlylint check for?
Curlylint focuses on common accessibility issues in HTML. The project roadmap also includes security checks such as verifying rel="noopener noreferrer" on links and detecting potential XSS sources.
How do I install Curlylint?
Install Curlylint with pip install curlylint on Python 3.6 or later. Once installed, run curlylint template-directory/ to lint a folder of templates.
Is Curlylint production-ready?
Curlylint is described as experimental, so it is still evolving. Its rule set is actively developed, and the documentation notes that new ideas for checks are welcome.








