GitHub Actions: Matrix vector 'node' does not contain any values / Error when evaluating 'strategy' for job
The job's strategy.matrix ended up empty — a fromJSON() expression produced no values, or a dimension is an empty list.
Matrix vector does not contain any valuesError when evaluating 'strategy' for jobMatrix vector 'node' does not contain any valuesUnexpected value '' fromJSONError parsing fromJSON Meaning
Dynamic matrices built from another job's output fail when that output is empty, malformed, or the producing job was skipped. A static dimension with no items fails the same way. Validate the JSON, skip the matrix job with an if: when the list is empty, and print the output for debugging.
Common causes
fromJSON(needs.setup.outputs.matrix)with an empty or missing output- Producer job skipped or failed so no output exists
- Invalid JSON (single quotes, trailing comma)
- Empty array for a matrix dimension
- Wrong output name between jobs
⚡ Quick fix
- Echo the producing job's output and validate with
jq - Guard the matrix job:
if: needs.setup.outputs.matrix != '[]' - Use
includewith explicit entries for small matrices
Detailed fix by platform
GitHub Actions
outputs: matrix: ${{ steps.set.outputs.matrix }}and in the stepecho "matrix=$(jq -c . files.json)" >> "$GITHUB_OUTPUT"
Code examples
Guarded dynamic matrix
jobs:
setup:
runs-on: ubuntu-latest
outputs: { matrix: ${{ steps.m.outputs.matrix }} }
steps:
- id: m
run: echo 'matrix={"node":["18","20"]}' >> "$GITHUB_OUTPUT"
test:
needs: setup
if: ${{ needs.setup.outputs.matrix != '' }}
strategy:
matrix: ${{ fromJSON(needs.setup.outputs.matrix) }}
runs-on: ubuntu-latest
steps:
- run: echo node ${{ matrix.node }}How to diagnose
- Output — What does the setup job output?
- JSON — Valid and non-empty?
- Needs — Is the producer job run?
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
- API rate limit exceeded GitHub Actions: HttpError: API rate limit exceeded for installation ID 123456 / secondary rate limit
- Cache not found / Unable to reserve cache GitHub Actions: Cache not found for input keys: npm-Linux-abc123 / Failed to save: Unable to reserve cache with key, another job may be creating this cache
- Credentials could not be loaded GitHub Actions: Error: Credentials could not be loaded, please check your action inputs: Could not load credentials from any providers
Most viewed in CI/CD
- The process '/usr/bin/git' failed with exit code 128 GitHub Actions: Error: The process '/usr/bin/git' failed with exit code 128
- This job is stuck because you don't have any active runners GitLab CI: This job is stuck because you don't have any active runners online or available with any of these tags assigned to them
- Resource not accessible by integration GitHub Actions: Error: Resource not accessible by integration (403)
Other ways to find it
Where this error sits
Origin: Build & delivery. Errors that are often confused with or caused by this one (click to open):
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
💬 What worked for others
No tips yet — did something else fix this for you?
Share what worked for you
Tips are checked by an editor before they appear. Links are removed.
Report a correction or suggest an improvement
Last updated 25 Oct 2026