Flags the Terraform resource attributes, outputs and backends whose values land in terraform.tfstate as cleartext, before an auditor or a repo reader finds them. Runs entirely in your browser — nothing is uploaded.
Same engine as the VS Code extension, byte for byte.
Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.
VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmDocker Hubext install ReadyStack.tfstate-secret-leak-lint npx @readystack/tfstate-secret-leak-lint <file> docker run --rm -v "$PWD:/w" getreadystack/tfstate-secret-leak-lint /w
Team? One key for every ReadyStack linter, 5 seats, $149 once
Scan every .tf file in the workspace in one pass and export the finding list as a dated Markdown or JSON evidence file you keep for the audit. $29 once, one licence key per person or CI seat.
One payment, one licence key for this tool. The key is shown right after payment.
Hand review runs about $150/hour.
Buy the full version — $29· ReadyStack
Real numbers from this tool, line by line.

Eight findings, six of them errors, came out of a forty-seven line Terraform file that every code scanner in the pipeline had already passed. The engineer who wrote it runs a production AWS account for a payments team in Berlin, and nothing in it looks wrong: no password in the source, a remote S3 backend with encrypt set to true. By most linters' standards it is fine.
The problem is not what is in the code. It is what Terraform does with it.
Terraform writes back everything it sends to a provider. That is the design: state is how drift is detected, so state holds the value actually applied. So terraform.tfstate is a plaintext JSON copy of your infrastructure, and the list of values it copies is not the list you typed.
Three examples from that file. A random_password resource generates a thirty-two character secret, and the generated value is stored in state in cleartext forever — documented behaviour of the random provider, not a bug. A tls_private_key resource writes private_key_pem into state, which is why the hashicorp/tls documentation calls it unsuitable for production keys. A data block reading aws_secretsmanager_secret_version copies the secret out of the secret manager into state on every plan, because every data source result is persisted.
None of those three lines contains a secret. All three put one in state.
The fourth misunderstanding is sensitive = true. It hides the value in plan output and in CI logs. It does not remove it from state: an output marked sensitive and one that is not produce identical state entries. It is a logging control that reads like an encryption control.
Terraform State Secret Leak Lint is a VS Code extension built around that distinction. It reads the .tf file you have open and applies ten rules, every one about what lands in state rather than what appears in the source: nineteen attribute names from password through shared_access_key; the random and TLS providers; seven secret data sources; the backend, checked for encrypt and kms_key_id; the terraform block, checked for the encryption block available since Terraform 1.10; outputs and variables named like credentials without sensitive set; and credential literals in six formats. Each finding carries its line number and what to write instead — for the RDS password, manage_master_user_password, which hands the credential to AWS to rotate.
The repository ships both halves. The forty-seven line dirty.tf returns eight findings: six errors and two warnings. The same stack rewritten so no secret reaches state returns zero. That pair is the whole argument.
Free scanners are not wrong; they answer a different question. They look for a secret written in the code, and here there is none. The question an auditor asks is where production secrets live, and the honest answer for most Terraform repositories is: in the state file, in cleartext, in every historical version of the state object, until somebody rotates them.
The extension is free on the file you have open, all ten rules, no licence key — a complete job on one file. The licence key adds a different axis, not more of the same: the workspace sweep across every .tf file in one pass, and the export that writes findings to a dated Markdown or JSON file you keep as audit evidence.
Hand review runs about $150/hour; reading a mid-size Terraform repository attribute by attribute is most of a working day. The licence is $29 once, one key per person or CI seat.
The same engine runs as a browser page with nothing uploaded, so you can paste the file you are worried about first.
It reads the .tf file you have open and names every place a secret value ends up in terraform.tfstate in cleartext: resource attributes like password, the result of random_password, the PEM key from tls_private_key, secret data sources, outputs missing sensitive, and a backend written without encryption. 10 rules. Each finding says which line and what to do instead.
Platform and DevOps engineers who keep AWS, Azure or GCP infrastructure in Terraform, and the person who has to answer an auditor asking where production secrets live. It is most useful on a repo that grew fast, where several people added resources and nobody has read the state file end to end.
Free scanners look for a secret written in the code. This looks for the values Terraform copies out of the code and into terraform.tfstate, which is a different list: random_password.result, tls_private_key.private_key_pem and every secret data source are clean HCL that still land in state in cleartext. A code scanner passes that file.
Free, with no key: scan the file you have open against all 10 rules and read every finding with its line number and its fix. The licence key adds the workspace sweep, which scans every .tf file in one pass, and the export that writes the findings to a dated Markdown or JSON file you keep as audit evidence.
Hand review runs about $150/hour. Reading a mid-size Terraform repo attribute by attribute, checking each provider schema for what is persisted, and writing the result up as evidence is most of a day. The extension is $29 once, one licence key per person or CI seat,.
A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Terraform State Secret Leak Lint checks the file you open against 10 rules from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.
One question, answered by the person who built it. Your email only if you want the answer sent.
Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.
For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →