Trust center

Your clipboard stays on your PC. Here is how — and where that ends.

Every statement on this page was checked against the source code, and the code that enforces it is named next to it. Where ClipVault cannot protect you, this page says so.

Checked against ClipVault 0.1.0 · page built 2026-09-15

Principles

Four promises the code enforces

Not policies someone has to remember: each one is held in place by a check or a test that fails the build.

Network

Clip contents cannot leave the PC

Only one file in the program, net.py, may open a connection, and its one function, get_json(url, allowed), has no argument that could carry a request body. There is no code path that uploads a clip, because there is nothing to upload it with.

Enforced by scripts/check_network.py on every push: the build fails if any other module imports a networking library, or if the gateway gains a data, body, payload, content or text argument.

Telemetry

No telemetry, not even as an option

The program has no usage statistics, crash reporting or analytics. A telemetry field survives in the settings file, but nothing reads it to send anything, and Config.normalize() forces it to false every time the settings are loaded or saved, whatever the file says.

src/clipvault/config.py — every load and save passes through normalize().

Updates

The update check and news are opt-in

Both are off in a new installation, and ClipVault asks on first run. Say no and it never opens a connection. Say yes and once a day it makes a single HTTPS GET for a small version file — no body, no cookies, no identifier; the only header it adds names ClipVault and its version. Plain HTTP and redirects are refused, and an answer larger than 64 KB is thrown away.

net.get_json, updates.fetch. An organisation can switch both off with the DisableUpdateCheck and DisablePromos policies.

Update link

“Get the new version” can only lead to the official site

The version file is something the program fetched, not something it trusts. Its link is kept only if it is a path on the ClipVault site or an https address on the same host, so a tampered file cannot send you to a look-alike download. The version number is accepted only as digits and dots, so it cannot carry a message either.

updates.official_link, updates.clean_version — applied to the cached copy too.

Data flow

Where a clip goes, step by step

Everything in the upper box happens on your PC, under your Windows account. The lower box is the program's only network path, and it has no access to your clips.

ClipVault data flow A copied clip passes the capture gate, which drops clips marked do-not-record or copied from excluded apps. Detection looks for credentials; a credential is encrypted with Windows DPAPI, and is not stored at all if encryption fails. Clips are stored in a local SQLite database in %LOCALAPPDATA%\ClipVault whose folder permissions are locked to your account. A clip leaves storage only to be pasted into a confirmed foreground window, and a pasted credential is then wiped from the clipboard. Separately, and only if you opt in, the program sends one HTTPS GET for a version file; no clip data is on that path.
This PC · your Windows account
1ClipboardYou copy text, an image or files in any app.
2Capture gateExclusion markers · excluded apps · organisation policy
3DetectionLooks for credentials in the first 1,000,000 characters
4DPAPI encryptionCredentials only. If encryption fails, the clip is not stored.
other clips
Never storedMarked “do not record” by its app, or copied from an excluded app
5Local databaseSQLite in %LOCALAPPDATA%\ClipVault · folder permissions locked to you
6Popup and pasteKeys go only to a window confirmed to be in front
7Wipe after pasteA pasted credential is cleared after 30 s, unless you copied something new
No path from your clips to the network
The only network path · off unless you opt in
Update checkOnce a day, only if you allowed it
HTTPS GET · no body · no cookies
release.json on the ClipVault siteThe latest version, a notes link and optional news — the same answer for everyone
Sent: the address of that file and a User-Agent naming ClipVault and its version, from your IP address. Never sent: clips, history, settings or any identifier.
ClipVault data flow A copied clip passes the capture gate, which drops clips marked do-not-record or copied from excluded apps. Detection looks for credentials; a credential is encrypted with Windows DPAPI, and is not stored at all if encryption fails. Clips are stored in a local SQLite database in %LOCALAPPDATA%\ClipVault whose folder permissions are locked to your account. A clip leaves storage only to be pasted into a confirmed foreground window, and a pasted credential is then wiped from the clipboard. Separately, and only if you opt in, the program sends one HTTPS GET for a version file; no clip data is on that path.
This PC · your Windows account
1ClipboardYou copy text, an image or files in any app.
2Capture gateExclusion markers · excluded apps · organisation policy
3DetectionLooks for credentials in the first 1,000,000 characters
4DPAPI encryptionCredentials only. If encryption fails, the clip is not stored.
5Local databaseSQLite in %LOCALAPPDATA%\ClipVault · folder permissions locked to you
6Popup and pasteKeys go only to a window confirmed to be in front
7Wipe after pasteA pasted credential is cleared after 30 s, unless you copied something new
No path from your clips to the network
The only network path · off unless you opt in
Update checkOnce a day, only if you allowed it
HTTPS GET · no body · no cookies
release.json on the ClipVault siteThe latest version, a notes link and optional news — the same answer for everyone
Sent: the address of that file and a User-Agent naming ClipVault and its version, from your IP address. Never sent: clips, history, settings or any identifier.

Gate. A clip its app marked “do not record” — the standard markers KeePass, 1Password and Bitwarden set — is not even read. A clip from an excluded app is dropped before it is stored; the default list covers password managers and Korean banking security modules. Organisation policy can add apps and turn image or file capture off. win/clipboard.read, Vault._gate

Fail-closed encryption. A credential is encrypted with Windows DPAPI and its text removed, so it never reaches the search index. If DPAPI is unavailable or fails, the clip is dropped rather than kept in the clear. Vault._protect

Storage. On first run the folder stops inheriting permissions and your account is granted access explicitly, so a change to a parent folder cannot widen it. Credentials are de-duplicated with a keyed hash, so the database holds no guessable fingerprint of the value. win/acl.harden_once, Vault._dedupe_key

Paste. ClipVault returns focus to the window you came from and checks again that it is in front right before sending Ctrl+V. If it cannot confirm that, it sends nothing and the clip waits on the clipboard for you. A credential it puts on the clipboard carries the “do not record” markers itself, so Windows clipboard history and other managers skip it. actions.deliver, win/exclusions.exclusion_payloads

Wipe. After you paste a credential, the clipboard is emptied after 30 seconds by default — but only if nothing new has been copied since. actions.clear_if_unchanged

Network. The request is made by a function that takes an address and your consent and nothing else, so no clip data is within its reach. It refuses plain HTTP and redirects, and discards answers over 64 KB. net.py, updates.fetch

Threat model

What it protects against, and what it does not

A local program can make some attacks harder. It cannot make a compromised Windows account safe, and claiming otherwise would teach you to rely on the wrong thing.

Protects against

  • A copied database file or backup. Credentials in it are DPAPI ciphertext tied to your Windows account, and their fingerprints are keyed.
  • Other accounts on the same PC. The folder's permissions are pinned to your account, and DPAPI keys belong to one account.
  • Secrets copied from password managers. Clips carrying the standard exclusion markers are skipped without being read.
  • A glance at the list. Credential rows are masked; the value appears only when you press Ctrl+R.
  • Pasting into the wrong window. No keystroke is sent unless the target window is confirmed to be in front.
  • A tampered version file or import file. Update links are limited to the official host, and an import is re-checked from its contents — paths, hashes and labels are recomputed.
  • Text crafted to freeze the app. Detection patterns are bounded, and only the first 1,000,000 characters are scanned.

Does not protect against

  • Malware running as you. Any program under your Windows account can read the clipboard and ask DPAPI to decrypt, exactly as ClipVault does.
  • Administrators of the PC. An administrator account can read other accounts' files and act as them.
  • Other apps while something is on the clipboard. The Windows clipboard is shared by every running program. Clearing it after a paste shortens that window, and only for credentials.
  • What is on screen. A value you reveal can be seen by screen recording, screen sharing, screen readers and anyone nearby.
  • Credentials it does not recognise. Detection looks for known shapes and labels. A bare password with no label looks like ordinary text and is stored as ordinary text.
  • Ordinary clips. Text, images and file paths that are not credentials are stored unencrypted in your folder, protected only by Windows permissions — email addresses and phone numbers included.
  • Settings you change. With encryption turned off, credentials are masked but not encrypted. A file you export is yours to look after.
  • Being seen checking for updates. While the update check is on, the site's host sees your IP address and ClipVault version once a day.

This is the same boundary the program states in Admin console → Security: the encryption guarantees that the database file on its own cannot be read, and no more.

Credential detection

What it looks for

Detection labels a clip; it never deletes one. A clip labelled as a credential is encrypted and masked. Storing it is refused only if you, or your organisation's policy, turn that on.

Passwords

A label with a value — “password:”, “비밀번호:”, “contraseña=” and the word for password in all twelve languages the app ships, fullwidth colons included. Also addresses of the form scheme://user:password@host.

API keys and tokens

Known formats from OpenAI, Anthropic, Stripe, GitHub, GitLab, npm, SendGrid, AWS, Slack and Google; labelled values such as api_key= or client_secret:; .env lines such as DB_PASSWORD=; Azure connection-string keys.

Webhook URLs

Slack and Discord webhook addresses, which are credentials in themselves.

Private keys

PEM private key blocks.

JSON Web Tokens

Three base64url segments beginning with eyJ.

Card numbers

13 to 19 digits that pass the Luhn check. Placeholder runs such as 0000 0000 0000 0000 are ignored.

Korean resident registration numbers

Checked against the date and the check digit.

Email addresses and phone numbers

Labelled as personal data, but not encrypted: people copy them on purpose.

Built not to hang

Detection runs on every copy, so a slow pattern would freeze the hotkey. Every repetition in every pattern has an upper limit, and the tests feed 14 adversarial inputs and fail if quadrupling an input multiplies the time by more than eight — the signature of catastrophic backtracking. Only the first 1,000,000 characters of a clip are scanned, and the program never stores more text than it scans.

sensitive.DETECT_LIMIT, Config.normalize, tests/test_security.py

For organisations

Policy can only make it stricter

IT departments can enforce settings with Group Policy or Intune under HKLM\SOFTWARE\Policies\ClipVault. The machine and user policy keys are both read and the stricter value wins; standard users cannot write to either.

  • 19 rules. Refuse to store credentials, require encryption, cap retention and the number of clips, force a clear-after-paste time, add excluded apps, shorten retention for chosen apps, add detection rules, turn off image or file capture, export, the update check or news, lock down folder permissions, require screen-capture protection, turn off private mode, or always confirm a credential paste into a new program.
  • There is no loosening switch. No policy turns encryption off, removes an excluded app or enables anything that uses the network — a test fails the build if a policy name does not begin with Disable, Require, Max, Excluded or LockDown.
  • Unreadable values are ignored, never read as permission.
  • Nothing hidden from the user. Locked settings are greyed out, and the admin console lists the rules in force.

Group Policy template

ADMX with English and Korean ADML, plus a guide to every value. Works with Group Policy and with Intune's ADMX import.

Download ClipVault-policy.zip
Supply chain

What goes into the executable

Fewer parts means fewer places for someone else's code to get in.

  • No third-party libraries. The program uses only the Python standard library — Win32 through ctypes, the interface through tkinter, storage through sqlite3, and a PNG codec written in the project. PyInstaller is used only to package it. scripts/check_stdlib_only.py reads every import and fails the build on anything else.
  • One network door, checked by machine. scripts/check_network.py keeps networking inside net.py and keeps any body argument out of it.
  • Checked on every push. The full test suite, the dependency check, the network check, the download-counter tests and the translation checks run on Windows in CI.

This build is code-signed

ClipVault.exe is signed by PROJECTTEAMFORYOU through Azure Artifact Signing. To check, right-click the file → PropertiesDigital Signatures. When signing is set up, the build refuses to finish unsigned, and the signature is verified again before the files leave the build machine.

This website

What the download counter keeps

The website counts downloads so we can see which files are used. It keeps a tally, not a log.

Stored

  • The date (UTC)
  • The file name
  • A two-letter country code from the hosting provider's network

Never stored

  • Your IP address
  • Your User-Agent — read only to skip bots and link previews
  • The page you came from
  • Cookies, or anything else about you

Resumed downloads and crawlers are not counted, and the program's update check is not counted at all — agreeing to a version check is not agreeing to be counted. deploy/cloudflare/lib/downloads.js

Clicks on our own ads — on this website, or in the program’s news if you turned news on — are tallied the same way: date, ad and country. The program never shows ads in the popup and never shows anyone else’s ads. deploy/cloudflare/lib/ads.js

Responsible disclosure

Found a vulnerability? Tell us first.

Please report it privately by email, so that it can be fixed before it is public.

Report security concerns security@clipvault.dev
Write a security report

Our goal is to acknowledge a report within 3 business days and to agree a fix and a disclosure date with you. This is a goal, not a guarantee: ClipVault is made by a small team.

Please include

  1. The ClipVault version (clipvault-cli --version) and your Windows version
  2. Steps to reproduce it, and what an attacker would gain
  3. A proof of concept, if you have one
  4. Whether and when you plan to publish

Please do not send real passwords or other people's clipboard data, and test only on computers and accounts that are yours.

There is no paid bug bounty. If you would like, we will thank you by name in the release notes.

Machine-readable contact: security.txt →