Skip to main content
Tags are labels you attach to apps so you can group them by team, component, lifecycle stage, or whatever you like. An app can carry several. Tags only organize: they do not change how an app runs, restrict access, or gate a deploy.

Rules

  • A tag name is lowercase and is either a key or a key:value pair, such as backend, team:payments or tier:edge.
  • The key is up to 32 characters (letters, digits, ., _, -) and the value up to 64 (the same set plus /). Both must start with a letter or digit. Anything else is rejected with a 400.
  • Tag names are unique across the control plane.
  • An app can carry at most 20 tags. Set APP_MAX_TAGS_PER_APP to change that. Tags created before these rules existed keep working.
  • Tags apply to apps only, not databases.

Create and delete tags

Deleting a tag removes it from every app it was on.

Attach and detach

Attaching by name creates the tag if it does not exist yet, so you rarely need tags create first.
Use the tag control on an app’s page to add a tag or remove one with the chip’s close button.
If two requests race to create the same tag name, the one that loses attaches the tag the other created.

Filter by tag

In the dashboard, every row on the Apps page (/apps) shows its tag chips. Click a chip to filter the list to apps with that tag. The filter bar shows the active filter and a clear button. GET /api/v1/apps accepts these query parameters: The X-Total-Count response header carries the match count before paging. GET /api/v1/apps-summary takes the same filters and returns running, deploying, failing and stopped counts. Tags also select targets for levelrail-cli apps bulk. See Managing apps at scale.

API reference

Next steps

Managing apps at scale

Filters, bulk actions and summaries across many apps.

Projects and organizations

A structural alternative to tags, with shared environment variables.
Last modified on October 12, 2026