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)
| File | Size | Uploaded | |
|---|---|---|---|
| xlsform_lint-0.2.1.tar.gz | 58.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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