Mutations
Buoy gates every write through a confirmation modal. The defaults are deliberately strict: by default, you must type the object name before the Confirm button activates, and destructive actions render with a red header. You can dial that down per your taste in Settings.
This page covers the actions that change cluster state. Read-only behavior (logs, YAML viewing, scheduling explanations) is documented in detail-views.md. For plugin-authored actions, see plugins/actions.md.
Contents
- Confirmation Modes
- Single-Object Actions
- Bulk Actions in Tables
- Editing Labels and Annotations
- Editing YAML
- Apply YAML
- Impersonation
Confirmation Modes
Set the mode under Settings, Mutation Confirmations.
| Mode | Behavior |
|---|---|
| Phrase (default) | When a phrase is required (typically the object name), the Confirm button stays disabled until you type it verbatim. Otherwise Confirm is immediately enabled, but the modal still appears for review. |
| Yes / No | Phrase typing is suppressed. Confirm is immediately enabled. The modal still appears so you can review diffs, drain options, scale inputs, and so on. |
| No Confirmation | Mutations fire immediately with no dialog. The modal only renders if an error needs to be surfaced for retry. |
Auth failures (403 Forbidden, 401 Unauthorized) surface as banners. With the “Impersonate on Auth Failure” toggle enabled, Buoy prompts you to activate /as with a recent or new identity. The original action is not retried automatically; you re-run it under the new identity.
Single-Object Actions
Every detail view has an Actions menu (kebab, also reachable with m). The available actions depend on the kind. Each opens a confirmation modal; the phrase to type is the object’s metadata.name.
| Action | Applies to | Effect |
|---|---|---|
| Edit YAML | Anything with a YAML tab | Switches the YAML tab into edit mode. See Editing YAML. |
| Delete | Anything | DELETE with default propagation. Objects with finalizers may take a while to disappear. |
| Scale | Deployment, StatefulSet, ReplicaSet | Strategic-merge patch on spec.replicas. The dialog shows current and target. |
| Restart | Deployment, StatefulSet, DaemonSet | Stamps kubectl.kubernetes.io/restartedAt on spec.template.metadata.annotations, the same trigger kubectl rollout restart uses. |
| Evict | Pod | Sends a policy/v1 Eviction. The apiserver returns 429 when a PodDisruptionBudget would be violated. |
| Cordon, Uncordon | Node | Toggles spec.unschedulable. The button label flips depending on current state. |
| Drain | Node | Cordons the node, then evicts eligible pods via the Eviction API. The dialog offers options for ignoring DaemonSet pods, deleting emptyDir data, forcing (allow standalone pods), overriding the grace period, and running as a dry run. The result is a per-pod table of evicted, skipped, and failed entries. |
| Forward Port | Pod, Service, Deployment, StatefulSet, ReplicaSet, DaemonSet | Opens the port-forward modal. Forwards appear in the header chip and the /pf manager. |
| Submit, Resubmit | Workflow, WorkflowTemplate, ClusterWorkflowTemplate, CronWorkflow | Opens the workflow submission modal. For templates, the new Workflow references the template via spec.workflowTemplateRef. For CronWorkflow, the spec is copied from spec.workflowSpec. For Workflow (“Resubmit”), the full spec is copied and shutdown is cleared. |
| Sync, Refresh, Hard Refresh, Terminate Sync | ArgoCD Application | See integrations/argocd.md. |
| Refresh | ArgoCD ApplicationSet | Sets argocd.argoproj.io/application-set-refresh: true. |
| Restart, Pause, Resume, Promote, Promote Full, Abort, Retry | Argo Rollout | See integrations/argo-rollouts.md. |
| Stop, Terminate, Retry | Argo Workflow | See integrations/argo-workflows.md. |
| Rollback, Uninstall | Helm release | See integrations/helm.md. |
Plugins can contribute additional actions to the same menu; they appear under their plugin name.
Bulk Actions in Tables
Any list view supports multi-select. Enter select mode by clicking a row checkbox, pressing x on the cursor row, or pressing a to select every visible row. Shift-click toggles a contiguous range from the last clicked checkbox. The header checkbox toggles every row in the current sort and filter.
While a selection is active, a sticky bar appears above the table with an Actions dropdown and a clear button. Press m to open the menu from the keyboard. The available actions depend on the resolved kind.
| Action | Applies to | Effect |
|---|---|---|
| Delete | Any kind | Bulk delete. Errors surface per row in the result. |
| Edit Labels | Any kind | See Editing Labels and Annotations. |
| Edit Annotations | Any kind | Same syntax and semantics as label editing. |
| Restart | Deployment, StatefulSet, DaemonSet | Bulk rollout restart. |
| Cordon, Uncordon, Drain | Node | Bulk node operations. Drain runs the same per-pod classification as the single-object form. |
| Open Dashboard | Any kind with a configured Prometheus dashboard | Opens a dashboard scoped to the selection. |
The confirm phrase for bulk actions is the verb plus the selection, for example DELETE 3 pods or RESTART 2 deployments. Errors are collected per row and shown inline; partial failures keep the modal open so you can retry or cancel.
Plugins can register bulk actions that obey the same selection model.
Editing Labels and Annotations
The Edit Labels and Edit Annotations dialogs accept kubectl-style syntax in a single text area. Each entry is space- or newline-separated. Blank lines and lines starting with # are ignored.
| Form | Effect |
|---|---|
key=value | Upsert the key with the given value. |
key- | Delete the key. |
Worked example:
team=platform
owner=alice
deprecated-
# Annotations follow the same rules.
example.com/last-touched=2026-05-26
The patch is a JSON merge patch on metadata.labels or metadata.annotations, so null-valued keys are removed and absent keys are left alone.
Editing YAML
Open a detail view’s YAML tab. Click Edit, or press the Edit button in the tab strip. The CodeMirror editor switches to writable mode and tracks your draft.
When you click Apply, Buoy shows a confirmation modal with a unified diff between the original and your draft, generated with createTwoFilesPatch. The phrase to type is the object name. On confirm, the draft is sent via server-side apply with the field manager buoy and force: true, so any conflicting fields managed by other actors are taken over.
Errors surface inline per document, prefixed with kind/namespace/name:. The modal stays open so you can fix and retry without losing your draft. Toggling Edit off discards the draft; the editor’s readOnly mode hot-swaps via Compartments so search panel and scroll position survive the toggle.
Apply YAML
The Apply YAML action takes a multi-document YAML blob and applies each document with server-side apply. It is reachable from the kebab menu on a list view and from any plugin or slash command that calls into it. The result is a table of per-document outcomes: kind, namespace, name, ok-or-error.
Apply uses the same field manager (buoy) as the detail-view YAML editor, so the two are interchangeable.
Impersonation
/as activates Kubernetes impersonation. Once active, every mutation sends Impersonate-User, Impersonate-Group, and Impersonate-Uid headers. The whole app paints a red border so impersonated sessions are visually distinct.
/as alice
/as alice --groups platform,sre
/as alice --groups platform --uid 1234
/as # clear
/as - # clear
Sessions auto-expire after 10 minutes of idleness or 60 minutes from activation, whichever comes first. Keystrokes and mouse activity reset the idle timer. See contexts.md for details.