Skip to content
| Marketplace
Sign in
Visual Studio Code>Linters>vastlint — VAST XML ValidatorNew to Visual Studio Code? Get it now.
vastlint — VAST XML Validator

vastlint — VAST XML Validator

aleksuix

|
27 installs
| (2) | Free
Inline linting for IAB VAST 2.0–4.3 ad tags with clean Problems entries, concise hovers, fix guidance, and docs links. Works in XML, HTML, JS templates, and more. 121 rules. CLI backend with WASM fallback.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

vastlint - VAST XML Validator for VS Code

Inline linting for IAB VAST ad tags directly in VS Code. Supports VAST 2.0 through 4.3 with clean Problems entries, concise hovers, fix guidance, and direct docs links. Web validator and full documentation: vastlint.org

Features

  • Inline squiggles — red (error), yellow (warning), blue (info) underlines on the offending XML tag
  • Hover tooltips — concise issue summary, fix guidance, and a direct rule docs link
  • Problems panel — clean issue titles with file, line, and column; click to jump directly to the tag
  • Any file type — works in .xml, .html, .js, .ts, .json, templates — anywhere <VAST> appears
  • Multi-block — validates every <VAST>...</VAST> block in a file independently
  • Live as you type — re-validates 500 ms after you stop typing, and on every save
  • CLI backend — uses the vastlint CLI binary when available, falls back to WASM in-process
  • 121 rules across VAST 2.0–4.3 plus SIMID validation: required fields, schema structure, URLs, deprecations, and CTV/SSAI advisories

How it looks

Hover over a squiggled tag:

🔴 <InLine> is missing required <AdSystem>

✅ Fix: Add `<AdSystem>` inside `<InLine>`, e.g. `<AdSystem>My Ad Server</AdSystem>`.

Docs: vastlint.org/docs/rules/VAST-2.0-inline-adsystem

Settings

Setting Default Description
vastlint.enable true Enable/disable diagnostics
vastlint.minSeverity "info" Minimum severity to show: "error", "warning", or "info"
vastlint.ruleOverrides {} Per-rule severity overrides (WASM fallback only — use vastlint.toml in CLI mode)
vastlint.templateIgnoreRegex "" Regex for template expressions to blank out before validation (e.g. \$\{[^}]+\})
vastlint.vastVersion "" Force a VAST version ("2.0", "3.0", "4.0", "4.1", "4.2", "4.3") — blank = auto-detect
vastlint.cliPath "vastlint" Path to the vastlint CLI binary. Falls back to common install locations, then WASM.

Example: silence HTTP warnings

// .vscode/settings.json
{
  "vastlint.ruleOverrides": {
    "VAST-2.0-mediafile-https": "off",
    "VAST-2.0-tracking-https": "off"
  }
}

Example: only show errors

{
  "vastlint.minSeverity": "error"
}

Rules

vastlint checks 121 rules across:

  • Required elements and attributes (VAST 2.0–4.3)
  • Value formats (durations, URLs, enums)
  • Schema conformance (unknown elements/attributes)
  • Deprecation warnings (VPAID, Flash, Survey, conditionalAd)
  • SIMID interactive creative validation (<InteractiveCreativeFile apiFramework="SIMID">)
  • Security (HTTP vs HTTPS)
  • CTV/SSAI best practices (Mezzanine, AdServingId)
  • Structural issues (wrapper depth, ad sequence, duplicate impressions)

Full rule reference with examples and fix guidance: vastlint.org/docs/rules

Canonical rule catalog:

  • RULES.md in this repo
  • vastlint.org/docs/rules for the hosted per-rule pages
All 121 rules

VAST 2.0

Rule Severity Description
VAST-2.0-root-element error Root element must be <VAST>
VAST-2.0-root-version error <VAST> must have a version attribute
VAST-2.0-root-version-value warning version attribute must be a recognised version string
VAST-2.0-root-has-ad-or-error error <VAST> must contain at least one <Ad> or <Error>
VAST-2.0-ad-has-inline-or-wrapper error Each <Ad> must contain exactly one <InLine> or <Wrapper>
VAST-2.0-inline-adsystem error <InLine> must contain <AdSystem>
VAST-2.0-inline-adtitle error <InLine> must contain <AdTitle>
VAST-2.0-inline-impression error <InLine> must contain at least one <Impression>
VAST-2.0-inline-creatives error <InLine> must contain <Creatives> with at least one <Creative>
VAST-2.0-linear-duration error <Linear> must contain <Duration>
VAST-2.0-linear-mediafiles error <Linear> must contain <MediaFiles> with at least one <MediaFile>
VAST-2.0-mediafile-delivery error <MediaFile> must have a delivery attribute
VAST-2.0-mediafile-delivery-enum error delivery must be "progressive" or "streaming"
VAST-2.0-mediafile-type error <MediaFile> must have a type attribute
VAST-2.0-mediafile-dimensions error <MediaFile> must have width and height attributes
VAST-2.0-mediafile-https warning MediaFile URL uses HTTP instead of HTTPS
VAST-2.0-wrapper-adsystem error <Wrapper> must contain <AdSystem>
VAST-2.0-wrapper-impression error <Wrapper> must contain at least one <Impression>
VAST-2.0-wrapper-vastadtaguri error <Wrapper> must contain <VASTAdTagURI>
VAST-2.0-wrapper-depth error Wrapper chain depth exceeds the configured maximum
VAST-2.0-companion-resource error <Companion> must contain at least one resource element
VAST-2.0-companion-dimensions warning <Companion> missing width or height
VAST-2.0-nonlinear-resource error <NonLinear> must contain at least one resource element
VAST-2.0-nonlinear-dimensions warning <NonLinear> missing width or height
VAST-2.0-ad-sequence warning Inconsistent use of sequence attribute across <Ad> elements
VAST-2.0-text-only-element error Text-only element contains a child element
VAST-2.0-unknown-attribute warning Attribute not defined in the VAST spec
VAST-2.0-inline-unknown-child error <InLine> contains an unrecognised child element
VAST-2.0-wrapper-unknown-child error <Wrapper> contains an unrecognised child element
VAST-2.0-creatives-unknown-child error <Creatives> may only contain <Creative> elements
VAST-2.0-creative-unknown-child error <Creative> contains an unrecognised child element
VAST-2.0-linear-unknown-child error <Linear> contains an unrecognised child element
VAST-2.0-trackingevents-unknown-child error <TrackingEvents> may only contain <Tracking> elements
VAST-2.0-mediafiles-unknown-child error <MediaFiles> contains an unrecognised child element
VAST-2.0-extensions-unknown-child error <Extensions> may only contain <Extension> elements
VAST-2.0-videoclicks-unknown-child error <VideoClicks> contains an unrecognised child element
VAST-2.0-nonlinearads-unknown-child error <NonLinearAds> contains an unrecognised child element
VAST-2.0-nonlinear-unknown-child error <NonLinear> contains an unrecognised child element
VAST-2.0-companionads-unknown-child error <CompanionAds> may only contain <Companion> elements
VAST-2.0-companion-unknown-child error <Companion> contains an unrecognised child element
VAST-2.0-creativeextensions-unknown-child error <CreativeExtensions> may only contain <CreativeExtension> elements
VAST-2.0-extension-misplaced-element warning <Extension> contains an element that has a dedicated location in the VAST spec
VAST-2.0-extension-cdata warning <Extension> leaf text payload with XML-sensitive characters should be wrapped in CDATA so JSON blobs and URL-rich vendor data do not rely on fragile XML escaping
VAST-2.0-creative-extension-misplaced-element warning <CreativeExtension> contains an element that has a dedicated location in the VAST spec
VAST-2.0-creative-extension-cdata warning <CreativeExtension> leaf text payload with XML-sensitive characters should be wrapped in CDATA so JSON blobs and URL-rich vendor data do not rely on fragile XML escaping
VAST-2.0-tracking-https warning Tracking or click URL uses HTTP instead of HTTPS
VAST-2.0-url-cdata warning URI value is not wrapped in CDATA
VAST-2.0-url-empty error URL field is empty
VAST-2.0-url-invalid warning URL field does not appear to be a valid URI
VAST-2.0-parse-error error XML parse error — document may be malformed
VAST-2.0-version-mismatch warning Declared version does not match structural signals
VAST-2.0-duplicate-impression warning Duplicate <Impression> URL within the same <Ad>
VAST-2.0-flash-mediafile warning Flash MediaFile type is no longer supported
VAST-2.0-linear-tracking-quartiles warning <Linear> has no standard quartile tracking events — measurement system receives no signal
VAST-2.0-duration-format error Duration value does not match HH:MM:SS[.mmm] format

VAST 3.0

Rule Severity Description
VAST-3.0-progress-offset error <Tracking event="progress"> requires an offset attribute
VAST-3.0-progress-offset-format warning Progress offset does not match the required format
VAST-3.0-skipoffset-format warning skipoffset does not match HH:MM:SS[.mmm] or n% format
VAST-3.0-skip-event-no-skipoffset warning skip tracking event present but <Linear> has no skipoffset attribute
VAST-3.0-minmaxbitrate-pair error <MediaFile> must have both minBitrate and maxBitrate or neither
VAST-3.0-bitrate-conflict warning <MediaFile> has both bitrate and minBitrate/maxBitrate
VAST-3.0-icon-attrs warning <Icon> missing recommended attributes (program/width/height/position)
VAST-3.0-icon-program error <Icon> missing required program attribute
VAST-3.0-icon-width error <Icon> missing required width attribute
VAST-3.0-icon-height error <Icon> missing required height attribute
VAST-3.0-icon-xposition error <Icon> missing required xPosition attribute
VAST-3.0-icon-yposition error <Icon> missing required yPosition attribute
VAST-3.0-icon-resource error <Icon> must have at least one resource element
VAST-3.0-icons-unknown-child error <Icons> may only contain <Icon> elements
VAST-3.0-icon-unknown-child error <Icon> contains an unrecognised child element
VAST-3.0-iconclicks-unknown-child error <IconClicks> contains an unrecognised child element
VAST-3.0-pricing-model error <Pricing> missing required model attribute
VAST-3.0-pricing-currency error <Pricing> missing required currency attribute
VAST-3.0-pricing-model-case warning model value should be lowercase (cpm/cpc/cpe/cpv)
VAST-3.0-pricing-currency-format warning currency attribute must be a 3-letter ISO 4217 code
VAST-3.0-companion-required-attr warning <CompanionAds> required attribute must be all, any, or none

VAST 4.0

Rule Severity Description
VAST-4.0-wrapper-root-error warning <VAST> root contains both <Ad> and <Error> elements
VAST-4.0-universaladid-present error <Creative> must contain <UniversalAdId> (VAST 4.0+)
VAST-4.0-universaladid-idregistry error <UniversalAdId> must have an idRegistry attribute
VAST-4.0-universaladid-idvalue error <UniversalAdId> missing required idValue attribute (VAST 4.0)
VAST-4.0-category-authority error <Category> missing required authority attribute
VAST-4.0-companion-clicktracking-id error <CompanionClickTracking> missing required id attribute
VAST-4.0-wrapper-clickthrough warning <ClickThrough> inside Wrapper <VideoClicks> was removed in VAST 4.0
VAST-4.0-conditionalad warning conditionalAd attribute is deprecated as of VAST 4.1
VAST-4.0-tracking-event-removed warning Tracking events removed in VAST 4.0
VAST-4.0-mediafile-apiframework info apiFramework on <MediaFile> is deprecated — use <InteractiveCreativeFile>
VAST-4.0-interactive-creative-no-api warning <InteractiveCreativeFile> should have an apiFramework attribute

VAST 4.1

Rule Severity Description
VAST-4.1-adservingid-present error <InLine> must contain <AdServingId> (VAST 4.1+)
VAST-4.1-ad-serving-id-empty warning <AdServingId> is present but empty
VAST-4.1-universaladid-idvalue-removed warning idValue attribute was removed in VAST 4.1
VAST-4.1-universaladid-content error <UniversalAdId> must have text content in VAST 4.1+
VAST-4.1-adtype-value warning adType must be video, audio, or hybrid
VAST-4.1-survey-deprecated warning <Survey> is deprecated as of VAST 4.1
VAST-4.1-vpaid-apiframework warning VPAID is deprecated as of VAST 4.1
VAST-4.1-vpaid-in-interactive-context warning VPAID <MediaFile> alongside <InteractiveCreativeFile> — unsupported in CTV
VAST-4.1-interactive-creative-type warning <InteractiveCreativeFile> should have a type attribute
VAST-4.1-mezzanine-delivery error <Mezzanine> missing required delivery attribute
VAST-4.1-mezzanine-type error <Mezzanine> missing required type attribute
VAST-4.1-mezzanine-width error <Mezzanine> missing required width attribute
VAST-4.1-mezzanine-height error <Mezzanine> missing required height attribute
VAST-4.1-mezzanine-recommended info No <Mezzanine> present — tag may be rejected in CTV/SSAI contexts
VAST-4.1-verification-vendor error <Verification> missing required vendor attribute
VAST-4.1-verification-no-resource warning <Verification> should have <JavaScriptResource> or <ExecutableResource>
VAST-4.1-js-resource-apiframework error <JavaScriptResource> missing required apiFramework attribute
VAST-4.1-exec-resource-apiframework error <ExecutableResource> missing required apiFramework attribute
VAST-4.1-exec-resource-type error <ExecutableResource> missing required type attribute
VAST-4.1-blockedadcategories-no-authority warning <BlockedAdCategories> should have an authority attribute
VAST-4.1-tracking-event-value error event attribute not in the valid set for this VAST version
VAST-4.1-companion-renderingmode-value warning renderingMode must be default, end-card, or concurrent

VAST 4.2

Rule Severity Description
VAST-4.2-closedcaptionfiles-unknown-child error <ClosedCaptionFiles> may only contain <ClosedCaptionFile> elements
VAST-4.2-icon-fallback-image-width-height warning <IconClickFallbackImage> should have width and height attributes

VAST 4.3

Rule Severity Description
VAST-4.3-js-resource-browser-optional warning <JavaScriptResource> should have a browserOptional attribute

SIMID rules

Rule Severity Description
SIMID-1.0-simid-type-required error <InteractiveCreativeFile apiFramework="SIMID"> must have type="text/html"
SIMID-1.0-simid-url-empty error <InteractiveCreativeFile apiFramework="SIMID"> must contain a non-empty URL
SIMID-1.0-simid-url-https error <InteractiveCreativeFile apiFramework="SIMID"> URL must use HTTPS
SIMID-1.0-simid-variable-duration-value warning <InteractiveCreativeFile> variableDuration attribute must be "true" when present
SIMID-1.0-simid-mediafile-required error Linear SIMID ad must include a video/audio <MediaFile> alongside the interactive creative
SIMID-1.1-nonlinear-simid-no-iframe error <NonLinear apiFramework="SIMID"> must contain an <IFrameResource>
SIMID-1.1-iframe-simid-type-required warning <IFrameResource> in SIMID <NonLinear> should have type="text/html"
SIMID-1.1-iframe-simid-url-empty error <IFrameResource> in SIMID <NonLinear> must contain a non-empty URL
SIMID-1.1-iframe-simid-url-https error <IFrameResource> in SIMID <NonLinear> URL must use HTTPS

Requirements

No external tools needed - the validator runs entirely in-process via WebAssembly.

License

Apache-2.0 - see LICENSE

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft