Skip to main content

A fast, opinionated, extensible linter for Apache Arrow datasets and related formats.

Project description

arrow-lint

Sharpen your Arrow datasets.

ArrowLint is a fast, opinionated, extensible linter for Apache Arrow datasets and related formats. It provides quick local feedback, CI-friendly reports, and a rule system designed for the Arrow ecosystem.

Features

  • Rust core engine with a common dataset model.
  • Scanners for Parquet, Arrow IPC, and Feather.
  • Python API and Python-first CLI.
  • Native Rust CLI for direct integration.
  • Built-in rules for schema consistency, metadata, row groups, statistics, compression, timestamp portability, dictionary encoding, and small files.
  • JSON, SARIF, and human-readable reports.
  • YAML declarative rules for simple metadata checks.
  • Extension points for additional rule packs.

Supported Inputs

ArrowLint scans:

  • Apache Parquet
  • Apache Arrow IPC files
  • Feather files

The project also defines extension boundaries for Iceberg, Vortex, Lance, and DuckDB-focused checks. These formats are represented in the format-pack registry so rule packs can share a consistent discovery and reporting model.

Installation

uv sync
uv run maturin develop

CLI

uv run arrow-lint lint path/to/dataset --config .arrowlint.yaml
uv run arrow-lint lint path/to/dataset --output json
uv run arrow-lint lint path/to/dataset --output sarif > arrowlint.sarif
uv run arrow-lint rules
uv run arrow-lint formats

There is also a native Rust binary:

cargo run -p arrowlint-cli -- lint path/to/dataset

Python API

from arrow_lint import lint

report = lint("path/to/dataset", config=".arrowlint.yaml")
for diagnostic in report["diagnostics"]:
    print(diagnostic["rule_id"], diagnostic["message"])

Configuration

ArrowLint reads YAML configuration:

scan:
  recursive: true

rules:
  min_row_group_rows: 100000
  small_file_bytes: 67108864
  fail_on: error
  disabled: []
  declarative_rule_files:
    - examples/rules/metadata.yaml

Declarative rules cover simple metadata checks:

rule: missing_crs
severity: warning
applies_to: parquet
check:
  metadata_key: crs

Architecture

Python API / CLI
        |
        v
PyO3 native module       Rust CLI
        |                   |
        +--------+----------+
                 v
          arrowlint-core
        /       |        \
 scanners  dataset model  rules
        \       |        /
              reports

The core crate owns scanning, diagnostics, rule execution, and rendering. The Python package is deliberately thin so plugin authors and data teams get a comfortable interface without compromising the Rust fast path.

Extension Strategy

The built-in engine focuses on common Arrow, Feather, and Parquet checks. The format pack registry defines stable boundaries for specialized rule packs:

  • arrowlint-iceberg for manifests, snapshots, partition evolution, and delete files.
  • arrowlint-vortex for array encodings, chunk sizing, and statistics.
  • arrowlint-lance for fragments, indexes, schema evolution, and vector metadata.
  • arrowlint-duckdb for Arrow export round-trips, nested types, timestamps, and writer settings.

Rule packs can start in this repository and move to separate packages when their public APIs are stable.

Development

cargo test
uv run maturin develop
uv run pytest
pre-commit run --all-files

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

arrow_lint-0.0.9.tar.gz (27.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

arrow_lint-0.0.9-cp313-cp313-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.13Windows x86-64

arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ ARM64

arrow_lint-0.0.9-cp313-cp313-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

arrow_lint-0.0.9-cp312-cp312-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.12Windows x86-64

arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ ARM64

arrow_lint-0.0.9-cp312-cp312-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

arrow_lint-0.0.9-cp311-cp311-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.11Windows x86-64

arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ ARM64

arrow_lint-0.0.9-cp311-cp311-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

Details for the file arrow_lint-0.0.9.tar.gz.

File metadata

  • Download URL: arrow_lint-0.0.9.tar.gz
  • Upload date:
  • Size: 27.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for arrow_lint-0.0.9.tar.gz
Algorithm Hash digest
SHA256 d644a50a4150ec694cdd842ec319a8416bee91f6440b99dc7630a65666642ea0
MD5 95b6be2acdcd107c36db4a21d0003446
BLAKE2b-256 fdab590450efc1b8e1404e6550c5b06dce70cf616c0245c87206e1e08bdbd715

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9.tar.gz:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: arrow_lint-0.0.9-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for arrow_lint-0.0.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 97bce702f5bcd4808178279ecac9bcba00f391ad1316840e4fff040e2c77e437
MD5 d09ac4182e7df1b81c9ed60496027af4
BLAKE2b-256 54500e0e6b6f65a4508da4f5ae12ac2da87504dcda8b0af88c293c9b6b19ad12

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp313-cp313-win_amd64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 61b258c48d8c741ca71d6d698061438195c20ea965bce38a9f70200323c409e9
MD5 86c5106a1f0f2eae1780351b8e281786
BLAKE2b-256 3369243e665e06a8fdccbc54ea5b9ca227e75cfa98f212d76a8cfc928122e804

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 701fc8f29ca01af49b53043021bf1948f7c9c7ac4e98f95fc4820e069d273f58
MD5 5c79ce69b587890b02ddd6d72ec6cc9f
BLAKE2b-256 3c15b36c6d2783d2e3cfe4e7f7bac2f763f4a7bdad53f21894d81ecbada5d201

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp313-cp313-manylinux_2_34_aarch64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 796624536d999a6844d201044e8e871e0dec142ae132393ffbf414002b1b524a
MD5 6edc45e8b6b84bb2db6dec137e341b5f
BLAKE2b-256 81ef91b2cf369a3930819a6fbe7f4104cb359d86109431ace8c7c19ddacb9a8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: arrow_lint-0.0.9-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for arrow_lint-0.0.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 26217bbbee9064a9aab1b2cf733dcfb87d5d0d3a0b9b6224860ded01c4bd8665
MD5 9ea393be05d8249553d6b11fa468cf5a
BLAKE2b-256 b77971233fc87fb5171c75e410e544d1914adabc37b6af877f0bbf0166d7027c

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp312-cp312-win_amd64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1873e881100ddabaed0f38168bbed92583f9527f6a54300bdef36cf5bb1517da
MD5 99f98ca760ef97ec4f9bd658d638fdd4
BLAKE2b-256 297eca585eb4691dd79ddc1fee478a9e3781cf44accc2b82a7eb446723599eee

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 066cd79861fddbfb3ae85d5221f56a26e592d479850290976eb550aff401faaf
MD5 f59af6bbd108885b5f112fa6cd6681c1
BLAKE2b-256 8e7eb059bd77ca7d3489441dd17feee52dd4fb1559069c5a092fbe1ae8a804f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp312-cp312-manylinux_2_34_aarch64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6c4a64c49748665c017b95a2bd76c57019c0b3d55eeeef08bd3bab447ddcb9f7
MD5 ad7c9e7b89d84f3e80eb7606f1bb6ac2
BLAKE2b-256 23ae504979c20eace76caae64573a9facb278d6290f937c40f207c54cb10699f

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: arrow_lint-0.0.9-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for arrow_lint-0.0.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c64365d1b2ebba60ddab56c9b9de3b688858af2b87d94e983b085504e9e3cca0
MD5 d85ecdf8a14a312b73e8d61161ee802c
BLAKE2b-256 5074e474196705d56d8ced2c1f07e3ffb16efca10dd1b7d053a27f3b30755f7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp311-cp311-win_amd64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8d0a288336ec56eb08dc6eb47357327a045e0b4ad702b746e9aabd624f9c3278
MD5 fc07df634cfc3beba647694e554df3be
BLAKE2b-256 89592668226f11c6a0a278c42f9654f3bc04fd2262433476354cc1251e5d6f23

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 8049810200c91f61b1c652fc95424a5766bd3186117f465bbe119118f92205de
MD5 5fd1e67979521173b64e430f67ecb455
BLAKE2b-256 8eabf6996cc0177ad35241212a72e6eafa6fa6c5e9a78e9ed53c89b9f172f374

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp311-cp311-manylinux_2_34_aarch64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arrow_lint-0.0.9-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrow_lint-0.0.9-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dd71b97d489df23d85cec3ad2795854fae004dd5ee637954e5a0efc6a18232ed
MD5 250e3dc54766f69dcf64c443bcceb32e
BLAKE2b-256 fb47a84cf1cd18f620b28a5acea9e882732fdc1b89b1b30e3f7a6156fae7cb29

See more details on using hashes here.

Provenance

The following attestation bundles were made for arrow_lint-0.0.9-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on d33bs/arrow-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page