Skip to content
Back to skills

Add Availability Badge

ASecurity

Add or resolve an `availability` frontmatter field for a docs.getdbt.com page, so the page renders the correct applicability badge (where a feature runs, what plan/access it needs, which dbt engine version). Use when asked to add an availability badge, mark a page as platform/local/Enterprise-only, or figure out what availability value a feature needs.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 17, 2026
developmentrustgo

Works with

  • vscode
  • cli

Security analysis

A100/100

Scanned October 17, 2026

npx -y skills add karanmrn/karanagentskills --skill add-availability-badge --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Add Availability Badge?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Add Availability Badge
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/karanmrn-add-availability-badge/badge)](https://www.skillsdirectory.com/skills/karanmrn-add-availability-badge)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: add-availability-badge
description: Add or resolve an `availability` frontmatter field for a docs.getdbt.com page, so the page renders the correct applicability badge (where a feature runs, what plan/access it needs, which dbt engine version). Use when asked to add an availability badge, mark a page as platform/local/Enterprise-only, or figure out what availability value a feature needs.
---

Add the `availability` field to a page's frontmatter so it renders the right
applicability badge (engine, surface, access/plan). Source of truth:
[Notion: How to use and add applicability badges](https://app.notion.com/p/dbtlabs/How-to-use-and-add-applicability-badges-frontmatter-3a7bb38ebda780809baed78e3e893f51)
and `src/components/availability/availabilityPresets.js` (paths below are
relative to `website/`, the repo root for this project). The spec is inlined
below — re-fetching the Notion doc on every run wastes tokens on a stable,
code-backed spec. If something here looks wrong, check
`src/components/availability/availabilityPresets.js` first — it's the actual
render logic — before trusting the Notion doc or this file.

## Workflow

1. **Get the input**, either form:
   - A **preset name** directly ("use `platform_login`") — validate it exists
     in the preset table below, insert as-is.
   - A **plain-language description** ("this is an Enterprise+ platform
     feature", "CLI-only, no platform") — resolve it to a preset if one
     fits, otherwise build a custom object from the field reference. Ask a
     clarifying question ONLY when genuinely ambiguous — for example, if the
     feature skips a plan tier (needs `plans` array, not `minPlan`), or you
     can't tell if login is required outside the platform surface.
2. **Only add to pages that don't already have `availability`.** This skill
   inserts; it doesn't audit or fix existing badges. If asked to fix an
   existing one, say so and stop — that's out of scope.
3. **Insert as a top-level `availability` key** in the page's YAML
   frontmatter block — same level as `title`, `description`, etc.
4. **State what it renders as** (badge text) so the user can sanity-check
   without opening a browser — see rendering rules below.

## Step 1: try a preset first

Presets bundle `surface`/`access`/`engine` into one name. Confirmed current
list from `availabilityPresets.js`:

| Preset | Resolves to | Renders as |
|---|---|---|
| `all_users` | `access: free` (no surface/engine) | *(no badge — applies to everyone)* |
| `platform_login` | `surface: platform`, `access: login_required` | "dbt platform" (login segment suppressed on platform) |
| `local_free` | `surface: local`, `access: free` | "Local development" |
| `local_all` | `surface: local_development` | "Local development" |
| `everywhere_usage` | `access: usage_based` | "Usage-based" (+ "Login required" if not platform) |

```yaml
---
title: Managing environments
availability: platform_login
---
```

**Preset vs. location name:** a bare location value (`local`,
`local_development`, `platform`) used alone as `availability: local` is
valid too — it sets `surface` only, nothing else. Don't use bare `platform`
alone, though — it renders identically to `platform_login` but doesn't
document the login requirement for future editors. Always use the
`platform_login` preset instead of typing `platform` by itself.

## Step 2: custom config, if no preset fits

```yaml
---
availability:
  surface: platform        # local | local_development | platform | omit = every surface
  access: paid_plan        # free | login_required | usage_based | paid_plan | omit = every access level
  minPlan: enterprise      # only with access: paid_plan. starter | enterprise | enterprise_plus
  # plans: [starter, enterprise_plus]  # alternative to minPlan — use ONE, never both
  engine: v2                # v1 | v2 | omit (or "all") = both engines
---
```

Only include fields the page actually needs — every field is independently
optional.

### Field reference

| Field | Values | Notes |
|---|---|---|
| `surface` | `local`, `local_development`, `platform` | Omit = every surface. `local` = CLI-only, no platform equivalent. `local_development` = local tool that also works with platform-connected projects. |
| `access` | `free`, `login_required`, `usage_based`, `paid_plan` | Omit = every access level. `free` only renders a badge segment when paired with `surface: platform` (elsewhere free is assumed, no badge). `login_required` is hidden on `surface: platform` (login is already implied). |
| `minPlan` | `starter`, `enterprise`, `enterprise_plus` | Only with `access: paid_plan`. Expands **upward** — `minPlan: starter` renders "Starter, Enterprise, Enterprise+". Pick the lowest tier that has the feature. |
| `plans` | array, e.g. `[starter, enterprise_plus]` | Alternative to `minPlan`, for the rare case that skips a tier in the ladder. Use one or the other, never both. |
| `engine` | `v1`, `v2` | Omit or `all` = both. `v1` = dbt Core 1.x. `v2` = dbt Fusion engine 2.0+. |

### Rendering rules (so you can predict the output without a browser)

- Badge segment order is always **engine → surface → access**, e.g.
  "Available in v2 \| dbt platform \| Enterprise, Enterprise+" — regardless
  of the order fields appear in the YAML.
  `\|` denotes a rendered separator in the badge text, not `<VersionBlock>` or `<Tabs>` — don't insert literal `<VersionBlock>`/`<Tabs>` for this.
- `paid_plan` always spells out every tier `minPlan` expands to (e.g.
  "Enterprise, Enterprise+"), never just the highest or lowest one.
- Tooltip field labels: `engine` → "Version", `surface` → "Where",
  `access` → "Access".

## Examples

**CLI-only, dbt Core 1.x only:**
```yaml
availability:
  surface: local
  engine: v1
```
Renders: "Available in v1 \| Local development"

**Applies to literally everyone:**
```yaml
availability: all_users
```
Renders: nothing — intentional, a badge here would be noise.

**Enterprise+ platform feature:**
```yaml
availability:
  surface: platform
  access: paid_plan
  minPlan: enterprise
```
Renders: "dbt platform \| Enterprise, Enterprise+"

**Billed on usage, not plan-gated:**
```yaml
availability:
  surface: platform
  access: usage_based
```
Renders: "dbt platform \| Usage-based"

**Skips a tier (Starter and Enterprise+, not plain Enterprise):**
```yaml
availability:
  surface: platform
  access: paid_plan
  plans: [starter, enterprise_plus]
```
Renders: "dbt platform \| Starter, Enterprise+"

**Fusion-only, also works on platform-connected projects:**
```yaml
availability:
  surface: local_development
  engine: v2
```
Renders: "Available in v2 \| Local development"

## Gotchas

- Never set both `minPlan` and `plans` — pick one.
- Never write `availability: platform` bare — use the `platform_login`
  preset so the login requirement is documented for future editors, even
  though both render identically.
- A preset name can never collide with a location name (`local`,
  `local_development`, `platform`) — the renderer tells them apart by
  checking if the value matches a known surface first. If you invent a new
  preset name later, don't name it after a surface value.
- Out of scope for this skill: fixing/auditing `availability` blocks that
  already exist on a page. Flag it to the user and stop instead of editing.
- The `.vscode/docs.code-snippets` autocomplete snippet mentioned in the
  Notion doc (from PR #9677) wasn't found in this checkout as of this
  writing — don't assume it's present; check before telling a user to rely
  on it.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.