Changelog
All notable changes to indycheck, newest first. The full changelog lives in CHANGELOG.md in the repo. All crates, npm and PyPI packages share one version in lockstep.
[0.2.1] - 2026-11-12
Section titled “[0.2.1] - 2026-11-12”- Python wheel: validators no longer throw on non-string input.
validate_pan(None)orvalidate_pan(123)used to raiseTypeError; they now return aValidationResultwith codeINVALID_TYPE, like the JS wrapper. - Python wheel: Options support.
validate_*_with_optionsand theOptionsclass (default_options(),lenient_options(),no_spaces_hyphens_options()) now exist, matching the Rust core and JS package. - Python wheel:
generate_pan()andgenerate_gstin()work with no argument (defaults: entityP/ state code18). - Python wheel:
indycheck.pydanticnow ships in the wheel, with apydanticextra (pip install 'indycheck[pydantic]'). - README Rust snippet did not compile —
validate_pan_with_options(..., &opts)took the options by reference; the function takes them by value.
- CLI:
indycheck --version(alsoversionand-V) printsindycheck <version>.
[0.2.0] - 2026-11-12
Section titled “[0.2.0] - 2026-11-12”- Bharat (BH) series vehicle numbers are now accepted:
22BH1234AA(YYBH####XX— registration year 21+,BH, 4-digit number 0001–9999, 2 suffix letters excludingI/O).validateVehiclereturnsseries_type: "bharat"withyear/suffixinparsed; state-format numbers now also returnseries_type: "state". Mirrored in the JavaScript and Python wrappers, and in the playground and the landing-page demo. - See the Vehicle page for the full BH rules and examples.
[0.1.2] - 2026-11-12
Section titled “[0.1.2] - 2026-11-12”rust-versionis now inherited by the core crate, so crates.io shows the minimum supported Rust version (1.85) instead of blank.- First release published via crates.io Trusted Publishing (GitHub OIDC) instead of a long-lived API token.
[0.1.1] - 2026-11-12
Section titled “[0.1.1] - 2026-11-12”- crates.io page had no README: core crate now sets
readme = "../../README.md", pluskeywordsandcategories, so the README renders on crates.io. - Rust edition upgraded 2021 → 2024 (
rust-version = "1.85"). No API change.
[0.1.0] - 2026-11-11
Section titled “[0.1.0] - 2026-11-11”- Rust core (
indycheckcrate): offline validators for mobile, PAN, Aadhaar (Verhoeff), GSTIN (Mod-36 Luhn), IFSC, UPI, PIN code, TAN, CIN, LLPIN, Voter ID (EPIC) and vehicle registration. ValidationResult { valid, code, reason_en, reason_hi, parsed }— never throws on bad input; stable machine-readable error codes.- Options (
strict/lenient,allow_spaces_hyphens,normalise_plus91,uppercase) andvalidate_*_with_options. format_pan,format_gstin,format_mobile,mask_pan,mask_mobile,mask_aadhaar(UIDAI-styleXXXX XXXX 0124).detect(auto-detect) andvalidate_many(bulk batch).- Mock test-data generators — syntactically valid test data only, never real IDs.
- CLI binary:
indycheck validate <type> <value>,detect,generate. - WASM bindings and Python bindings (PyO3 + maturin, abi3 wheel).
- TypeScript wrapper + Zod schemas; Python wrapper + Pydantic v2 types.
- Website: Astro 5 + Starlight docs, landing page and in-browser WASM playground (Pagefind search, sitemap).
Known limitations
Section titled “Known limitations”- PAN, IFSC, TAN, CIN, LLPIN, Voter ID and vehicle registration have no public checksum — format only. This is format + checksum validation, not KYC verification; no UIDAI/NSDL/GSTN connection.
- Bharat-series vehicle numbers were not accepted in v0.1 — fixed in v0.2.0 above.