@svg-toolkit/svg-lint
v0.2.0
Published
Structural linter for SVG documents.
Maintainers
Readme
@svg-toolkit/svg-lint
Structural linter for SVG documents.
npm install -g @svg-toolkit/svg-lint
svg-lint icon.svg
npx -p @svg-toolkit/svg-lint svg-lint icon.svgThere is no unscoped svg-lint package: npm's typosquat filter refuses the name
because it's "too similar" to the unrelated existing svglint. Fucking great,
thanks npm. The binary is still called plain svg-lint, and it also ships in
the @kjanat/svg-toolkit bundle.
The package resolves a prebuilt native binary for your platform via
optionalDependencies — no postinstall step, no network access at runtime.
On Linux, the binary is picked by the host's libc: musl hosts get the musl
build, glibc hosts get the glibc build. npm, pnpm and yarn honour the
libc field and install only the right one; bun and deno install both, so
detection settles it at launch. Set SVG_LIBC=musl or SVG_LIBC=glibc to
override if detection is ever wrong.
Rules, suppression comments, and JSON output: https://github.com/kjanat/svg#readme
Rules
| Code | Severity | Description |
| ---------------------------- | -------- | ------------------------------------------------- |
| UnknownElement | Warning | Element not in the SVG spec |
| InvalidChild | Warning | Child in void element or wrong-category nesting |
| DuplicateId | Warning | Duplicate id attribute value |
| UnknownAttribute | Warning | Attribute not recognized for a given element |
| DeprecatedElement | Warning | Element marked deprecated in the SVG/BCD catalog |
| DeprecatedAttribute | Warning | Attribute marked deprecated (including xlink:*) |
| ExperimentalElement | Hint | Element marked experimental |
| ExperimentalAttribute | Hint | Attribute marked experimental |
| MissingReferenceDefinition | Warning | url(#id) target has no matching definition |
| UnusedSuppression | Warning | Suppression comment did not suppress anything |
API
use svg_lint::{lint, lint_tree, LintOverrides, CompatFlags};
// Parse and lint in one call
let diagnostics = lint(source);
// Lint an already-parsed tree
let diagnostics = lint_tree(source, &tree, None);
// Lint with runtime compat overrides (e.g. from live BCD data)
let overrides = LintOverrides {
elements: [("font".into(), CompatFlags { deprecated: true, experimental: false })]
.into_iter().collect(),
attributes: Default::default(),
};
let diagnostics = lint_tree(source, &tree, Some(&overrides));Each diagnostic includes a DiagnosticCode, Severity, message, and source
location (byte range + row/col).
Suppression Comments
<!-- svg-lint-disable-next-line DuplicateId -->
<rect id="dup" />
<!-- svg-lint-disable MissingReferenceDefinition -->