FAQ
Getting started
I am a beginner. Is it OK to use it?
Absolutely. With VS Code, you can start immediately — just install the extension and open an HTML file. No Node.js or command line knowledge is needed. You can also try it on the Playground without installing anything.
Can I use it with React?
Of course. Markuplint supports React (JSX), Vue, Svelte, Astro, Alpine.js, HTMX, Pug, PHP, and more via official parser plugins. See Beyond HTML for details, or the React usecase for a copy-paste-ready configuration.
Does it seem that Angular is not supported?
We do not have official support for Angular, but a volunteer has created markuplint-angular-parser. Please use this.
Is VS Code the only editor that is supported?
The officially supported editor is VS Code, but VS Code-based editors such as Cursor, Windsurf, and VSCodium are also expected to work since they support VS Code extensions. The source code for the VS Code extension is available to the public, so we expect volunteers will develop extensions for other editors as well.
I want to resolve a warning
Warned at OGP
The Open Graph protocol is a different specification from HTML and is not supported by the standard. Please refer to a possible configuration to support the protocol.
Warned by invalid-attr rule
invalid-attr warns when an attribute does not exist in the HTML specification. This is common when using frameworks. You can allow specific attributes using the allowAttrs option.
For React and Vue, spec plugins prevent warnings on framework-specific attributes. (See: Why need the spec plugins?)
Warned by character-reference rule
character-reference prompts you to escape characters even when they are technically valid. This may cause false positives with some template engines. You can disable the rule for affected areas, or report the situation as an Issue.
Warned by require-accessible-name rule
You can provide accessible names using aria-label, but you SHOULD NOT use it as your first solution. The accessible name computation is complex — the preferred source depends on the element:
| Element | Preferred name source | Using aria-label |
|---|---|---|
a | Content | Permit (NOT RECOMMENDED) |
img | The alt attribute | Permit (NOT RECOMMENDED) |
h1–h6 | Content | Permit (NOT RECOMMENDED) |
button | Content | Permit (NOT RECOMMENDED) |
input | The label element | Permit (NOT RECOMMENDED) |
select | The label element | Permit (NOT RECOMMENDED) |
textarea | The label element | Permit (NOT RECOMMENDED) |
I don't know how to fix the code that gave me the warning
The immediate action is to add elements and attributes that are required, and remove those that are unnecessary. If this requires style changes, modify the style — there are no specification rules about how elements should be styled, but there are rules about which elements and attributes are valid.
Knowledge of HTML is essential for making informed fix decisions. We recommend learning by studying the elements and attributes that triggered warnings. The HTML Standard is the authoritative source, but MDN's HTML guide is a good starting point.
It's not incorrect, but I get a warning
This is likely a bug, but please check the following first:
- Are you using a syntax with known limitations? (#240)
If the issue is related to unsupported syntax, please disable the rule partially for now. If not, please report it to us.
I want to know more
Does Markuplint work as an accessibility checker?
Markuplint checks accessibility issues that can be found statically in the code:
- Whether HTML, SVG, and WAI-ARIA comply with specifications
- Missing accessible names, incorrect ARIA roles, improper landmark structure
- Project-specific rules you configure
Accessibility also involves information architecture, visual design, and content strategy — areas beyond what static code analysis can cover. But Markuplint takes on the code-related aspects, freeing you to focus on the rest.
What makes it different from HTMLHint and eslint-plugin-jsx-a11y?
Key differences:
- Structure validation — Markuplint checks parent-child relationships of elements (content models)
- Powerful selectors — Fine-grained rule control using CSS Selectors, extended pseudo-classes, and regex
- Broad syntax support — 17+ syntaxes beyond HTML and JSX
HTMLHint and eslint-plugin-jsx-a11y each have unique capabilities too. They can all be used together.
Is JSON output supported?
Yes. Use the --format option in the CLI:
markuplint "**/*.html" --format JSON
Can it be used for E2E testing?
Yes. While Markuplint is primarily designed for component-level checking, it can also lint rendered HTML. Since Markuplint uses its own HTML parser (not a browser's), HTML must be passed as a string. For E2E testing, you can pass either the server-returned HTML string or the browser's DOM tree (serialized to a string) to the Markuplint API.
The glob format does not work as expected in the CLI
Some shells expand glob patterns before passing them to the CLI. Always enclose globs in quotation marks:
# ❌ Shell may expand this before Markuplint sees it
markuplint **/*.html
# ✅ Passed as a string to Markuplint for internal glob processing
markuplint "**/*.html"
I found a bug
Thank you for using Markuplint. First, you can immediately disable the rule that's causing the issue. If the problem only affects certain elements, disable the rule partially using selectors so the rest of your code stays protected.
Then please create an issue to let us know. You can also reach out on X (Twitter) — we actively monitor mentions of "Markuplint".