This release is a pre-release and may not be stable for production use.
odoo-lint
Blazing fast Rust-native linter for Odoo modules. The command is called odl.
It checks Python files, manifests, XML data files and translation (.po)
files, with the checks of OCA's pylint-odoo, oca-checks-odoo-module and
oca-checks-po: same names, same messages, same results on their own test
suites.
Linting all of OCA/sale-workflow 18.0, as OCA's pre-commit hook runs pylint-odoo. See benchmarks.
- ⚡ 250x faster than pylint with pylint-odoo, and still 30x faster on a single core
- ⚖️ Drop-in for pylint-odoo and OCA's pre-commit checks: same codes,
names and messages, 95/95 checks matching on their own test suites (Python,
manifests, XML,
.po), and# pylint: disable=comments keep working - 🔧 Automatic fixes, safe and unsafe as in Ruff, for Python, manifests,
XML and
.pofiles (odl check --fix,--diffto preview) - ⬆️ Upgrade checks: leftovers of older Odoo versions, such as Bootstrap 4 classes that do nothing since Odoo 15.0, with fixes
- 🌍 Translation checks that predict Odoo's loader: why Odoo logs "malformed po file", and why a translation does not show up
- 📦 Installable with pip, uv or pipx: one binary in prebuilt wheels for Linux, macOS and Windows, without Python dependencies
- 🛠️ Configured in
pyproject.toml, including company-specific author rules - 📋 Output for CI: GitHub annotations, GitLab Code Quality, SARIF and JSON
- 🤖 For AI coding agents: an MCP server, and plugins for Claude Code, DeepSeek Harness and OpenCode that lint every file the agent edits
- 🪝 Git hooks: pre-commit and hk
Installation
uv tool install odoo-linter # or: pipx install odoo-linter
cargo install odoo-lint # from crates.io
The PyPI package is called odoo-linter, because odoo-lint is too similar
to an existing PyPI project. On crates.io it is odoo-lint.
Quick start
odl check path/to/addons # lint a directory
odl rule # list all rules
odl rule C8101 # explain a rule
odl check --fix # apply the safe fixes (--diff to preview)
Rules ported from pylint-odoo keep its codes, names and messages, and
# pylint: disable= comments keep working. Company-specific rules are
configured in your pyproject.toml:
[tool.odoo-lint]
target-version = "17.0"
[tool.odoo-lint.rules.manifest-required-author.mapping]
"acme_*" = "Acme Corp"
For AI coding agents there is an MCP server (odl mcp) and a post-edit hook,
packaged as plugins for Claude Code (/plugin marketplace add bosd/odoo-lint),
DeepSeek Harness and OpenCode.
See the documentation for all commands, configuration options and rules.
Development
uv sync --all-groups # builds odl into .venv via maturin
uv run nox # pre-commit, fmt, clippy, cargo tests, CLI tests, docs
See the development guide.
License
MIT
Metadata
Release files for odoo-linter 0.1.0a4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| odoo_linter-0.1.0a4.tar.gz | 160.4 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| odoo_linter-0.1.0a4-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| odoo_linter-0.1.0a4-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| odoo_linter-0.1.0a4-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| odoo_linter-0.1.0a4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| odoo_linter-0.1.0a4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| odoo_linter-0.1.0a4-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| odoo_linter-0.1.0a4-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 21.6 MB
Release files / odoo_linter-0.1.0a4.tar.gz
| Download URL | odoo_linter-0.1.0a4.tar.gz |
|---|---|
| Size | 160.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6ae22ab3c6c60a70a05336476099b02663450cd19b2f7c098ed465895068df8
|
|
BLAKE2b-256 checksum How to use checksums |
945af1ca31f5e8bc560eb9dfb640e0da3d4c95741a597098865da7155c7ce194
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency logRelease files / odoo_linter-0.1.0a4-py3-none-win_amd64.whl
| Download URL | odoo_linter-0.1.0a4-py3-none-win_amd64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a7e2e713a5ae10b35a2f4192610fac396117217b46b370534dd7e96e5438b352
|
|
BLAKE2b-256 checksum How to use checksums |
9d033e949805e9415634eed5eaee673531755392776e14f08e1f7859bceeb22d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency logRelease files / odoo_linter-0.1.0a4-py3-none-musllinux_1_2_x86_64.whl
| Download URL | odoo_linter-0.1.0a4-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
3c106f1bc344c2b91cd61abc42a42e4ed7139bb71787e0fa1d2a21ba168705b3
|
|
BLAKE2b-256 checksum How to use checksums |
3608ee090abdd3ee768199eccbb3c0ecdd9bb453ef36874670cad78f62249b5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency logRelease files / odoo_linter-0.1.0a4-py3-none-musllinux_1_2_aarch64.whl
| Download URL | odoo_linter-0.1.0a4-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
8b047ca8558e91dc589c179c2b1923898333f34713874c0f92f14987dd6f0a90
|
|
BLAKE2b-256 checksum How to use checksums |
ed30093754ab71acccabc6d395cb4dd554ae46394e16a0d8f7907a157292d288
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency logRelease files / odoo_linter-0.1.0a4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | odoo_linter-0.1.0a4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
9dbcbdfe1f618ecc51146f266bbae93e40ef84a0a4d8dba359accb4f8315fa9a
|
|
BLAKE2b-256 checksum How to use checksums |
e75f93e90e5233e61ebeef5ce888a82a2168056571fbf2e48c531a2043e283b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency logRelease files / odoo_linter-0.1.0a4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | odoo_linter-0.1.0a4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
5553b70569de193bea3e2dcd74ee7f011bf3dd00f0cd372fe71f1a1dee916868
|
|
BLAKE2b-256 checksum How to use checksums |
c695887a07974a293f906d95348dfe2eaf5a3db018f632aa4491198f8f4dd6f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency logRelease files / odoo_linter-0.1.0a4-py3-none-macosx_11_0_arm64.whl
| Download URL | odoo_linter-0.1.0a4-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cd2a97fdacdde46fdb49b4302a92cab86191cacbd21cd2330d3369d6a54a379c
|
|
BLAKE2b-256 checksum How to use checksums |
540064c9efb21557850c86d72171bdcad2500b312054f2fd6a73b65b21be717a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency logRelease files / odoo_linter-0.1.0a4-py3-none-macosx_10_12_x86_64.whl
| Download URL | odoo_linter-0.1.0a4-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
99c4d96d3a89f71343301259ee4c7e04da498e252f302a624693f041e6eb09e7
|
|
BLAKE2b-256 checksum How to use checksums |
618fad220771357d278a77376c6b2c94a3cf61a638c73a08a5b2b409c5c2b11f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 Oct 8, 2026.
Transparency log