Skip to main content

iglint

A fast linter for Ignition 8.3 projects, written in Rust.

iglint reads an Ignition project the way the gateway stores it on disk and checks:

  • Perspective views: component tree, properties, bindings, transforms, event actions, message handlers and custom methods;
  • Jython 2.7 scripts everywhere they live: project library, gateway and session events, WebDev handlers, tag event scripts, and the scripts embedded in view.json (findings point inside the JSON string);
  • expressions in bindings, transforms, tags and named query parameters;
  • cross-resource references: views, named queries, library functions, message types, style classes, page URLs, parent projects;
  • tags and gateway resources: UDT types and parameters, tag paths, alarm bindings, history providers.

It has more than 100 rules, auto-fixes, a language server for editors, and a compatibility mode for projects that use ign-lint. See the rule reference and the documentation at https://iglint.mustrysolutions.com/.

Why

  • Correct. The script parser accepts exactly what Ignition's Jython 2.7 accepts and is tested against it; system.* functions, expression functions and Perspective components come from a real 8.3 gateway. A false positive is a bug.
  • Precise. Every finding has an exact location in the file on disk, also inside scripts and expressions embedded in JSON.
  • Project-aware. Unknown views, named queries, library functions and message types are found across the whole project, including inherited projects.
  • Fast. Each file is read and parsed once, in parallel, and results are cached.

Performance

Benchmarks against ign-lint and how to reproduce them are in bench/README.md.

Installation

  • Prebuilt binaries are attached to every GitHub release: iglint-linux-x64.tar.gz, iglint-linux-arm64.tar.gz (static, any distribution), iglint-macos.tar.gz (Intel and Apple silicon) and iglint-windows-x64.zip, with their checksums in SHA256SUMS. Unpack the archive and put iglint (or iglint.exe) on your PATH:

    curl -sSfL https://github.com/Mustry-Solutions/iglint/releases/download/v0.1.0/iglint-linux-x64.tar.gz | tar -xz
    sudo install iglint-linux-x64/iglint /usr/local/bin/
    
  • With Cargo (Rust 1.90 or newer):

    cargo install --locked --git https://github.com/Mustry-Solutions/iglint --tag v0.1.0 iglint
    # or, from a clone:
    cargo install --locked --path crates/iglint
    
  • The VS Code extension is attached to the releases as well, as one VSIX with the binary for every platform inside:

    code --install-extension iglint-vscode.vsix
    
  • A PyPI wheel with the binary and no Python code is planned but not published yet. Once it is:

    pip install iglint      # or: uv tool install iglint / pipx install iglint
    

Check the installation with iglint --version. More details are on the installation page of the documentation.

Quick start

Run iglint in the directory that holds your projects/ folder (a gateway data directory or a project repository):

iglint                      # same as `iglint check .`
iglint check projects/MyProject
iglint check --fix          # apply safe fixes
iglint check --diff         # show the fixes instead of writing them
iglint check --statistics   # count findings per rule
iglint rules                # list the rules
iglint rule SCR101          # explain a rule

A directory is searched for Ignition projects and gateway resource collections; Python files are linted as Ignition scripts only inside them. A .py file named on the command line is linted on its own, as a standalone script. When a directory holds nothing to lint (a folder of loose .py files without a project.json), the run says so on standard error and exits with 0.

Output looks like this:

projects/fixture-hmi/com.inductiveautomation.perspective/views/Main/Overview/view.json:85:43: BIND004 [warning] `now` polls every 1000 ms, faster than the minimum of 10000 ms
   |
85 |                 "expression": "dateFormat(now(1000), \"HH:mm:ss\")"
   |                                           ^^^
   |
   = note: at root/Clock.props.text@binding

Exit status: 0 when no finding reaches the --error-on level (default warning), 1 when one does, 2 for usage, configuration and internal errors. --exit-zero always exits with 0 on findings.

Configuration

iglint looks for iglint.toml, .iglint.toml or a pyproject.toml with a [tool.iglint] table, starting at the linted path and going up. Without one, the default rule set runs. Every key is optional:

# iglint.toml
# extend = "../shared/iglint.toml"    # build on another configuration file
# select = ["ALL"]                    # replace the default set
extend-select = ["NAME001", "REF011"]  # opt-in rules, on top of the defaults
ignore = ["A11Y"]                      # codes, prefixes, names or categories
# unfixable = ["NAME001"]             # report, but never apply these fixes
exclude = ["projects/Sandbox/**"]      # never lint these paths
# extend-exclude = ["projects/Old/**"] # add to the excludes of `extend`
strict = false                         # also report dynamic references
baseline = "ci/iglint-baseline.json"   # default: .iglint-baseline.json, if present
# projects = ["../shared/projects/Base"]           # more of the workspace
# gateways = ["../gateway/data/config/resources"]
# respect-gitignore = true            # skip files Git ignores
# cache-dir = ".iglint_cache"         # default: .iglint_cache in the root
# output-format = "text"

[rules.BIND004]                        # or [rules.polling-interval]
minimum-interval = 5000

[rules.SCR103]
severity = "error"
exclude = ["projects/*/ignition/script-python/legacy/**"]

[rules.NAME001]
convention = "PascalCase"
target-node-types = ["component"]

[[overrides]]
files = ["projects/Legacy/**"]
ignore = ["NAME"]
severity = { SCR = "info" }

[fix]
# assume-scripts-do-not-read-workspace-files = true  # see below
# vetted-system-functions = ["system.mes.getThing"]  # see below
# vetted-expression-functions = ["myModuleFunction"]
  • select replaces the default set, extend-select adds to it, ignore (or its alias extend-ignore) removes rules. Selectors are rule codes (SCR101), names (undefined-name), code prefixes (SCR1), categories (SCR) or ALL.
  • extend names another configuration file (a TOML file with these keys, or a pyproject.toml with [tool.iglint]), relative to this one, that this file builds on; it may extend another in turn (a cycle is an error). The base is read first: a key this file sets wins, the select/ignore lists of each file apply in order (base first), [rules.*] tables are merged per rule and [[overrides]] are added.
  • exclude replaces the excludes of an extended file, extend-exclude adds to them.
  • unfixable (selectors, default none): findings of these rules are still reported, but their fixes are never applied (--fix, the editor).
  • projects and gateways (paths relative to the configuration file, default none): more project directories and gateway configuration trees for the workspace. They are analysed with the rest (parent projects, references, the safety of fixes) but only linted when you name them on the command line.
  • respect-gitignore (default true): skip files that .gitignore, .ignore and Git's excludes ignore. Ignored files still count for the workspace analysis; they are only not reported.
  • cache-dir (default .iglint_cache in the root): where the result cache lives; --cache-dir overrides it and --no-cache turns the cache off.
  • [rules.<code or name>] sets severity, enabled, a per-rule exclude and the rule's options (see each rule's page).
  • [[overrides]] apply other settings to the files matching files.
  • [fix] assume-scripts-do-not-read-workspace-files (default false): every fix edits a file of the workspace, and a script that reads that file (open(path).read(), its size or modification time) sees the edit; a script that writes, appends to, renames or deletes one changes what the fix edits or moves it where a later read sees it. So while any code in the workspace may access a workspace file (any file operation whose path is not a literal outside the workspace, whatever its mode, or code that is not vetted), every fix is unsafe and says where that code is. Setting this to true states that no script reads the files of the workspace; checking that is your responsibility. It lifts only this condition, not the other reasons a fix may be unsafe.
  • [fix] vetted-system-functions and vetted-expression-functions (default empty): a system.* function or an expression function that Ignition 8.3 does not have (one of a third-party module) may run code, read a frame or read files, so it keeps the fixes that depend on what code can do from being safe, and the fix says where it is. List the ones you have checked cannot: a system.* path also covers what is read from it (system.mes.getThing covers system.mes.getThing.x), expression functions match in any letter case. Checking them is your responsibility. SCR201's allow and BIND002's extra-functions only silence those rules' findings.
  • Globs are relative to the configuration file and always use /.
  • The command line wins over the file: --select, --extend-select, --ignore, --strict, --config FILE, --isolated. --select replaces the selection everywhere, [[overrides]] included, so an override's select/extend-select cannot re-add a rule the command line left out; --extend-select only adds and --ignore only removes. The same holds in ign-lint compatibility mode and for migrated configurations.

iglint check --show-settings prints the settings that apply to a path, and iglint check --show-files the files that would be linted.

Migrating from ign-lint

iglint has an equivalent for every ign-lint rule and reads ign-lint's configuration.

  • Convert once: iglint migrate turns rule_config.json into iglint.toml. If an ign-lint whitelist (.ignition-lint-whitelist.txt or .whitelist.txt) exists, the whitelisted files' current findings go into a baseline instead, so those files are linted from now on and only new findings fail. iglint migrate --dry-run shows the result first. ign-lint lints only view.json files, so the rules it runs on top of iglint's defaults (SCR900, which runs pylint, above all) are selected for views only, in an [[overrides]] entry with files = ["**/view.json"]; library modules, gateway events and WebDev scripts get iglint's native rules. Move a rule out of that entry (into extend-select) to run it everywhere. iglint check with a rule_config.json uses the same scope.

  • Keep the old command line: iglint ign-lint [ARGS] accepts ign-lint 0.6.4's arguments (--config, --files, --whitelist, --ignore-warnings, --results-output, ...) and prints ign-lint's output format. Called through a link named ign-lint, the binary behaves the same, so existing scripts keep working:

    ln -s "$(command -v iglint)" /usr/local/bin/ign-lint
    ign-lint --config rule_config.json --files "**/view.json"
    
  • iglint check also reads a rule_config.json when no iglint.toml exists, with a deprecation warning.

The differences in findings are listed in docs/compat/ign-lint-differences.md.

Suppressing findings

In scripts, with a comment:

value = legacy_global  # iglint: ignore[SCR101]
x = 1  # iglint: ignore[unused-variable, SCR1]
# iglint: ignore-file[SCR102]

ignore applies to findings that start on the comment's line, ignore-file to the whole script. Unused suppressions are reported (SCR123).

view.json and other JSON resources have no comments: use exclude, a per-rule exclude, [[overrides]] or the baseline.

Baseline

A baseline records the current findings so that only new ones fail, which lets you adopt iglint on a large project at once:

iglint baseline             # writes .iglint-baseline.json
iglint check                # known findings are hidden; new ones fail
iglint check --prune-baseline   # drop entries whose findings were fixed

Entries are matched by rule, file and a fingerprint that survives moving code around. Paths in the baseline are relative and use /, so one file works on every platform. Commit it.

Output formats and CI

--output-format (or output-format in the configuration) takes text (default), concise, grouped, json, json-lines, sarif, github, azure, gitlab, junit and pylint. --output-file FILE writes the report to a file.

GitHub Actions, with annotations on the pull request and code scanning:

- name: Install iglint
  run: |
    curl -sSfL https://github.com/Mustry-Solutions/iglint/releases/download/v0.1.0/iglint-linux-x64.tar.gz \
      | tar -xz -C "$RUNNER_TEMP"
    echo "$RUNNER_TEMP/iglint-linux-x64" >> "$GITHUB_PATH"
- run: iglint check --output-format github
- run: iglint check --output-format sarif --output-file iglint.sarif --exit-zero
- uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: iglint.sarif

(Uploading SARIF needs permissions: security-events: write.)

Azure DevOps (##vso[task.logissue] lines show up in the build summary):

- script: |
    curl -sSfL https://github.com/Mustry-Solutions/iglint/releases/download/v0.1.0/iglint-linux-x64.tar.gz \
      | tar -xz -C "$(Agent.TempDirectory)"
    "$(Agent.TempDirectory)/iglint-linux-x64/iglint" check --output-format azure
  displayName: iglint

GitLab Code Quality:

iglint:
  image: python:3.12   # any Linux image with curl
  script:
    - curl -sSfL -o /tmp/iglint.tar.gz https://github.com/Mustry-Solutions/iglint/releases/download/v0.1.0/iglint-linux-x64.tar.gz
    - tar -xzf /tmp/iglint.tar.gz -C /usr/local/bin --strip-components=1 iglint-linux-x64/iglint
    - iglint check --output-format gitlab --output-file gl-code-quality-report.json
  artifacts:
    when: always
    reports:
      codequality: gl-code-quality-report.json

JUnit XML (--output-format junit) works with most other CI systems. The examples download the static Linux x86_64 binary of v0.1.0; once the PyPI wheel is published, pip install iglint==0.1.0 does the same.

pre-commit

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/Mustry-Solutions/iglint
    rev: v0.1.0
    hooks:
      - id: iglint        # or iglint-fix to apply safe fixes

To replace ign-lint's own pre-commit hook, keep its id and change only the repository: the ign-lint hook runs iglint ign-lint with the same files pattern (view\.json$), file types, default args (--config=.ignition-lint-precommit.json) and file passing, so your configuration, args overrides, output and exit status stay as they were:

repos:
  - repo: https://github.com/Mustry-Solutions/iglint   # was bw-design-group/ignition-lint
    rev: v0.1.0
    hooks:
      - id: ign-lint
        args: ["--config=rule_config.json", "--ignore-warnings"]   # optional, as before

These hooks build iglint from source on first use, which needs a Rust toolchain. Once the PyPI wheel is published (planned, not yet), a local hook can use it instead:

repos:
  - repo: local
    hooks:
      - id: iglint
        name: iglint
        entry: iglint check
        language: python
        additional_dependencies: ["iglint==0.1.0"]
        types_or: [json, python]
        require_serial: true

Only the changed files are reported and fixed, but iglint analyses the whole workspace around them (every project and gateway collection below the workspace root: the configuration file's directory, the directory that holds projects/, or the Git work tree), so cross-resource rules and the safety of fixes are the same as for a run over the whole repository. A warm single-file run takes a few tens of milliseconds on a workspace of 3,000 files.

A linked Git work tree (git worktree add, also one inside the repository such as .worktrees/feature or .claude/worktrees/feature) is a checkout of its own: the hook that runs in it analyses the work tree's projects and collections, as if it were a separate clone, and runs in the main checkout do not read the work tree's files. Submodules and nested repositories stay part of the repository around them. iglint reads the .git entries on disk, not GIT_DIR or GIT_WORK_TREE, so the hook and a run from a shell find the same workspace root.

Editors

iglint server is a language server (LSP over standard input and output): findings while you type, quick fixes, "fix all" and rule documentation on hover. Every fix it applies is computed when you pick it by a fresh iglint check --fix of the folder on the disk as it would be after saving the file you fix, so it is the fix the command line would make. While any other open file has unsaved changes, no fix is computed: save the other files first (editors that show disabled code actions, such as VS Code, say so). Nor is one computed for a file that starts with a byte order mark or is not valid UTF-8. The findings shown while you type leave out pylint (SCR900): the server does not run pylint for them, and iglint check reports them. The fresh check behind a fix runs pylint when the configuration selects SCR900, as iglint check --fix does. The VS Code extension in editors/vscode runs it; other editors can start iglint server directly.

Rules

docs/rules/README.md lists every rule by category, with its default severity, whether it runs by default and whether it can fix findings. iglint rule <CODE> shows the same page in the terminal.

Contributing

See CONTRIBUTING.md. Changes are listed in CHANGELOG.md.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option. Third-party material is listed in NOTICE.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in iglint by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

iglint is not affiliated with or endorsed by Inductive Automation.

Metadata

Release files for iglint 0.1.0

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

Source distribution (sdist)

Source distribution for iglint 0.1.0
File Size Uploaded Provenance Actions
iglint-0.1.0.tar.gz 2.7 MB With provenance Details for iglint-0.1.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for iglint 0.1.0
File Actions
iglint-0.1.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for iglint-0.1.0-py3-none-win_amd64.whl
iglint-0.1.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details for iglint-0.1.0-py3-none-musllinux_1_2_x86_64.whl
iglint-0.1.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details for iglint-0.1.0-py3-none-musllinux_1_2_aarch64.whl
iglint-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for iglint-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
iglint-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details for iglint-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
iglint-0.1.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for iglint-0.1.0-py3-none-macosx_11_0_arm64.whl
iglint-0.1.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details for iglint-0.1.0-py3-none-macosx_10_12_x86_64.whl

Total release size: 36.7 MB

Release files / iglint-0.1.0.tar.gz

Download URL iglint-0.1.0.tar.gz
Size 2.7 MB
Tags Source
SHA-256 checksum
How to use checksums
c96f75c90e67777b1328e3fa582ff01cd24206ec66121b2338f3175e476de6a1
BLAKE2b-256 checksum
How to use checksums
3ce7817d3bc61c455895faf81e00f850f709d61739d1e2630bbaf5bf8be54f4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / iglint-0.1.0-py3-none-win_amd64.whl

Download URL iglint-0.1.0-py3-none-win_amd64.whl
Size 5.2 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
31447c2967f37e4d71ea6d15c0d0e28fdb32a9560c5b99ea096af01bc365adc9
BLAKE2b-256 checksum
How to use checksums
f544f9e4fa8825d777c962e026c5590734f63f1e53490de5cf5ae902ba8d7ec6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / iglint-0.1.0-py3-none-musllinux_1_2_x86_64.whl

Download URL iglint-0.1.0-py3-none-musllinux_1_2_x86_64.whl
Size 5.2 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
8db7d3bc3a80c08bd80e8caa86496820c5309c013fc6cd03410ddecdb944bdc9
BLAKE2b-256 checksum
How to use checksums
8732a18d0dc6d466946c432101c88a9d28106f576cc8009ff366358f5ab7bfa0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / iglint-0.1.0-py3-none-musllinux_1_2_aarch64.whl

Download URL iglint-0.1.0-py3-none-musllinux_1_2_aarch64.whl
Size 4.6 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
f557e96bcff10b18d99a29ab774677bb8dd57bba5891ae796c77c566c7017d03
BLAKE2b-256 checksum
How to use checksums
0cc3983de8e61c4e7135cf3fb11d324b51f287d6e1c19e2132ffe862a5f184c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / iglint-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL iglint-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.1 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
89dd208dd943154301e6b3ecf82ef3928552052ec230a9f465da0fe1de233eb7
BLAKE2b-256 checksum
How to use checksums
0d3caf76574420cfcf1f21b47738b6c0fac9d7fde82ae47339da9b6129524100
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / iglint-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL iglint-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.7 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
2321409e8da29726f677e06a3bc7488cf090c262bf43dbb69b17b81b24e3eb75
BLAKE2b-256 checksum
How to use checksums
e5687d88f24e2f0880148a82f0bb6197c4b3b47a29b359e1fa1dbd79d8e8373c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / iglint-0.1.0-py3-none-macosx_11_0_arm64.whl

Download URL iglint-0.1.0-py3-none-macosx_11_0_arm64.whl
Size 4.5 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
186a6319dac0f3bffae12f55f9aad21bb55bd40fa3e1b5ff90bf27ecc9bf693f
BLAKE2b-256 checksum
How to use checksums
cdfefd085c999de2c91aa641c5434f9c4a693a29f3117ff167543255fa6139d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Release files / iglint-0.1.0-py3-none-macosx_10_12_x86_64.whl

Download URL iglint-0.1.0-py3-none-macosx_10_12_x86_64.whl
Size 4.8 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
3dcab5de0503ea0d650a6e19462a0b93daa5edb5adf5e1e8db1c07612a82b6d6
BLAKE2b-256 checksum
How to use checksums
82bec4251cf6c9e62d065777445078c3f4bc65f2890cbdfb83e00f22dd58e3be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 26, 2026.

Transparency log

Security for iglint 0.1.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.

Full provenance

All 8 files in this release have been uploaded with provenance metadata.

Select from 8 files

Attestation for iglint-0.1.0.tar.gz

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 Oct 26, 2026.

Transparency log

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

8 release files Full provenance

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