Kinds & classification
Every clip gets a kind the moment you copy it. Kinds decide how a clip is shown, what you can do with it, and how it's pasted. It all happens locally in well under a millisecond, using rules, not AI and not the cloud.
The eight kinds
Web addresses: https://…, http://…, ftp://…, www.…, and bare domains with a path like github.com/user/repo. Shown with their site name.
Snippets, commands, JSON, diffs, markup, SQL and config files, tagged with a language when one is clear.
Everything else: sentences, notes, lists, messages.
A single email address (or mailto: link) or phone number.
#rgb, #rrggbb (with or without alpha), rgb()/rgba() and hsl()/hsla() values, shown with a swatch.
Files copied in your file manager, and copied paths such as C:\Users\me\report.pdf, \\server\share\…, ~/notes.md or file:///….
Screenshots and copied images, saved as PNG with a thumbnail for the timeline.
One-time codes, API keys, tokens, private keys and card numbers. Masked and short-lived; see below.
How a clip is classified
Images and copied files are recognised from the clipboard format itself. For text, checks run in this order and the first match wins:
- Sensitive: does it look like a secret?
- Link: a single web address with no spaces.
- Contact: exactly one email address or phone number.
- Color: a single CSS colour value.
- File: a single file or folder path.
- Code: code-like structure or a known command.
- Text: anything else.
Only the first 20,000 characters are examined, so even a huge paste is classified instantly. Text clips larger than 2 MB aren't stored.
Code and languages
A clip counts as code when it's a fenced Markdown block, valid JSON, a diff, an HTML or XML fragment, SQL, YAML or TOML, a shell or PowerShell command (git, cargo, docker, kubectl, prompts like $ and PS C:\>…), or lines whose syntax reads as code rather than prose. A language is then guessed from fingerprints, and only shown when one language is clearly ahead:
Rust · Python · JavaScript · TypeScript · Go · Java · Kotlin · C · C++ · C# · CSS · HTML · XML · SQL · Shell · PowerShell · JSON · YAML · TOML · Diff
The language drives syntax highlighting in the preview and the language tag on As Markdown code block.
Things it deliberately doesn't misread
| You copy | Kind | Why |
|---|---|---|
#123 | Text | Mixed-digit 3–4 character hashes read as issue or PR numbers. #333 is still a grey. |
192.168.1.1, 10.0.26300 | Text | IP addresses and version numbers aren't phone numbers. |
2026-11-01 | Text | Dates aren't phone numbers either. |
1761998112 | Text | A 10-digit number starting with 1 is usually a Unix timestamp. |
$ 5.00 | Text | A price, not a shell prompt. |
2024, 4821 | Text | One-time codes are 6–8 digits; shorter numbers are usually years or counts. |
Sensitive clips
These are detected by shape:
- One-time codes: 6–8 digits, or
123 456/123-456. - Card numbers: 13–19 digits that pass the Luhn checksum and start like a real card.
- API keys and tokens: AWS, GitHub, GitLab, Slack, Stripe, OpenAI/Anthropic-style
sk-…, Google, npm, Hugging Face and SendGrid key formats, and JSON Web Tokens. - Private keys: anything containing a
-----BEGIN … PRIVATE KEY-----block.
A sensitive clip is then:
- masked as
••••••in the timeline, the picker and the tray; - kept out of search: it's never added to the search index;
- never synced to your other devices;
- deleted automatically after 1 hour by default (5 minutes to 7 days in Settings → Privacy).
You can still copy or paste it while it exists. Copies from password managers are never stored at all; see Password managers.
Copying the same thing twice
Copying something you already have doesn't create a duplicate: the existing clip moves to the top and its copy count goes up (shown as ×4 in the dashboard).