Why I Stopped Trusting Closed-Source Clipboard Managers (And Built My Own)
By Andy Young
•
October 12, 2024
It was 3 AM on a Tuesday when I realized I'd been an idiot.
I was debugging a production issue, frantically copying AWS credentials, database connection strings, and API keys between terminal windows. My clipboard manager—one of those popular Chrome extensions with 100,000+ downloads—was dutifully recording everything. Then, mid-copy, I had a horrifying thought: What if this extension is sending my clipboard data somewhere?
I immediately checked the extension's page. "Your data stays private," it promised. But how could I verify that? The source code was nowhere to be found. I was trusting a black box with some of my most sensitive data.
What really made me pause were the permissions. While Clipboard History IO only asks for permission to read and write clipboard data, Clipboard History Pro demanded much more:
"Read and change all your data on all websites" – why does a clipboard manager need that? User reviews mentioned it used to request permission to track browsing history too. Compare that to what Clipboard History IO asks for:
Just clipboard access. Nothing more. Because that's all a clipboard manager should need.
The Clipboard Security Paradox
Here's the thing about clipboard managers: they're incredibly useful. As developers, we're constantly juggling:
- API keys and tokens
- Database connection strings
- Complex SQL queries
- Code snippets for refactoring
- Terminal commands we run 50 times a day
Without a clipboard history, we're one accidental Cmd+C away from losing that perfectly crafted regex pattern or that obscure ffmpeg command we finally got working.
But this convenience comes with a massive security risk. Your clipboard is a goldmine of sensitive information. In my case, over the course of a single debugging session, my clipboard had contained:
- Production database credentials
- Stripe API keys
- JWT signing secrets
- Customer email addresses
- Internal Slack webhook URLs
And I was letting a closed-source extension have unrestricted access to all of it.
The Trust Problem Nobody Talks About
I spent the next few days researching clipboard manager security. What I found was... unsettling.
Most popular clipboard managers are closed-source. They promise your data stays local, but there's no way to verify this. Even if the developers have good intentions today, what happens when:
- The extension gets sold to a different company?
- A rogue employee adds data collection "features"?
- The extension gets compromised by a supply chain attack?
- The business model changes and they need to monetize somehow?
I found forum posts from paranoid sysadmins who refused to use any clipboard manager. But going without one felt like coding with one hand tied behind my back. There had to be a better way.
Building a Clipboard Manager I Could Actually Trust
That's when I decided to build Clipboard History IO. The core principle was simple: complete transparency through open source.
Every line of code is on GitHub. You can:
- Review the entire source code
- Build it yourself from source
- Verify there's no network requests for clipboard data
- Fork it and make your own modifications
But here's what really makes the security model work:
1. Everything Stays Local
Your clipboard history never leaves your machine. No servers, no analytics, no telemetry. Here's the actual code that stores your clipboard items:
// From utils/storage.ts
const storage = new Storage({
area: "local",
});
export const setEntries = async (entries: Entry[]) => {
const settings = await getSettings();
await Promise.all([
storage.set(ENTRIES_STORAGE_KEY, entries),
settings.totalItemsBadge ? setActionBadgeText(entries.length) : removeActionBadgeText(),
]);
};
The area: "local"
means your data is stored in Chrome's local storage API, which is completely isolated to your browser profile. You can verify this yourself in the source code.
2. Content-Based Deduplication
Here's a neat security feature that emerged from a performance optimization. We use SHA-256 hashing to create unique IDs for each clipboard entry:
// From utils/storage.ts - createEntry function
const entryId = createHash("sha256").update(content).digest("hex");
const [newEntries, skippedEntryIds] = applyLocalItemLimit([
...entries.filter(({ id }) => id !== entryId),
{
id: entryId,
createdAt: Date.now(),
content,
}
], ...)
This means if you copy the same API key multiple times, it's only stored once. The SHA-256 hash ensures each unique piece of content gets its own ID, preventing duplicates. Less data stored = smaller attack surface.
3. Zero Network Requests
The extension runs completely offline. You can verify this yourself by checking the network tab in Chrome DevTools while using it. No phoning home, no analytics, no "anonymous usage statistics." Your clipboard data stays on your device, period.
The Unexpected Benefits of Going Open Source
Building an open-source clipboard manager had some benefits I didn't anticipate:
Community Security Audits: Within weeks of launching, I had developers reviewing the code and suggesting security improvements. One contributor pointed out a potential XSS vector in how we were rendering clipboard content. Fixed in v1.2.
Feature Requests That Made Sense: Users started requesting features I'd never thought of. My favorite? A "sensitive mode" that automatically clears items containing patterns that look like credentials after 5 minutes.
Trust Through Transparency: I regularly get emails from security-conscious users who say they finally feel comfortable using a clipboard manager because they could verify what it does.
Real-World Impact
Since launching Clipboard History IO, I've used it to:
- Recover a complex SQL migration query after accidentally copying something else
- Keep track of multiple JWT tokens while debugging auth issues across services
- Build a personal library of useful terminal commands
- Save my sanity during a massive refactoring project involving 50+ files
But more importantly, I sleep better knowing that my clipboard history—with all its sensitive data—isn't being harvested by some data broker or sitting on a server waiting to be breached.
Try It Yourself
If you're tired of choosing between productivity and security, give Clipboard History IO a try. It's free, open source, and built by a developer who got tired of trusting black boxes with sensitive data.
And if you're particularly paranoid (like me), you can always build it from source and verify exactly what it's doing. That's the beauty of open source—you don't have to trust me. You can verify everything yourself.
Have you ever had a clipboard security scare? What tools do you use to manage sensitive data while staying productive? I'd love to hear your thoughts—send me an email at andyluyoung@gmail.com.