| name | webspec-index |
| description | Use webspec-index to query WHATWG, W3C, IETF and TC39 web specifications from the command line |
webspec-index
Query WHATWG, W3C, IETF and TC39 web specifications from the command line.
Use webspec-index whenever you need to understand what a web spec says — algorithm steps, section content, cross-references, or whether a spec anchor exists. Specs are fetched and cached locally on first use.
Available specs
Assume that all specs from WHATWG, W3C, IETF and TC39 are indexed. If in doubt, run webspec-index specs to list all spec names and their base URLs.
Installation
If webspec-index is not already available in your environment, you can install it via cargo:
cargo binstall webspec-index
cargo install webspec-index
Commands
Always put the section identifier in quotes to avoid shell interpretation of #.
See webspec-index --help for full command list and options.
Look up a spec section
webspec-index query 'HTML#navigate'
webspec-index query 'DOM#concept-tree'
webspec-index query 'CSS-GRID#grid-container'
webspec-index query 'https://html.spec.whatwg.org/#navigate'
webspec-index query 'DOM#concept-tree'
webspec-index query "RFC9000#section-22"
webspec-index query "draft-ietf-tsvwg-sctp-dtls-chunk#name-security-considerations"
webspec-index query 'https://w3c.github.io/webappsec-permissions-policy/#permissions-policy-header'
Returns the section's title, type (heading/algorithm/definition), full content as markdown, navigation tree (parent/prev/next/children), and cross-references. This is the primary command — use it to read what a spec section says.
Use --format markdown for human-readable output, or default --format json for structured data.
For non-hardcoded specs, URL queries are accepted for allowlisted domains (*.spec.whatwg.org, drafts.csswg.org, w3c.github.io, wicg.github.io, webaudio.github.io, tc39.es, w3.org/TR/*, and webassembly.github.io).
Search across specs
webspec-index search "tree order"
webspec-index search "navigate" --spec HTML --limit 5
Full-text search with snippets. Use --spec to narrow to one spec.
Check if a section exists
webspec-index exists 'HTML#navigate'
Exit code 0 = found, 1 = not found. Use this to validate anchor names before referencing them.
Find anchors by pattern
webspec-index anchors "*-tree" --spec DOM
webspec-index anchors "concept-*" --spec HTML
webspec-index anchors "dom-*assign*"
Glob matching (* wildcard). Useful when you know part of an anchor name but not the exact id.
List all sections in a spec
webspec-index list DOM
Returns all heading-level sections with their anchors, titles, types, and depths.
Cross-references
webspec-index refs 'HTML#navigate' --direction incoming
webspec-index refs 'HTML#navigate' --direction outgoing
webspec-index refs 'HTML#navigate'
webspec-index refs 'Window.navigation' --limit 5
Shows which sections reference this one (incoming), which sections this one references (outgoing), or both (default). Target can be exact (SPEC#anchor or full URL) or shorthand (Interface.member) resolved heuristically against currently indexed sections. Use --limit to cap results when using shorthand queries.
WHATWG PR previews
webspec-index query 'HTML#navigate' --pr 12345
webspec-index query 'HTML#navigate' --pr 12345 --diff --format markdown
webspec-index query 'HTML#navigate' --pr 12345 --force-update
webspec-index exists 'HTML#navigate' --pr 12345
webspec-index list HTML --pr 12345
webspec-index refs 'HTML#navigate' --pr 12345
webspec-index search 'OpaqueRange' --spec HTML --pr 12345
webspec-index anchors '*opaquerange*' --spec HTML --pr 12345
Query spec sections as modified by an open WHATWG PR. Previews are lazily fetched from whatpr.org on first use and cached for 24h.
--pr N: query the spec as it would look after PR N is merged. Sections not modified by the PR fall back to the merge base.
--diff: show a section-level diff between the PR and its merge base. Lists added/modified sections with unified diffs.
--force-update: re-fetch the PR preview even if recently cached (use after the PR is updated).
Manage cached PR data with clear-pr:
webspec-index clear-pr
webspec-index clear-pr --spec HTML --pr 12345
webspec-index clear-pr --all
Update specs
webspec-index update
webspec-index update --spec HTML
webspec-index update --force
Fetches latest spec versions. Uses 24h cache unless --force is given. Specs are auto-fetched on first query, so you rarely need this.
Specs are checked on a 24h cadence; re-indexing happens only when fetched HTML content changed.
Graph traversal
webspec-index graph 'HTML#navigate' --direction outgoing --max-depth 2
webspec-index graph 'HTML#navigate' --graph-format mermaid
webspec-index graph 'HTML#navigate' --graph-format dot
webspec-index graph 'HTML#navigate' --same-spec-only
webspec-index graph 'HTML#navigate' --include '*concept-*' --exclude 're:^URL#'
Builds a cross-reference graph rooted at a section. Supports JSON (default), Markdown, Mermaid, and Graphviz DOT output.
Use --include and --exclude to filter node ids (SPEC#anchor) by wildcard patterns (*, ?) or regex (re:<pattern>).
Query dedicated WebIDL definitions
webspec-index idl 'HTML#dom-window-navigation'
webspec-index idl 'Window.navigation'
webspec-index idl 'Window.open()'
webspec-index idl 'navigation' --spec HTML --limit 5
Queries structured WebIDL definitions directly. Supports exact anchors (SPEC#anchor or URL) and canonical names (Interface.member, Interface.method()).
Use this first when the task is about API shape or IDL ownership, then use refs to see algorithm usage.
Usage patterns for Gecko development
Understanding what you're implementing
When working on a bug that references a spec algorithm:
webspec-index query 'HTML#navigate' --format markdown
webspec-index refs 'HTML#navigate' --direction outgoing
webspec-index query 'INFRA#ordered-set'
Finding the right spec section
When you see a spec URL in code comments (e.g., https://html.spec.whatwg.org/#navigate), or a step comment like // Step 3.2, query the section to understand the algorithm:
webspec-index query 'https://html.spec.whatwg.org/#navigate'
When you know a concept but not its exact anchor:
webspec-index search "tree order" --spec DOM
webspec-index anchors "*tree*order*" --spec DOM
Verifying spec anchors
Before adding a spec URL to a code comment, verify the anchor exists:
webspec-index exists 'HTML#navigate' && echo "valid"
Understanding cross-spec dependencies
To see what other specs depend on a concept you're changing:
webspec-index refs 'DOM#concept-tree' --direction incoming
Tracing IDL API usage in algorithms
When implementing or reviewing a DOM API in Gecko:
webspec-index idl 'Window.navigation' --format markdown
webspec-index refs 'Window.navigation' --direction incoming
Finding where Gecko implements a spec section
When the user asks where a spec algorithm is implemented in Gecko or SpiderMonkey, query
the spec section first, then pass the url field from the response to searchfox-cli:
webspec-index query 'HTML#navigate' --format json
searchfox-cli --spec-refs 'https://html.spec.whatwg.org/#navigate'
Always do this when the user asks questions like "where is X implemented", "which file handles Y",
or "show me the Gecko code for Z". The url field in the query response is the value to pass
to --spec-refs — no manual URL construction needed.
Implementing a feature from a spec PR
When the bug references a spec PR that hasn't landed yet:
webspec-index query 'HTML#navigate' --pr 12345 --diff --format markdown
webspec-index query 'HTML#navigate' --pr 12345 --format markdown
webspec-index refs 'HTML#navigate' --pr 12345 --direction outgoing