Back to compare picker

Redo vs Undo vs Draft state vs Command palette

Use redo when users may undo too far and need to reapply the latest undone operation in the same reversible edit stack.

Decision dimensions

Dimension RedoUndoDraft stateCommand palette
UI or UX UX - Forward edit-history replayUX - Post-action recovery behaviorUI + UX - Unpublished object version lifecycleUI + UX - Modal command surface
UI guidance Show Redo as a visible command, menu item, toolbar control, or command-palette row whose enabled state matches the current redo stack.Show a named recovery affordance after the completed action, such as Undo delete for a specific task, near the result or in a consistent status region.Label the current version explicitly as Draft, Unpublished changes, Published, Active, Locked, or Unavailable, and place that label near the object title, list row, editor header, and publish actions.Render a compact dialog-like command surface with a search input, current scope, typed command mode, active result, command metadata, and empty state.
UX guidance Use redo to let users recover from undoing too far without recreating work by hand.Let users move quickly through frequent reversible actions, then recover from mistakes after seeing the result.Use draft state when users need to pause work on an object, return later, and decide whether to publish, activate, discard, or keep editing an unpublished version.Accelerate expert navigation and repeated actions across a large product while preserving ordinary navigation for novice and low-frequency users.
Good UI A document toolbar shows Undo and Redo; Redo is disabled until the user undoes Move Summary before Risk.Deleting Quarterly report removes it from the list and shows a recovery panel saying Quarterly report deleted with an Undo task button.A knowledge article header says Draft saved today, shows the currently published title, and offers Resume draft, Compare with published, Discard draft, and Publish.Centered command surface with input, shortcut hint, scope chip, grouped commands, command type labels, and a visible active row.
Bad UI A Redo button remains enabled after the user types new content, with no indication that the old future branch is gone.A tiny x removes an item with no object-specific recovery label.An editor opens directly into draft text but the header only says Saved, so users cannot tell whether viewers see the changes.Huge branded modal that buries the input below decorative content.
Good UX A user moves a heading, chooses Undo, sees Redo move heading become available, and redoes the same move against the same document outline.Undo restores the deleted task to the list and reports Quarterly report restored.A user opens a published article that has an unpublished version, chooses Resume draft, reviews a change summary, publishes, and sees the page become visible to viewers.Keyboard shortcut or visible trigger opens the palette, focus lands in the command input, arrows move the active row, and Enter activates the highlighted safe command.
Bad UX A user undoes a move, selects a different heading, presses Redo, and the product applies the old operation to the wrong target.A second delete overwrites the first recoverable item without explaining which action Undo affects.A user closes an editor after seeing Saved, later discovers the page was never published, and cannot find the draft in the content list.Palette is the only way to reach important navigation.
Best fit Users perform reversible sequences of edits and can undo too far.The action is common and mistakes are likely.Users create or edit objects that should not become visible, active, submitted, or externally effective until a later action.Users need to traverse a broad product surface quickly.
Avoid when The system cannot reliably store or replay the undone operation.The action has external side effects that cannot be recalled.The change is a small one-field edit that should be saved or canceled immediately.The app has only a few obvious actions.
Required state No-redo state before any undo has happened.Normal state before the user action.Published or active state with no draft.Closed state with discoverable trigger.
Accessibility burden Expose Redo as a named button, menu item, or command row when editing commands are visible.Make the undo control keyboard reachable and programmatically identifiable.Expose Draft, Published, Unpublished changes, Locked, and Unavailable as text in the page title area and list rows, not only by color or icon.Use dialog semantics with a clear name and modal behavior when the rest of the page is inert.
Common misuse Leaving redo enabled after a new edit invalidates the undone future.Offering undo for an action that cannot actually be reversed.Using Saved to mean both saved draft and published content.Hiding basic navigation behind a keyboard-only palette.

Redo

UI or UX
UX - Forward edit-history replay
UI guidance
Show Redo as a visible command, menu item, toolbar control, or command-palette row whose enabled state matches the current redo stack.
UX guidance
Use redo to let users recover from undoing too far without recreating work by hand.
Good UI
A document toolbar shows Undo and Redo; Redo is disabled until the user undoes Move Summary before Risk.
Bad UI
A Redo button remains enabled after the user types new content, with no indication that the old future branch is gone.
Good UX
A user moves a heading, chooses Undo, sees Redo move heading become available, and redoes the same move against the same document outline.
Bad UX
A user undoes a move, selects a different heading, presses Redo, and the product applies the old operation to the wrong target.
Best fit
Users perform reversible sequences of edits and can undo too far.
Avoid when
The system cannot reliably store or replay the undone operation.
Required state
No-redo state before any undo has happened.
Accessibility burden
Expose Redo as a named button, menu item, or command row when editing commands are visible.
Common misuse
Leaving redo enabled after a new edit invalidates the undone future.

Undo

UI or UX
UX - Post-action recovery behavior
UI guidance
Show a named recovery affordance after the completed action, such as Undo delete for a specific task, near the result or in a consistent status region.
UX guidance
Let users move quickly through frequent reversible actions, then recover from mistakes after seeing the result.
Good UI
Deleting Quarterly report removes it from the list and shows a recovery panel saying Quarterly report deleted with an Undo task button.
Bad UI
A tiny x removes an item with no object-specific recovery label.
Good UX
Undo restores the deleted task to the list and reports Quarterly report restored.
Bad UX
A second delete overwrites the first recoverable item without explaining which action Undo affects.
Best fit
The action is common and mistakes are likely.
Avoid when
The action has external side effects that cannot be recalled.
Required state
Normal state before the user action.
Accessibility burden
Make the undo control keyboard reachable and programmatically identifiable.
Common misuse
Offering undo for an action that cannot actually be reversed.

Draft state

UI or UX
UI + UX - Unpublished object version lifecycle
UI guidance
Label the current version explicitly as Draft, Unpublished changes, Published, Active, Locked, or Unavailable, and place that label near the object title, list row, editor header, and publish actions.
UX guidance
Use draft state when users need to pause work on an object, return later, and decide whether to publish, activate, discard, or keep editing an unpublished version.
Good UI
A knowledge article header says Draft saved today, shows the currently published title, and offers Resume draft, Compare with published, Discard draft, and Publish.
Bad UI
An editor opens directly into draft text but the header only says Saved, so users cannot tell whether viewers see the changes.
Good UX
A user opens a published article that has an unpublished version, chooses Resume draft, reviews a change summary, publishes, and sees the page become visible to viewers.
Bad UX
A user closes an editor after seeing Saved, later discovers the page was never published, and cannot find the draft in the content list.
Best fit
Users create or edit objects that should not become visible, active, submitted, or externally effective until a later action.
Avoid when
The change is a small one-field edit that should be saved or canceled immediately.
Required state
Published or active state with no draft.
Accessibility burden
Expose Draft, Published, Unpublished changes, Locked, and Unavailable as text in the page title area and list rows, not only by color or icon.
Common misuse
Using Saved to mean both saved draft and published content.

Command palette

UI or UX
UI + UX - Modal command surface
UI guidance
Render a compact dialog-like command surface with a search input, current scope, typed command mode, active result, command metadata, and empty state.
UX guidance
Accelerate expert navigation and repeated actions across a large product while preserving ordinary navigation for novice and low-frequency users.
Good UI
Centered command surface with input, shortcut hint, scope chip, grouped commands, command type labels, and a visible active row.
Bad UI
Huge branded modal that buries the input below decorative content.
Good UX
Keyboard shortcut or visible trigger opens the palette, focus lands in the command input, arrows move the active row, and Enter activates the highlighted safe command.
Bad UX
Palette is the only way to reach important navigation.
Best fit
Users need to traverse a broad product surface quickly.
Avoid when
The app has only a few obvious actions.
Required state
Closed state with discoverable trigger.
Accessibility burden
Use dialog semantics with a clear name and modal behavior when the rest of the page is inert.
Common misuse
Hiding basic navigation behind a keyboard-only palette.
Decision rules
  • Use redo when users may undo too far and need to reapply the latest undone operation in the same reversible edit stack.
  • Use undo when the immediate need is to reverse a completed operation and preserve the prior state.
  • Use draft state when the issue is a durable unpublished object version that can be resumed, compared, discarded, or published across sessions.
  • Use command palette when the interface needs a keyboard-first way to discover or run commands; the palette may expose Redo but does not define what can be redone.
  • Redo must be unavailable before any undo, available after undo, and cleared or explicitly branched when the user makes a new edit that invalidates the undone future.
  • Redo should reapply the exact operation to the same target, selection, order, and scope unless the product can clearly resolve a changed target.
  • Do not offer redo for irreversible external effects, production side effects, or stale operations whose original target has changed beyond reliable replay.
  • Expose visible menu, toolbar, or status availability in addition to keyboard shortcuts so users can discover whether redo is currently possible.
  • If the product stores durable history across reloads, show that history explicitly; do not imply ordinary redo survives route changes, collaboration conflicts, or session resets unless it truly does.
  • When redo appears inside a command palette, the command row must reflect the same enabled, disabled, and target-specific state as the rest of the interface.
Inspect live examples
Failure modes
  • Redo remains enabled after a new edit creates a different history branch and replays stale work over the user's current state.
  • Redo replays an operation against the wrong object because selection or target identity changed after undo.
  • Only a hidden keyboard shortcut supports redo, leaving mouse, touch, and assistive technology users without a discoverable path.
  • The interface labels redo generically even though several undone operations or scopes exist.
  • Redo is treated like restore from trash or draft recovery, causing users to expect long-lived recovery beyond the edit stack.
  • A command palette lists Redo as executable even when the editor's history stack says no redo is available.