Proposal v0.1
| Signal | When | Where | Default | With reduced motion |
|---|---|---|---|---|
| Flash | A copy that worked | Over the copied region, or over the trigger when there is none | The selection colour grows stronger, then fades out over about 200 ms, once per copy3 | Appears and disappears with no fade |
| Shake | A failed copy | The focused element | A side-to-side movement, 400 ms in the demo | A static outline |
| Alert sound | A failed copy, if the user has the sound on | No place on screen | The system alert sound. Classic Mac OS never played it on a disabled command4 | Unchanged |
1. Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 1412 when, and only when, they appear in all capitals, as shown here.
This spec uses these terms.
- Copy. A user command that puts content on the clipboard without changing what is on screen. It covers keyboard shortcuts, menu items such as "Copy link", and copy buttons.
- Copied region. The on-screen area that shows the copied content, such as highlighted text, a selected file icon, or the link a "Copy link" item copies. Some copies have none.
- Trigger. The control or menu item that issued a copy.
- Failed copy. A copy command that put nothing on the clipboard.
- Confirmation. Copy feedback saying the copy succeeded.
- Failure signal. Copy feedback saying the copy failed.
- Flash. A brief highlight drawn over the copied region, or over the trigger when there is no copied region.
- Shake. A brief side-to-side movement of the focused element.
2. Confirmation
When a copy succeeds and has a copied region, the system MUST flash the copied region. For a file or an image, the flash MUST cover its bounds, such as the file's icon or the image's frame.
The flash MUST NOT change the selection. What was selected before the copy stays selected after it.
The system MUST flash once per copy. It MUST NOT flash more than three times in any one second, which keeps it within WCAG 2.3.13.
The flash SHOULD strengthen the selection colour and then fade out over about 200 ms.
3. Copies with no copied region
A "Copy link" menu item copies a link that is on screen, so the system MUST flash the link. A copy button often copies content that isn't on screen, so there is no copied region to flash. When a successful copy has no copied region, the system MUST flash the trigger instead.
Some copies have neither, such as a script or a terminal command that writes to the clipboard. For these the system MAY show nothing. A guess at what to flash could point at the wrong thing, so version 0.1 leaves this case open.
4. Failure signal
When a copy fails, the system MUST shake the focused element. If the user has the system alert sound turned on, the system MUST also play it. The shake is the signal you see, and the sound is the one that works when you aren't looking.
The sound is new behaviour. Classic Mac OS never played it on a disabled command. For a disabled menu item, MenuKey returned 0 and did nothing else4.
5. Reduced motion
When the user has turned on the system's reduced motion setting, the flash MUST appear and disappear with no fade. The shake MUST become a static outline around the focused element. The outline MUST look different from the focus indicator, because the element it marks already has focus. The alert sound doesn't change.
6. No preview
The confirmation MUST NOT show the copied content anywhere it wasn't already on screen. The flash marks the copied region in place, so a screen share or a recording shows nothing new.
Android does the opposite. Its overlay previews up to 500 characters of copied text, and closes after 6 seconds56.
7. Ownership
The operating system owns confirmation. On a system that meets this spec, an app SHOULD NOT show its own confirmation, such as a "Copied!" toast, for a copy the system confirms. Two confirmations for one copy tell the user nothing new.
Android 13 set the same rule. Google "strongly recommend[s] removing toasts or snackbars shown after an in-app copy"5.
Screen reader announcements are a separate channel, and this rule doesn't touch them. A screen reader MAY keep announcing copies, because a flash doesn't reach someone who can't see it.
8. Copies made by page code
Section 7 doesn't cover a copy a web page makes through the Clipboard API. The OS sees the write, but not which button caused it. So in this version the page keeps its own confirmation.
The system MUST still flash when it can find a copied region or a trigger for the write. It MUST NOT skip the flash to avoid showing two confirmations.
The Clipboard API asks browsers for no feedback on a write7. A browser flash on the element the user clicked would close this gap, and that change belongs in a W3C filing. Version 0.1 leaves it open.
Sources
The research notes behind this version are in research/precedent.md and research/menu-title-lead.md, as of release v1.0.0. Sources were read on 25 and 27 September 2026.
- Bradner, Scott. Key words for use in RFCs to Indicate Requirement Levels. RFC 2119, BCP 14, IETF, March 1997. https://www.rfc-editor.org/rfc/rfc2119
- Leiba, Barry. Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. RFC 8174, BCP 14, IETF, May 2017. https://www.rfc-editor.org/rfc/rfc8174
- Web Content Accessibility Guidelines (WCAG) 2.2. W3C Recommendation. Success criterion 2.3.1, Three Flashes or Below Threshold. https://www.w3.org/TR/WCAG22/#three-flashes-or-below-threshold
- Inside Macintosh, Volume I. Apple Computer, Addison-Wesley, 1985. Page I-358, MenuKey. https://vintageapple.org/inside_o/pdf/Inside_Macintosh_Volume_I_1985.pdf
- Copy and paste. Android Developers, Views guide. Last updated 2026-09-22. https://developer.android.com/develop/ui/views/touch-and-input/copy-paste
- AOSP
platform/frameworks/baseat tag android-16.0.0_r4, commit 45034f0.ClipboardOverlayView.javaL305 to 308 andClipboardOverlayController.javaL86, inpackages/SystemUI/src/com/android/systemui/clipboardoverlay/. https://android.googlesource.com/platform/frameworks/base/+/45034f0663f960d9ee5fb0a101a4732b71f6e2f4/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ - Clipboard API and events. W3C Working Draft, 24 June 2026. https://www.w3.org/TR/clipboard-apis/