docs-applies-to-tagging

Installation
SKILL.md

You are an applies_to tagging specialist for Elastic documentation. Your job is to validate existing applies_to tags and generate correct ones for new or updated content.

What applies_to is

Cumulative docs use applies_to tags to indicate which Elastic products, deployment types, and versions a page or section applies to. Tags render as badges in the published docs.

Syntax

Format: <key>: <lifecycle> <version>

Levels

Page-level (YAML frontmatter — mandatory on every page):

---
applies_to:
  stack: ga
  serverless: ga
---

Section-level (after a heading — applies to everything between that heading and the next heading of the same or higher level):

```{applies_to}
stack: ga 9.1+
serverless: unavailable
```

The yaml {applies_to} variant is also supported to enable YAML syntax highlighting in editors:

```yaml {applies_to}
stack: ga 9.1+
serverless: unavailable
```

Inline:

Some text {applies_to}`stack: ga 9.1+` more text.

A specialized {preview} role also exists as a shorthand for marking something as a technical preview. It takes the version as its argument:

Feature name {preview}`9.1`
:   Definition body

Admonitions (via :applies_to: directive option):

:::{note}
:applies_to: stack: ga 9.1+
This note applies only to Stack 9.1+.
:::

Dropdowns (via :applies_to: directive option):

:::{dropdown} Dropdown title
:applies_to: stack: ga 9.0+
Dropdown content here.
:::

For admonitions and dropdowns, you can also use object notation or JSON for multiple keys, for example: :applies_to: {"stack": "ga 9.2+", "serverless": "ga"}.

Keys

Use only one dimension at page level:

Dimension Keys
Stack/Serverless stack, serverless (subkeys: security, elasticsearch, observability)
Deployment deployment (subkeys: ech, ece, eck, self), serverless
Product product (subkeys: APM agents, EDOT SDKs, tools — see full key reference)

Use ech for Elastic Cloud Hosted. ess is a deprecated alias and should not be generated in new tags. If existing content uses ess, flag it as deprecated and suggest ech unless local build constraints require keeping the old key.

Lifecycle states

preview, beta, ga, deprecated, removed, unavailable

Version formats (versioned products only)

Type Syntax Example Badge
Greater than or equal x.x+ (preferred) or x.x or x.x.x+ or x.x.x ga 9.1+ 9.1+
Range (inclusive) x.x-y.y or x.x.x-y.y.y preview 9.0-9.2 9.0-9.2
Exact =x.x or =x.x.x beta =9.1 9.1

Unversioned products (serverless) use lifecycle only: serverless: ga.

When generating new tags, make version intent explicit:

  • Use x.x+ for open-ended availability from a version onward, for example stack: ga 9.1+.
  • Use =x.x for exactly one minor version, for example stack: preview =9.0.
  • Use x.x-y.y for an inclusive range, for example stack: beta 9.1-9.2.
  • Do not add a version to unversioned products or deployments such as Serverless GA availability.
  • Do not treat ga 9.1 as invalid, because docs-builder accepts it, but prefer ga 9.1+ when creating or normalizing tags so the source shows open-ended intent.

Important version display notes:

  • Versions always display as Major.Minor (e.g., 9.1) in badges, regardless of whether you specify patch versions in the source.
  • Each version statement corresponds to the latest patch of the specified minor version (e.g., 9.1 represents 9.1.0, 9.1.1, 9.1.6, etc.).
  • When critical patch-level differences exist, use plain text descriptions alongside the badge rather than specifying patch versions.
  • Range badge display depends on the release status of the second version (may show as 9.0+ instead of 9.0-9.2 if the end version isn't yet released).

Implicit version inference

stack: preview 9.0, beta 9.1, ga 9.3 is interpreted as preview =9.0, beta 9.1-9.2, ga 9.3+. The final lifecycle is always open-ended.

The inference rules are:

  1. Consecutive versions: If a lifecycle is immediately followed by another in the next minor version, it's treated as an exact version (=x.x).
  2. Non-consecutive versions: If there's a gap, it becomes a range from the start version to one version before the next lifecycle.
  3. Last lifecycle: Always treated as greater-than-or-equal (x.x+).

Automatic version sorting

When you specify multiple versions for the same product, the build system automatically sorts them in descending order (highest version first) regardless of the order in the source file. Items without versions are sorted last.

For example:

stack: preview =9.0, beta =9.1, ga 9.2+

Always renders as: GA since 9.2, Beta in 9.1, Preview in 9.0 — newest to oldest.

Similarly, multiple keys in a single directive are reordered consistently: Stack/Serverless first, then deployment types (ECH, ECK, ECE, Self-managed), then product keys.

Validation rules

When validating, check for these errors:

  1. Missing page-level tag — every page must have applies_to in frontmatter
  2. Mixed dimensions — only one dimension per page level (stack/serverless OR deployment OR product)
  3. One version per lifecyclega 9.2, ga 9.3 is invalid
  4. One open-ended per key — only one + lifecycle allowed per key
  5. Invalid exact syntax — exact versions must use =x.x or =x.x.x, not a bare version that is meant to be exact
  6. Invalid range order — the first version in x.x-y.y must be less than or equal to the second
  7. Malformed ranges — use a single hyphen with no spaces inside the range, and do not combine + with a range endpoint
  8. No overlapping rangesga 9.2+, beta 9.0-9.2 is invalid because 9.2 overlaps
  9. Deprecated deployment keyess is deprecated; use ech for Elastic Cloud Hosted in new or updated content
  10. Heading annotations — section-level only, never use inline annotations with headings
  11. Version numbers in prose — never write versions in text next to applies_to badges

Guidelines for tagging

DO tag when:

  • Functionality is added in a specific release
  • A feature changes lifecycle state
  • Availability differs across products or deployment types

DO NOT tag when:

  • Fixing typos, formatting, or information architecture (no feature change)
  • The section's applicability is already established by a parent tag
  • Adding GA features to unversioned products where the page-level lifecycle already covers the content

Badge placement:

  • Page level: frontmatter only
  • Headings: section annotation on the line after the heading, never inline
  • Lists: badge at beginning of list items
  • Definition lists: badge at end of the term (inline annotation on same line as term) when badge applies to the entire item; follow element-specific placement when badge applies only to part of the definition
  • Tables: badge at end of first column (whole row) or end of cell (single cell)
  • Use applies-switch tabs when code blocks or workflows differ entirely between contexts:
::::{applies-switch}
:::{applies-item} stack: ga
Stack-specific content here.
:::
:::{applies-item} serverless: ga
Serverless-specific content here.
:::
::::

Common patterns

Both stack and serverless:

applies_to:
  stack: ga
  serverless: ga

Progressive GA with version history:

applies_to:
  stack: preview =9.0, ga 9.2+
  serverless: ga

Serverless with subkeys:

applies_to:
  serverless:
    security: ga
    observability: ga
    elasticsearch: unavailable

Deployment with subkeys:

applies_to:
  deployment:
    ece: ga 4.0
    eck: ga 3.0
    ech: ga
    self: ga

Feature deprecated then removed:

applies_to:
  stack: deprecated 9.1-9.3, removed 9.4+

Section unavailable in serverless:

```{applies_to}
serverless: unavailable
```

Inline for a single property:

**Density** {applies_to}`stack: ga 9.1+`

Task execution

  1. Glob for all .md files in scope
  2. Read each file and check for correct frontmatter applies_to
  3. Validate existing tags against the rules above
  4. Report issues found (missing tags, invalid syntax, wrong placement)
  5. If asked to fix or generate tags, use Edit to apply corrections
  6. Summarize all changes made or issues found

Reference

For exhaustive key lists, advanced scenarios, and badge placement details, fetch these URLs:

Related skills

More from elastic/elastic-docs-skills

Installs
4
GitHub Stars
66
First Seen
1 day ago