Lint IoT and radio device config, firmware defaults and device manifests against RED Art. 3(3)(d)(e)(f) (EN 18031-1/-2/-3) and the UK PSTI security requirements. 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)npmMCP server (npx)Docker Hubext install ReadyStack.en18031-psti-lint npx @readystack/en18031-psti-lint <file> npx @readystack/en18031-psti-lint --mcp
Team? One key for every ReadyStack linter, 5 seats, $149 once
Sweep every matching config in the workspace and export a dated evidence pack (Markdown + CSV) mapping each finding to its article and clause, kept as a document for the test lab
One payment, one licence key for this tool. The key is shown right after payment.
A contract firmware engineer at $120 an hour bills about $480 for the half day one shipped-defaults file takes by hand, and it repeats every build
Buy the full version — $29· ReadyStack
Real numbers from this tool, line by line.

19 findings - 15 errors and 4 warnings - in one 39-line device.yaml, for firmware and embedded engineers shipping radio devices into the EU or UK. Six of those 15 errors, exactly as the tool prints them:
L9 error default_password PSTI Sch. 1 para. 1 / RED Art. 3(3)(d)
L10 error telnet_enabled RED Art. 3(3)(d) / EN 18031-1
L21 error tls_verification_disabled RED Art. 3(3)(e) / EN 18031-2
L28 error update_signature_off RED Art. 3(3)(d) / EN 18031-1
L36 error wrong_harmonised_standard EN 303 645 is not harmonised here
L39 error support_period_lapsed ended 2026-06-30, 75 days ago
That file is _fixtures/dirty.yaml, the sample shipped with the extension - a fictional cellular gateway's default configuration, read on 2026-09-13. No code was written to produce any of those findings. Every one of them sits in the shipped defaults: the admin password, the telnet service, the certificate check, the OTA block, and two citations in the compliance section that are simply wrong.
Since 1 August 2025, radio equipment placed on the EU market has had to meet the cybersecurity requirements of Delegated Regulation (EU) 2022/30 under the Radio Equipment Directive: Article 3(3)(d) network protection, 3(3)(e) personal data and privacy, 3(3)(f) protection from fraud. The harmonised standards cited for those limbs are EN 18031-1, -2 and -3. In the UK, PSTI has been in force since 29 April 2024, and its Schedule 1 asks three things a config file can answer: no universal default passwords, a published vulnerability-reporting contact, and a published minimum period for security updates.
Ask a general assistant which standard to cite and it will often say EN 303 645. That is the ETSI consumer-IoT baseline. It is not a harmonised standard under the delegated regulation, so citing it alone gives no presumption of conformity - and the line reads as done when it is not. The second is a date: the requirements were originally set for August 2024, then deferred by amendment (EU) 2023/2444 to 1 August 2025. Declarations written in that year still carry the old date, and a reviewer who reads August 2024 concludes the document was never revisited.
Both are rules here, with a third no generic tool asks: en18031_part_missing. EN 18031 without a part is not a citation - -1 is network protection, -2 is personal data and privacy, -3 is protection from fraud.
support_until: 2026-06-30 is not a string match; it is compared against today. Read on 2026-09-13, the published support period ended 75 days ago, so the security-update statement shipped with units already in the field is no longer true. Read the same file on 15 January 2026 and it is a warning with 166 days left - time to extend the date or write the end-of-support notice. Same file, different day, different answer.
The corrected version of that config - unique-per-unit passwords, SSH instead of telnet, mqtts on 8883, signed OTA over HTTPS, telemetry off with consent required, EN 18031 cited by part - returns 0 findings.
A contract firmware engineer at $120 an hour bills roughly $480 for the half day one such file takes by hand against Article 3(3)(d)(e)(f) and PSTI Schedule 1, and it repeats every build, because defaults drift back.
The next date is on the calendar: the EU Cyber Resilience Act reporting duties started on 11 September 2026 - 24 hours, then 72 hours, then 14 days. Same device, shorter clock.
Checking one file is free and complete: all 19 rules resolve with line numbers and clauses, no key, offline, and the same engine runs in the browser with nothing installed. The paid tier is a different job: sweep every config in the workspace and export a dated evidence pack, Markdown and CSV, mapping each finding to its article and clause. $29 once.
It reads device config and firmware default files - device.yaml, prj.conf, mosquitto.conf, .env, C headers - and reports each line that fails RED Article 3(3)(d), (e) or (f) or a UK PSTI Schedule 1 duty. 19 rules, each finding carrying a line number, the article and the EN 18031 part the fix belongs to.
Firmware and embedded engineers, and the compliance lead sitting next to them, at a company placing radio or connected equipment on the EU or UK market. If you are assembling a declaration of conformity for Delegated Regulation (EU) 2022/30, or answering a retailer's PSTI statement-of-compliance request, these are your files. Penalties under the PSTI Act 2022 reach 10 million pounds or 4% of qualifying worldwide revenue.
Generic linters look for secrets and syntax, not for legal duties, so they never ask whether a support period was published. Chatbots routinely cite EN 303 645 as the harmonised standard and repeat the withdrawn August 2024 date. This tool checks both mistakes explicitly, offline, against the file in front of you.
Free and complete for one file: open it, run the check, see every finding with its line and clause, all 19 rules, no key and no account. The paid key adds a different job - sweeping every matching config in the workspace and exporting a dated evidence pack, Markdown plus CSV, that you keep and hand on.
A contract firmware engineer at $120 an hour bills roughly $480 for the half day it takes to walk one shipped-defaults file against Article 3(3)(d)(e)(f) and PSTI Schedule 1 by hand, and that half day repeats on every build. The full version is $29 once,.
A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. EN 18031 / PSTI Device Config Lint checks the file you open against 19 rules, each naming its legal or official basis, 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 →