Lints checkout and product-page templates for the buy-now-pay-later disclosures the EU Consumer Credit Directive 2 (2023/2225) requires from 20 November 2026. 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.bnpl-disclosure-lint-ccd2 npx @readystack/bnpl-disclosure-lint-ccd2 <file> npx @readystack/bnpl-disclosure-lint-ccd2 --mcp
Team? One key for every ReadyStack linter, 5 seats, $149 once
Scans the whole storefront folder in one pass and exports a dated CCD2 evidence report with per-file findings and rule IDs.
One payment, one licence key for this tool. The key is shown right after payment.
An EU commercial counsel reviewing one checkout flow for consumer-credit disclosure is typically billed at EUR 250-450 an hour.
Buy the full version — $29· ReadyStack
Real numbers from this tool, line by line.

20 findings in a 31-line checkout template, 9 of them high, and all of them sitting in markup an EU storefront developer shipped without a second thought. One sentence does most of the damage: "Pay in 4 interest-free instalments." On 20 November 2026 that sentence stops being marketing copy and becomes credit advertising.
Directive (EU) 2023/2225, the second Consumer Credit Directive, applies from that date. It repeals Directive 2008/48/EC, the text every large language model learned consumer credit from. The repeal matters less than the two deletions that come with it. The old directive did not apply to credit below 200 euro, and it did not apply to credit granted free of interest and without any other charges. Buy-now-pay-later lived in the gap between those two exclusions. CCD2 closes it.
That is why a chatbot is the wrong place to ask. Put "does my pay-in-4 widget need an APR?" to a model and it reasons from 2008/48/EC, finds the interest-free carve-out, finds the 200-euro floor, and tells you a 62.25 euro instalment plan at 0% is out of scope.
What attaches instead is Article 8: standard information beside the offer, given by means of a representative example - borrowing rate, total amount of credit, APR, duration, number of instalments, total amount payable, and for a deferred payment the cash price of the goods. All of it clear, concise and prominent, carrying the words "Caution! Borrowing money costs money." Article 10 puts the Standard European Consumer Credit Information form in front of the shopper before they are bound. Article 26 keeps a 14-day right of withdrawal. Article 18 makes the creditworthiness assessment mandatory, which retires "no credit check, guaranteed approval" as a line of copy. Article 14 prohibits tying an add-on to the credit.
Every one of those duties lands on markup somebody wrote. So the check belongs in the editor, next to the markup, not in a slide deck.
BNPL Disclosure Lint is a VS Code extension with 22 rules over **/*.{html,htm,jsx,tsx,liquid}. Eleven are missing-disclosure rules and they are deliberately quiet: they only fire once the file actually offers credit, so a blog template never lights up. The engine looks for a pay-later context first - "buy now pay later", "pay in 3", "instalments", "deferred payment", "Klarna" - and only then asks where the APR went. The other eleven fire on a single line, because the line itself now says something wrong: a citation of 2008/48/EC, a 200-euro exemption, "not regulated as consumer credit", a pay-later radio that ships checked, an aria-hidden="true" wrapper around the representative example, an APR set in 9px.
The numbers in the first line are measured, not estimated. Two fixtures ship with the extension. _fixtures/clean.html is a compliant 39-line pay-in-3 block and returns 0 findings. _fixtures/dirty.html is 31 lines and returns 20: 9 high, 9 medium, 2 low. Run either one today, 17 September 2026, and the report closes with the countdown - 64 days to 20 November 2026.
The same file, ext/engine.js, is also the whole free web version. It has no editor dependency, so the 22 rules run in a browser on one page: paste markup, read findings, nothing leaves the tab.
Free finishes a file. Run CCD2: Check this file and every missing disclosure comes back named with its rule id and its Article - enough to fix and ship that template. The licence key moves along a different axis, scope and ownership: one pass over the whole storefront folder, and a dated evidence report with per-file findings and rule ids that stays in your audit file.
It reads a checkout or product-page template and reports every disclosure Directive (EU) 2023/2225 requires beside a buy-now-pay-later offer. The rule set holds 22 checks. On the 31-line non-compliant fixture that ships with it, it returns 20 findings: 9 high, 9 medium, 2 low. The compliant fixture returns 0.
Front-end and e-commerce developers who ship pay-later blocks to EU shoppers: Shopify and Liquid themes, Next.js and Vue storefronts, plain HTML landing pages. If you wrote the markup that renders 'Pay in 3' or a Klarna widget, the Article 8 duties land on that markup.
Most models answer from Directive 2008/48/EC, the text CCD2 repeals. That old directive excluded credit below 200 euro and excluded interest-free credit, so a model will tell you a pay-in-4 block at 62.25 euro is out of scope. Under CCD2 from 20 November 2026 it is in scope.
Free finishes one file: open a template, run the check, get every missing Article 8 or Article 10 disclosure named with its rule id. The licence key adds a different axis - scope and ownership: one pass over the whole storefront folder and a dated evidence report you keep.
An EU commercial counsel reviewing one checkout flow for consumer-credit disclosure is typically billed at EUR 250-450 an hour, and a storefront has more than one flow. The extension is 29 once,, and it re-runs every time you touch the template.
A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Checkout Disclosure Lint - BNPL and consumer credit (EU CCD2 checks the file you open against 22 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 →