Skip to main content

xlsform-lint

xlsform-lint is a developer-oriented, Ruff/ESLint-style linter for XLSForm. It combines pyxform semantic validation with seven narrow native diagnostics and supports deterministic text, JSON v1, and SARIF output. pyxform is the semantic authority: this tool makes selected upstream failures easier to act on and adds bounded authoring checks; it does not replace pyxform or XLSForm testing on the target data-collection platform.

Version 0.1.1 is available on PyPI. Version 0.2.1 is the maintenance release candidate and has not been published. The project does not validate runtime XPath behavior, execute a form, load or validate external CSV data, or claim to find everything outside pyxform's validation.

Installation

Python 3.11 or newer is required. The package supports pyxform 4.5.x (pyxform>=4.5,<4.6) and pins openpyxl 3.1.5.

For a local checkout or a built wheel:

python -m pip install .
python -m pip install dist/xlsform_lint-0.2.1-py3-none-any.whl

Install the current public release from PyPI with:

python -m pip install xlsform-lint

See installation details.

Usage and output

Lint one workbook. Errors fail by default; warnings and information are shown but do not fail:

xlsform-lint FORM.xlsx
xlsform-lint FORM.xlsx --fail-on warning
xlsform-lint FORM.xlsx --format json
xlsform-lint FORM.xlsx --format sarif

Text is intended for people. JSON follows the tracked JSON v1 schema. SARIF provides an interchange format, although XLSX cells do not map naturally to source-code line annotations.

Configuration and policy

Store policy in .xlsform-lint.toml. Discovery starts at the workbook's directory and uses the nearest ancestor file; --config PATH selects one file explicitly. Resolution order is built-ins, selected default or strict profile, config, then explicit CLI settings.

profile = "strict"

[lint]
fail_on = "warning"
format = "text"

[rules]
UX001 = "error"

[select]
include = ["PX", "CHO", "LBL", "I18N", "UX", "ORD"]
ignore = ["UX002"]

--select RULES and --ignore RULES accept comma-separated exact IDs or the prefixes PX, CHO, LBL, I18N, UX, and ORD. --fail-on accepts error, warning, or info; --profile accepts default or strict. See the complete configuration reference.

Integrations and reference

The supported V1 public interface is the CLI. Python implementation modules are internal unless explicitly exported and documented. The frozen architecture is recorded in xlsform-lint-v1-blueprint.md.

License

xlsform-lint is licensed under the Apache License 2.0.

Metadata

Release files for xlsform-lint 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for xlsform-lint 0.2.1
File Size Uploaded
xlsform_lint-0.2.1.tar.gz 58.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for xlsform-lint 0.2.1
File Interpreter ABI Platform
xlsform_lint-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 88.1 kB

Release files / xlsform_lint-0.2.1.tar.gz

Download URL xlsform_lint-0.2.1.tar.gz
Size 58.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6ca141aa246facae1c20c06235568ab41f0eb21bc8ebb32729c7040a6f41f8fa
BLAKE2b-256 checksum
How to use checksums
3f9dba597634c87b61f6d324674a536a3bd53929c80b6da692db3bd9803eb8c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 24, 2026.

Transparency log

Release files / xlsform_lint-0.2.1-py3-none-any.whl

Download URL xlsform_lint-0.2.1-py3-none-any.whl
Size 29.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
df57ace2d497b4ad3477790cf39712dc53c993594122d386c546a6e7b0d9f475
BLAKE2b-256 checksum
How to use checksums
b8ab8ef9002cad9cd1e3130dab9eb12a9e4856325e0e4ad4d72600e3bc4b68d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page