Skip to content
SPECIFICTION
Get listed

actionlint

rhysd.github.io

Free plan WebWindowsmacOSLinuxSelf-hosted
Visit rhysd.github.io
Spec score 8.3 #5 of 33 in Linters

What it is

actionlint is a static checker for GitHub Actions workflow files. It flags unexpected or missing syntax keys and checks `${{ }}` expressions for semantic issues such as missing properties and mismatched types. It validates action inputs and outputs, along with inputs, outputs, and secrets used in reusable workflows and workflow calls. Security checks cover script injection risks involving untrusted inputs and hard-coded credentials. For scripts in `run:` steps, it can use ShellCheck and Pyflakes integrations, which can be disabled. Installation options documented by the project include prebuilt binaries, Docker, source builds, a CI download script, and package managers. Its browser playground runs through WebAssembly and states that it does not send data outside the browser. The project also describes integrations with code review tools, CI and editors, provides Go APIs, and allows configuration of self-hosted runner labels, configuration variables, and file-specific ignore patterns. actionlint is free and MIT-licensed, with a command-line tool and browser playground. The listed platforms include Linux, macOS, Windows, web, and self-hosted use.

Spec sheet

Purpose
actionlint is a static checker for GitHub Actions workflow files.Read 11 Oct 2026 · github.com
License
The project is distributed under the MIT license.Read 11 Oct 2026 · github.com
Action and workflow validation
It checks action inputs and outputs, as well as inputs, outputs, and secrets in reusable workflows and workflow calls.Read 11 Oct 2026 · github.com
Configuration
The README says configuration can set self-hosted runner labels, configuration variables, and error ignore patterns by file path.Read 11 Oct 2026 · github.com
Developer integrations
The usage guide describes integrations with reviewdog, GitHub Problem Matchers, super-linter, pre-commit, VS Code, Emacs, Vim and Neovim, Pulsar Edit, Nova, and trunk.Read 11 Oct 2026 · github.com
Expression checks
It strongly type-checks `${{ }}` expressions to catch semantic errors such as missing properties and type mismatches.Read 11 Oct 2026 · github.com
Go library
The project provides Go APIs for using actionlint from a Go program.Read 11 Oct 2026 · github.com
Install and run
The project documents prebuilt binaries, Docker, building from source, a CI download script, and package-manager installation options.Read 11 Oct 2026 · github.com
Online playground
The browser playground runs actionlint through WebAssembly and states that it never sends data outside the browser.Read 11 Oct 2026 · github.com
Security checks
Its security checks include detecting script injection risks from untrusted inputs and hard-coded credentials.Read 11 Oct 2026 · github.com
Shell and Python integrations
It can integrate ShellCheck and Pyflakes for scripts in `run:` steps; these integrations can be disabled.Read 11 Oct 2026 · github.com
Support and feedback
The README invites bug reports and feedback, including feature requests and ideas for additional checks, through GitHub issues.Read 11 Oct 2026 · github.com
Workflow checks
It checks workflow syntax, including unexpected or missing keys.Read 11 Oct 2026 · github.com

Plans and prices

actionlint Free MIT-licensed static checker · command-line tool and browser playground Read 11 Oct 2026 · github.com

Every actionlint plan and price →

Strong points and limits

Strong points

  • Checks workflow syntax and expression types.
  • Flags script injection risks and hard-coded credentials.
  • ShellCheck and Pyflakes integrations are optional.
  • Browser playground runs through WebAssembly.
  • Free and distributed under the MIT license.

Limits

  • Focused on GitHub Actions workflow files.
  • Shell and Python checks require integrations.
  • ShellCheck and Pyflakes integrations can be disabled.

Who it suits

actionlint suits developers who maintain GitHub Actions workflows and want syntax, expression, validation, and security checks. It also fits teams using editor or CI integrations, or Go programs that need its APIs.

actionlint in depth

Read the full write-up

actionlint is a focused static checker for GitHub Actions workflow files, best suited to developers and teams maintaining non-trivial automation. It is a strong choice when workflow correctness and workflow-specific security matter, but not when you need a general-purpose analyzer for application code.

Overview

actionlint examines workflows before structural or semantic mistakes turn into confusing automation failures. It is distributed under the MIT license and is open source, so it fits individual projects and organizations that want a tool they can run and integrate themselves rather than a hosted service with recurring fees.

The project supports command-line use, CI adoption, editor integrations, a browser playground, and Go APIs. That breadth makes it practical for both a local pre-commit check and a standardized gate in a larger engineering process.

Key features

Workflow syntax checking catches missing and unexpected keys. Strong type checking for ${{ }} expressions goes further, identifying problems such as missing properties and incompatible value types that a basic parser can overlook.

Validation covers action inputs and outputs, and also checks inputs, outputs, and secrets passed through reusable workflows and workflow calls. This is particularly useful for repositories whose automation is split into reusable components, where an interface mistake can otherwise surface far from its origin.

Security rules look for script-injection risks caused by untrusted inputs and for hard-coded credentials. Those checks address common workflow hazards, although they are deliberately workflow-focused rather than a replacement for security analysis of application code.

For commands in run: steps, optional ShellCheck and Pyflakes integrations add shell and Python diagnostics. They can be disabled when another tool already owns those checks. Configuration can define self-hosted runner labels, configuration variables, and file-path-based ignore patterns, giving teams control over local conventions and exceptions.

Installation is flexible: documented routes include prebuilt binaries, Docker, source builds, a CI download script, and package managers. Integrations include reviewdog, GitHub Problem Matchers, super-linter, pre-commit, VS Code, Emacs, Vim and Neovim, Pulsar Edit, Nova, and trunk. The browser playground runs the checker through WebAssembly and says data stays in the browser, while Go APIs allow embedding actionlint in Go programs.

Pricing

PlanPriceIncludesactionlintfreeMIT-licensed static checker, command-line tool, and browser playgroundThere are no paid tiers, seat charges, quotas, trial periods, or renewal terms. The free plan is therefore the complete product, including custom rules, security rules, editor support, and CI support. It suits anyone who wants to adopt workflow linting without procurement or usage-cost considerations.

Platforms

actionlint runs on Linux, macOS, Windows, self-hosted environments, and the web. The self-hosted and command-line options suit repositories that cannot send workflow content to an external service; the web playground is convenient for a quick browser-based check.

Who it's for

Choose actionlint if GitHub Actions is central to your delivery process, especially when workflows use expressions, reusable workflows, workflow calls, secrets, or self-hosted runners. Its editor and CI integrations also suit teams that want the same diagnostics during authoring and during review.

It is a poor fit as your only linting tool when the main target is source code, containers, or a language ecosystem unrelated to GitHub Actions. Its strengths come from narrow, deep workflow knowledge.

Pros and cons

Pros

Strong expression typing catches semantic workflow errors, not only malformed syntax.

Reusable-workflow and action interface checks cover inputs, outputs, and secrets across call boundaries.

Workflow-specific security rules flag injection risks and hard-coded credentials.

Open-source, free distribution and broad installation options make CI and self-hosted deployment straightforward.

Optional ShellCheck and Pyflakes support extends review to scripts without forcing those integrations.

Browser execution through WebAssembly keeps playground data in the browser.

Cons

Its scope is GitHub Actions workflows, so it cannot replace a general code, container, or application-security analyzer.

Shell and Python analysis depends on optional integrations, leaving those checks outside the core checker when disabled.

Teams must configure ignore patterns and environment-specific labels when repository conventions differ from defaults.

Alternatives

For a broad catalog of static-analysis tools, see Linters.

Choose Cppcheck instead for C and C++ analysis with a freemium model, a free open-source core, and an additional Project plan with custom pricing.

Biome is the better pick for an open-source web-project toolchain available on Linux, macOS, Windows, the web, and as an extension.

PMD suits readers wanting a downloadable, BSD-style licensed static code analyzer rather than a GitHub Actions workflow checker.

Choose Ruff for the Python ecosystem and its open-source developer-tool focus.

SwiftLint is aimed at open-source Swift linting on Linux, macOS, and Windows.

Astral is the broader choice for its open-source, permissively licensed Python tools, including Ruff, uv, and ty.

Hadolint targets Dockerfiles, while JSHint targets JavaScript.

Verdict

actionlint is the right choice for anyone responsible for GitHub Actions workflows who wants deep syntax, expression, interface, and security checks at no cost. Choose it for focused workflow confidence and flexible local or CI integration; look elsewhere when your primary need is analysis of application languages, Dockerfiles, or broader code quality.

Verdict

actionlint covers syntax, expression, reusable workflow, and security checks in one free project. Its scope is specifically GitHub Actions workflow files.

Where Specifiction places it

Alternatives to actionlintAll alternatives →