odcslint
A fast, Rust-powered linter for Open Data Contract Standard (ODCS) contracts. Full documentation: feliblo.github.io/odcslint
- Fast validation against the official ODCS schema
- 40-3,200× faster than
datacontract lint(see the benchmarks)
- 40-3,200× faster than
- Custom business rules in simple YAML, with autofix
- approved owners and known domains
- column order: primary keys first, metadata columns last
- naming conventions, required fields and tags
Installation
uv
uv tool install odcslint # as a standalone tool
uv add --dev odcslint # as a dev dependency of your project
pip
pip install odcslint
Homebrew
brew install feliblo/tap/odcslint
Shell (macOS / Linux)
curl -LsSf https://github.com/feliblo/odcslint/releases/latest/download/odcslint-installer.sh | sh
PowerShell (Windows)
powershell -ExecutionPolicy Bypass -c "irm https://github.com/feliblo/odcslint/releases/latest/download/odcslint-installer.ps1 | iex"
prek / pre-commit
repos:
- repo: https://github.com/feliblo/odcslint
rev: v0.2.0
hooks:
- id: odcslint-fix # or `odcslint` to only check
GitHub Action
- uses: feliblo/odcslint@v0.2.0
with:
paths: contracts/
From source
cargo install --git https://github.com/feliblo/odcslint
Quickstart
odcslint init # write a starter odcslint.yml
odcslint check # check every *.odcs.yaml below the current directory
odcslint check --fix # apply fixes in place
odcslint upgrade # move contracts to the newest ODCS version
$ odcslint check contracts/
contracts/orders.odcs.yaml
13:17 error approved_owners team member username `mallory` is not allowed; allowed values: alice, bob
20:9 error property_order expected `order_id` at position 1 of `orders`, found `_loaded_at` [*]
contracts/payments.odcs.yaml
6:1 error schema unexpected property `owner`
Found 3 errors and 0 warnings (2 files checked). 1 finding marked [*] can be fixed with `odcslint check --fix`.
Enable rules in odcslint.yml:
rules:
- type: property_order # primary keys first, metadata columns last (fixable)
- type: allowed_values
field: team.members.username
role: owner
values: [alice, bob]
See the rules and configuration docs for everything else.
Acknowledgements
odcslint stands on the work of the Bitol community and the LF AI & Data Foundation, who develop and maintain the Open Data Contract Standard in the open. Their JSON Schemas are embedded in odcslint, and their examples and negative tests make up much of its test suite. Thank you to everyone who contributes to the standard.
License
odcslint is released under the MIT license. The embedded ODCS JSON Schemas are © The Bitol Contributors and licensed under Apache-2.0 (see licenses/).
Metadata
Release files for odcslint 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| odcslint-0.2.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| odcslint-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| odcslint-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| odcslint-0.2.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| odcslint-0.2.0-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 16.9 MB
Release files / odcslint-0.2.0-py3-none-win_amd64.whl
| Download URL | odcslint-0.2.0-py3-none-win_amd64.whl |
|---|---|
| Size | 3.5 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ca5569948972de0233deb442ef9be2a0d656dd63e0f00f0c5541c34e67427fb1
|
|
BLAKE2b-256 checksum How to use checksums |
b8f4935afa4f9ab4e4b898a74d785cfc8915c225944d962f708ead8c7c19e37d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / odcslint-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | odcslint-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
8e9c9eb3e373bda7c8fc47fdd22340a178db7a73b1aaaa080b94b0260affa1b6
|
|
BLAKE2b-256 checksum How to use checksums |
bba661781815132549f6420f0d9f0100b17dc373f096320b14602bbec085aceb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / odcslint-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | odcslint-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
7efb19599ead904b21e243289abf814c9f2b45afb608e5279dd3ee4dd72d457f
|
|
BLAKE2b-256 checksum How to use checksums |
4de4dc47a5e23c5f8ace231d7abfbc4a96766aa2f7e4fa18ea821d198b75aeba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / odcslint-0.2.0-py3-none-macosx_11_0_arm64.whl
| Download URL | odcslint-0.2.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f7dcb3d887b3fab01fe5847d8985d90fbb831c5478d084ef9e57cc8f5fcdd6c4
|
|
BLAKE2b-256 checksum How to use checksums |
d2a326dedc7ae728055a23240fffa1b77e502daa65dc8411cf305638974ec359
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / odcslint-0.2.0-py3-none-macosx_10_12_x86_64.whl
| Download URL | odcslint-0.2.0-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
c3e845dd27d8017c934c64ad86747ac7e334213ea0465ec6660b6b3f6e5b061e
|
|
BLAKE2b-256 checksum How to use checksums |
ebe440e9d93b8dbfd184f93afe0da3a25f316929274d1602541aa0d02252028a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for odcslint 0.2.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.