Browser Extension

Snap Color Picker

A free, offline-first eyedropper & color picker for Chrome with a pixel-level magnifier, native screen picking, real-time page color scanning, and instant conversion across 6 formats (HEX, RGB, HSL, HSV, CMYK, OKLCH).

Open Source
Ongoing
Creator & Maintainer
WXTTypeScriptReact 19Tailwind CSSViteChrome Extension Manifest V3react-colorful
Snap Color Picker screenshot 1

#Overview

A 5.0-star rated advanced color picker extension built with WXT, React, and TypeScript that goes far beyond a basic eyedropper. It samples pixels from any webpage or the native OS screen, auto-converts between color spaces, scans full pages for design palettes, and keeps a pin-able history — all processed locally with zero tracking or network calls.

#Key Features

  • Live pixel magnifier (17×17 zoom grid) for pinpoint color sampling
  • Dual picking modes: DOM-level page picking + native OS screen picking via EyeDropper (works on restricted pages)
  • 6 color formats with instant conversion — HEX, RGB, HSL, HSV, CMYK, OKLCH
  • One-click copy with per-format toggles and optional auto-copy
  • Real-time page color scanner — surfaces top & brand colors grouped by backgrounds, text, borders, and links
  • Color history (up to 200 entries) with pin/unpin, delete, and live cross-view syncing
  • Custom color picker with manual HEX input and visual palette editor
  • Right-click context menu access with smart fallback to screen mode on restricted pages
  • Smart WCAG-based contrast guidance plus dark & light themes
  • Palette export, fully offline, lightweight, and 100% local-first (privacy by design)

#Challenges & Solutions

Challenge

Accurately sampling pixels from arbitrary web pages without jank was the core problem — it required a screenshot-driven capture pipeline (grabbing the visible tab before the popup closes), a 60fps live magnifier overlay, and graceful handling of restricted pages (chrome://, Web Store) where DOM injection is blocked. Coordinating live updates between the content script, background worker, and popup via a typed message architecture added further complexity.

Solution

Used captureVisibleTab + canvas-based sampling with a lazy content-script injection & retry strategy, and fell back to the native EyeDropper API for screen picking on restricted pages. Implemented a fully local chrome.storage.local architecture with a typed message bus (content ↔ background ↔ popup) so history and scan results update in real time — with zero analytics, zero network calls, and instant rendering.

Project Info

Company:

Open Source

Role:

Creator & Maintainer

Duration:

Ongoing

Category:

Browser Extension

Want to Learn More?

Check out the complete documentation to understand the project architecture, setup instructions, and detailed API references.