YAML Linter for GitHub Actions – Avoid Broken Automation
Paste your workflow YAML and catch errors before pushing
No signup • Runs in browser • Free
Missing quotes around matrix values cause the Actions interpreter to treat environment variable values as booleans. A value like on becomes true, off becomes false, and your workflow silently passes the wrong value to every downstream step. A YAML linter highlights fields that must be quoted or escaped before you push — catching the kind of error that produces wrong behavior rather than an outright failure.
GitHub Actions workflows are particularly vulnerable to YAML's implicit type coercion rules. YAML 1.1 (which many parsers still use) treats yes, no, on, off, true, and false as booleans — meaning an unquoted on in a matrix definition becomes the boolean true. The workflow does not error; it just does the wrong thing. A linter flags unquoted values that could be misinterpreted.
# Values that YAML parsers may coerce to booleans:
matrix:
environment:
- production
- on # ← YAML 1.1 parses this as boolean true, not string "on"
- off # ← YAML 1.1 parses this as boolean false
# Fixed — quote all values that could be misinterpreted:
matrix:
environment:
- production
- "on"
- "off"
Quick summary
- ✓YAML 1.1 coerces unquoted 'on', 'off', 'yes', 'no' to booleans — quote them explicitly.
- ✓A linter catches both outright syntax errors and values that cause silent type coercion.
- ✓Errors are reported with exact line numbers before anything is pushed.
- ✓DevToolBox tools run entirely in your browser — no signup.
What It Is
A YAML linter for GitHub Actions validates the structure and syntax of workflow files — indentation, quoting, colons, tabs, and other formatting rules that affect how the Actions runner parses the file. It runs the same parse that GitHub performs when a workflow is triggered, but locally, before the push.
For GitHub Actions specifically, the linter helps catch two categories of issue: hard errors that prevent the workflow from running at all, and soft errors that allow the workflow to run but produce unexpected behavior due to type coercion.
Why Developers Use This
- Pre-push workflow validation. Any time you add a new job, step, or matrix dimension to a workflow file, linting it first prevents a broken workflow from blocking CI for the whole team.
- Maintaining large workflow libraries. Organizations with dozens of workflow files benefit from consistent linting — a linter run in CI catches regressions in any workflow file before they merge.
- Debugging unexpected workflow behavior. When a workflow runs but produces wrong output — wrong environment variable, wrong matrix value — unquoted values are often the cause. See our guide on YAML validation online for a full explanation of YAML's boolean coercion rules.
- Reviewing reusable workflows. Reusable workflows referenced with
uses:must have valid YAML structure. Linting confirms the structure before the workflow is referenced from other repos.
Common GitHub Actions YAML Errors
- Indentation drift. A step indented at the wrong level under
jobs.build.stepsis either ignored or causes a parse error. GitHub Actions is strict about the nesting depth of each key. - Tab characters. A single tab in a workflow file produces
found character '\t' that cannot start any token. Configure your editor to insert spaces for YAML files. - Unquoted special values.
on,off,yes,nowithout quotes are parsed as booleans by YAML 1.1. Quote any string value that could be coerced, especially inenv:blocks and matrix definitions.
How to Use the YAML Linter
Using the DevToolBox YAML Linter to check a GitHub Actions workflow takes under a minute.
- Open the linter in your browser. No account, no install.
- Paste your workflow YAML from
.github/workflows/. - Click Lint & Format. Errors appear with line numbers; valid YAML is returned cleanly formatted.
- Fix the issue in your local workflow file at the reported line, paste again, and re-lint.
- Push the validated workflow with confidence.
DevToolBox tools run entirely in your browser — nothing you paste is transmitted to any server.
Frequently Asked Questions
Does the linter validate GitHub Actions-specific syntax?
The linter validates YAML syntax — structure, indentation, quoting, and formatting. It does not validate GitHub Actions semantics (whether a uses: field points to a valid action or whether a secret name is defined). GitHub's workflow validation, which runs on push, handles that layer.
How do I keep workflow indentation consistent?
Add .editorconfig with indent_style = space and indent_size = 2 for YAML, and add yamllint to your pre-commit config targeting .github/workflows/. The online linter is for quick checks; the hook enforces consistency at commit time.
Can I run YAML linting in CI for workflow file changes?
Yes. Add a job that runs yamllint .github/workflows/ triggered on any push or PR that modifies workflow files. This creates a feedback loop where workflow changes are validated before they can affect other workflows.
Conclusion
GitHub Actions workflow errors range from hard failures (the workflow does not run) to silent misbehavior (the workflow runs but does the wrong thing). Both categories are preventable with a linter. Checking the YAML before pushing takes ten seconds and eliminates an entire class of broken automation.
If you need a fast YAML linter that catches syntax errors and flags values that could be coerced incorrectly, DevToolBox does exactly that. DevToolBox tools run entirely in your browser — no signup, no install, nothing sent to a server.
Lint your GitHub Actions workflows in seconds
Paste any workflow YAML — catch syntax errors and unquoted values before pushing. Free, no signup, browser-only.
Lint Actions Workflow →