Colour History - Reuse Every Colour You Pick, Privately
Colour history is a local list of every colour you pick, harvest or save, newest first, stored on your device. It lets you reuse a colour from earlier without re-picking. Nothing is sent anywhere.
Why it matters
A colour tool you have to re-feed every session is a chore. History fixes that, but the interesting part is where it lives: chrome.storage.local on your machine, never a server, with no account and no sync. For a tool that reads pixels off whatever you are looking at, that on-device promise is the whole point, and it is why the extension makes zero network requests of any kind.
The list is capped so it cannot grow without bound, and consecutive duplicates are collapsed. You get a working log of colours you have touched, newest at the top.
How it works
When you pick a colour (via eyedropper, palette extraction, or manual entry), the extension writes a record to chrome.storage.local. Each record has:
- The colour value (hex, RGB, HSL, OKLCH)
- A timestamp
- A source tag (eyedropper, palette, harvest, manual)
- A flag for whether it is pinned
The history is capped at 100 items. When you add a 101st colour, the oldest unpinned item is dropped. Pinned colours survive this cap and are never evicted.
Consecutive duplicates are collapsed. If you pick #38bdf8 twice in a row, history shows it once but increments an internal counter. When you reuse it a third time, the duplicate collapse resets and it appears as a new entry.
Everything is stored in chrome.storage.local, which is sandboxed to your browser profile. It does not sync across devices, does not reach a server, and does not report to Google or Anthropic. Closing the browser does not clear it; it persists until you manually clear it or until you uninstall the extension.
What does not matter
History is not a version-control system. If you pick a colour, edit it, and pick it again, you get two entries, not a diff. For that level of control, use the "Saved palettes" feature, which lets you name and curate a set.
Code example
Reading from and writing to history:
// Write a picked colour to history
const pickedColor = {
value: "#38bdf8", // hex
timestamp: Date.now(),
source: "eyedropper",
pinned: false,
};
// In a real extension, this would use chrome.storage.local
// chrome.storage.local.get(["history"], (result) => {
// const history = result.history || [];
// history.unshift(pickedColor); // Newest first
// if (history.length > 100) history.pop(); // Cap at 100
// chrome.storage.local.set({ history });
// });
// Reuse a colour from history
const historyItems = [
{ value: "#38bdf8", source: "eyedropper", timestamp: 1720118400000 },
{ value: "#dc2626", source: "palette", timestamp: 1720118350000 },
{ value: "#38bdf8", source: "manual", timestamp: 1720118300000 },
];
// Click the second item to send it back to the colour picker
const reuseColor = (item) => {
// The picker updates to show #dc2626
console.log(`Reusing ${item.value} from ${item.source}`);
};
Wrong – storing history on a server:
// Sending colours to a server defeats the privacy promise
// If history required an account or a sync, it would be tracking
// DO NOT do this:
// fetch("/api/save-color", {
// method: "POST",
// body: JSON.stringify({ color: "#38bdf8" }),
// });
How Scalpel Color shows it
The History tab shows your most recent colours in a scrollable list, newest first. Each entry displays the colour as a swatch, its hex code, and an icon showing the source (eyedropper, palette scan, manual entry). Click any entry to send it back to the Picker.
Consecutive duplicate colours are shown once with a small badge counting how many times you have picked it. Pin an entry by clicking the star icon to protect it from the 100-item cap. Pinned colours float to the top and survive a "Clear history" action.