# Install hadolint with Homebrew, dnf, MacPorts, Nix, scoop, winget

Smarter Dockerfile linter to validate best practices. Version 2.14.0 via Homebrew; verified 2026-06-28.

## Install

```sh
sudo av install brew:hadolint
```

Additional install commands:

### macOS

- Homebrew (100%):

```sh
brew install hadolint
```

  Evidence: local Homebrew formula metadata

- MacPorts (94%):

```sh
sudo port install hadolint
```

  Evidence: MacPorts ports tree: devel/hadolint/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1

### Linux

- dnf (92%):

```sh
sudo dnf install ghc-commutative-semigroups
```

  Evidence: Fedora Rawhide package metadata: ghc-commutative-semigroups from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst

- Nix (92%):

```sh
nix profile install nixpkgs#hadolint
```

  Evidence: nixpkgs package indexes: hadolint from https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/top-level/all-packages.nix

### Windows

- Scoop (92%):

```sh
scoop install main/hadolint
```

  Evidence: Scoop official bucket manifest trees: bucket/hadolint.json from https://api.github.com/repos/ScoopInstaller/Main/git/trees/master?recursive=1

- winget (92%):

```sh
winget install --id hadolint.hadolint -e
```

  Evidence: Windows Package Manager source index: hadolint.hadolint from https://cdn.winget.microsoft.com/cache/source.msix

## Package facts

- **Package key:** brew:hadolint
- **Package manager:** Homebrew
- **Package manager page:** <https://formulae.brew.sh/formula/hadolint>
- **Version:** 2.14.0
- **Source summary:** Smarter Dockerfile linter to validate best practices
- **Homepage:** <https://github.com/hadolint/hadolint>
- **Repository:** <https://github.com/hadolint/hadolint>
- **Upstream docs:** <https://github.com/hadolint/hadolint#readme>
- **License:** GPL-3.0-only
- **Source archive:** <https://github.com/hadolint/hadolint/archive/refs/tags/v2.14.0.tar.gz>
- **Last updated:** 2026-06-28T12:35:16-04:00
- **Generated:** 2026-07-08T07:18:31+00:00

## Executables

- hadolint (cli)
- hadolint (alias)

## Dependencies

- gmp

## Build dependencies

- cabal-install
- ghc

## Uses from macOS

- libffi
- xz

## Install behavior

- Post-install hook: not defined
- Bottle: available on arm64_linux, arm64_sequoia, arm64_sonoma, arm64_tahoe, sonoma, x86_64_linux

## Freshness

- Page generated: 2026-07-08
- Package-manager version: 2.14.0
- Package-manager updated: 2026-06-28
- Local data: ok
- Upstream repository: https://github.com/hadolint/hadolint
- Upstream latest detected: v2.14.0 (current)
## Project history and usage

Hadolint is a Haskell Dockerfile linter that parses Dockerfiles into an abstract syntax tree, applies Dockerfile best-practice rules, and delegates shell snippets in RUN instructions to ShellCheck. In package-manager culture it is a compact, CI-friendly static analyzer for container builds, often installed locally even when the same tool is also available as a container image.

### Project history

The first GitHub release in April 2016 described Hadolint as a smarter Dockerfile linter that builds on ShellCheck. Early releases added a clearer command-line interface, multi-file support, Homebrew compatibility, YAML-based ignored-rule configuration, and integration documentation for editors and CI systems.

The project matured by expanding both Dockerfile syntax support and output formats. Release notes record JSON, CodeClimate, Checkstyle XML, Codacy, SonarQube, SARIF, GNU-style, and other formatter work across the 1.x and 2.x lines. Configuration also grew from ignored rules into severity thresholds, trusted registries, label schemas, strict-label behavior, and inline ignore pragmas.

Hadolint 2.0 in 2021 was described by the project as a major internal refactor focused on maintainability and efficiency, with new rule families around LABEL, COPY, useradd, HEALTHCHECK, and package-manager usage. Later releases continued tracking Dockerfile syntax, shell behavior, distribution quirks, and packaging targets such as static binaries and ARM64 builds.

### Adoption history

The README documents several installation paths: prebuilt binaries for macOS, Windows, and Linux, Homebrew on macOS, Scoop on Windows, Nix, Docker Hub images, GHCR images, and source builds with Haskell tooling. That breadth is why Hadolint appears in local developer environments, pre-commit hooks, CI jobs, editor integrations, and containerized lint workflows.

Hadolint's adoption is tied to a specific DevOps habit: treating Dockerfiles like source code with repeatable lint rules. Its GitHub Action companion and integration documentation reinforce the tool's role in pull-request checks, while the CLI remains simple enough for one-off use as `hadolint Dockerfile`.

### How it is used

Typical package usage is direct CLI linting of one or more Dockerfiles, optionally selecting output formats for CI annotations or machine-readable reports. Users can override severities, ignore specific rule codes, require label schemas, reject untrusted registries, and set a failure threshold that decides when the process exits unsuccessfully.

Hadolint looks for YAML configuration in project and user config locations, using the first file found. This makes the Homebrew package useful for teams that want a repository-local `.hadolint.yaml` while still allowing individual defaults under XDG or home-directory paths.

### Why package nerds care

Hadolint is package-nerd catnip because it sits at the intersection of Haskell distribution, static binaries, Docker images, shell linting, CI formats, and config-file discovery. It gives a local package manager a cleaner path than `docker run` when a workflow needs fast startup, editor integration, or offline linting.

It also demonstrates how a single-purpose CLI can become infrastructure glue. Package maintainers care about its static binary story, cross-platform release assets, and transitive ShellCheck behavior because those details shape whether Dockerfile linting is painless inside larger build pipelines.

### Timeline

- 2016: v1.0 release introduced the Dockerfile linter built on ShellCheck.
- 2016: v1.2 and v1.2.1 added multi-Dockerfile support and Homebrew compatibility work.
- 2017: v1.2.6 added YAML configuration for ignored rules.
- 2018: v1.5.0 added JSON, CodeClimate JSON, and Checkstyle XML output formats.
- 2018: v1.10.0 added trusted-registry checks for FROM images.
- 2018: v1.13.0 exposed Hadolint for use as a library.
- 2021: v2.0.0 delivered a major internal refactor and added several Dockerfile rule families.
- 2022: v2.10.0 added ARM64 binary support through a new release workflow.
- 2025: v2.14.0 continued rule and package-manager compatibility updates.

### Related projects

- ShellCheck: shell-script analyzer used by Hadolint for RUN instruction shell code.
- language-docker: Dockerfile parser used by Hadolint in its Haskell implementation.
- hadolint-action: GitHub Action wrapper for running Hadolint in workflows.
- Docker and OCI build tooling: the file format and build workflows Hadolint checks.

### Sources

- <https://github.com/hadolint/hadolint>
- <https://github.com/hadolint/hadolint-action>
- <https://github.com/hadolint/hadolint/releases>
- <https://hadolint.github.io/hadolint/>
- <https://raw.githubusercontent.com/hadolint/hadolint/master/README.md>


## Security Notes

narrow executable package without higher-risk signals.

- **Geiger risk:** green / low
- narrow executable package without higher-risk signals


## Configuration and credential file locations

These source-backed paths show where this package keeps local settings or durable credentials. Automic Vault can use them as review targets for secret scanning, migration, and command approval.


## Configuration files

- Unix: $PWD/.hadolint.yaml, $XDG_CONFIG_HOME/hadolint.yaml, ~/.config/hadolint.yaml, ~/.hadolint/hadolint.yaml, ~/hadolint/config.yaml, ~/.hadolint.yaml
## Source Database Details

- **Source Database:** Homebrew formula API
- **Tap:** homebrew/core
- **Full Name:** hadolint
- **Version Scheme:** 0
- **Revision:** 0
- **Bottle Stable Root URL:** <https://ghcr.io/v2/homebrew/core>
- **Deprecated:** no
- **Disabled:** no
- **Keg Only:** no
- **URL Keys:** stable

## Other Package-Manager Records

- Nix - hadolint: normalized package name match | nixpkgs package indexes: hadolint from https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/top-level/all-packages.nix
- dnf - ghc-commutative-semigroups - 0.2.0.2-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-commutative-semigroups from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell commutative-semigroups library | https://hackage.haskell.org/package/commutative-semigroups
- dnf - ghc-commutative-semigroups-devel - 0.2.0.2-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-commutative-semigroups-devel from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell commutative-semigroups library development files | https://hackage.haskell.org/package/hadolint
- dnf - ghc-commutative-semigroups-doc - 0.2.0.2-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-commutative-semigroups-doc from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell commutative-semigroups library documentation | https://hackage.haskell.org/package/hadolint
- dnf - ghc-commutative-semigroups-prof - 0.2.0.2-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-commutative-semigroups-prof from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell commutative-semigroups profiling library | https://hackage.haskell.org/package/hadolint
- dnf - ghc-hadolint - 2.14.0-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-hadolint from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell hadolint library | https://hackage.haskell.org/package/hadolint
- dnf - ghc-hadolint-devel - 2.14.0-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-hadolint-devel from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell hadolint library development files | https://hackage.haskell.org/package/hadolint
- dnf - ghc-hadolint-doc - 2.14.0-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-hadolint-doc from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell hadolint library documentation | https://hackage.haskell.org/package/hadolint
- dnf - ghc-hadolint-prof - 2.14.0-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-hadolint-prof from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell hadolint profiling library | https://hackage.haskell.org/package/hadolint
- dnf - ghc-monoid-subclasses - 1.2.6.1-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-monoid-subclasses from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell monoid-subclasses library | https://hackage.haskell.org/package/monoid-subclasses
- dnf - ghc-monoid-subclasses-devel - 1.2.6.1-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-monoid-subclasses-devel from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell monoid-subclasses library development files | https://hackage.haskell.org/package/hadolint
- dnf - ghc-monoid-subclasses-doc - 1.2.6.1-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-monoid-subclasses-doc from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell monoid-subclasses library documentation | https://hackage.haskell.org/package/hadolint
- dnf - ghc-monoid-subclasses-prof - 1.2.6.1-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-monoid-subclasses-prof from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell monoid-subclasses profiling library | https://hackage.haskell.org/package/hadolint
- dnf - ghc-primes - 0.2.1.0-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-primes from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell primes library | https://hackage.haskell.org/package/primes
- dnf - ghc-primes-devel - 0.2.1.0-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-primes-devel from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell primes library development files | https://hackage.haskell.org/package/hadolint
- dnf - ghc-primes-doc - 0.2.1.0-24.fc45: normalized package name match | Fedora Rawhide package metadata: ghc-primes-doc from https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/repodata/e5ca8ce900cd68f5419e1c39ae517343100b306336cbaeb70a3c153121d95094-primary.xml.zst | Haskell primes library documentation | https://hackage.haskell.org/package/hadolint


## Related links

- [Source-control packages](https://www.automicvault.com/pkg/source-control-tools/) - Belongs to a source-control command family.
- [Terminal utility packages](https://www.automicvault.com/pkg/terminal-utilities/) - Matched terminal and command-line workflow metadata.
- [Text processing packages](https://www.automicvault.com/pkg/text-processing-tools/) - Matched text, document, or structured-data processing metadata.
- [Developer build packages](https://www.automicvault.com/pkg/developer-build-tools/) - Matched build, compiler, generator, or developer workflow metadata.
- [cabal-install](https://www.automicvault.com/pkg/brew/cabal-install/) - Build dependency declared by Homebrew.
- [ghc](https://www.automicvault.com/pkg/brew/ghc/) - Build dependency declared by Homebrew.
- [actionlint](https://www.automicvault.com/pkg/brew/actionlint/) - Shares av.db curated category or tags: cli, developer-tools, linting, static-analysis.
- [checkmake](https://www.automicvault.com/pkg/brew/checkmake/) - Shares av.db curated category or tags: cli, developer-tools, linting, static-analysis.
- [flake8](https://www.automicvault.com/pkg/brew/flake8/) - Shares av.db curated category or tags: cli, developer-tools, linting, static-analysis.
- [golangci-lint](https://www.automicvault.com/pkg/brew/golangci-lint/) - Shares av.db curated category or tags: cli, developer-tools, linting, static-analysis.
- [tfproviderlint](https://www.automicvault.com/pkg/brew/tfproviderlint/) - Shares av.db curated category or tags: cli, developer-tools, linting, static-analysis.
- [bashate](https://www.automicvault.com/pkg/brew/bashate/) - Shares av.db curated category or tags: cli, developer-tools, linting.
- [bpmnlint](https://www.automicvault.com/pkg/brew/bpmnlint/) - Shares av.db curated category or tags: cli, developer-tools, linting.
- [checkbashisms](https://www.automicvault.com/pkg/brew/checkbashisms/) - Shares av.db curated category or tags: cli, developer-tools, linting.
- [hlint](https://www.automicvault.com/pkg/brew/hlint/) - Both packages touch the same language runtime or ecosystem. Shared terms: analysis, cli, developer, developer-tools, gmp.
- [elvis](https://www.automicvault.com/pkg/brew/elvis/) - Local package facts share a topical domain. Shared terms: analysis, cli, developer, developer-tools, linter.

## Combined YAML source

View the package source record on GitHub. [combined/hadolint.yml](https://github.com/automic-vault/db/blob/main/combined/hadolint.yml)


## Sources

- Nucleus package database
- Geiger risk classifier
- package-page enrichment
- curated configuration and credential file locations
- curated package history
- package version freshness
- av.db category and tag curation
- package relationship graph
- external package-manager database matches
- cross-ecosystem install command graph
