ZemDomu
Semantic HTML linting for a cleaner, more accessible web
ZemDomu User Guide
ZemDomu is a Visual Studio Code extension that provides semantic HTML linting. It helps catch common accessibility and structural issues in HTML, JSX and TSX files.
Features
- Warns when
<li> is not inside <ul> or <ol>
- Ensures correct heading order (
<h1> → <h2> → <h3>…)
- Flags missing
alt attributes on <img>
- Ensures
<button> elements have accessible text
- Requires
<iframe> tags to include a title
- Enforces
lang on the <html> element
- Checks
<input type="image"> for alt text
- Detects form fields missing
aria-label or <label for="">
- Warns when multiple elements share the same
id
- Highlights empty
<strong>, <em>, and similar tags
- Verifies
<a> tags have both href and link text
- Confirms
<section> includes a heading
- Warns if
<nav> contains no links
- Works with
.html, .jsx and .tsx files
- Caches results so subsequent saves only re-check the current file
- Quick fixes for simple issues like missing
alt attributes
Why ZemDomu?
Most HTML linters focus on syntax or style. ZemDomu goes deeper by catching subtle issues that affect:
- Accessibility — screen reader compatibility
- SEO — logical heading structure
- Semantic structure — clean, meaningful markup
It runs automatically on save and integrates into the Problems tab for a seamless workflow.
Getting Started
Install
Install directly from the Visual Studio Code Marketplace.
Or search for ZemDomu in the VS Code Extensions view.
Usage
- Open an
.html, .jsx, or .tsx file.
- Save the file.
- Semantic issues appear in the Problems tab (
Ctrl+Shift+M).
Configuration
ZemDomu can be configured through VS Code settings. Search for ZemDomu in the Settings UI or edit settings.json directly:
zemdomu.run – control when linting runs (onSave, onType, manual, or disabled)
zemdomu.crossComponentAnalysis – analyze JSX components across files
zemdomu.rules.* – enable or disable individual semantic rules
Inline Rule Controls
You can selectively disable ZemDomu using special comments:
<!-- zemdomu-disable-next --> – skip linting for the next element
<!-- zemdomu-disable --> – start a block where linting is disabled
<!-- zemdomu-enable --> – re-enable linting after a disabled block
For JSX/TSX files use the JSX comment syntax, e.g. {/* zemdomu-disable */}.
License
MIT © 2025 Zacharias Eryd Berlin