Share screenshots without exposing PII
SafeSnap is a privacy-first Chrome extension that automatically detects and protects personally identifiable information (PII) in screenshots. Perfect for QA teams, product managers, and anyone who needs to share screenshots without exposing sensitive data.
![]() |
![]() |
|---|
SafeSnap is the only tool that combines automatic PII detection with screenshot capture in one integrated solution. Unlike other tools that either:
- Do PII detection but require separate screenshots
- Do screenshots but require manual PII review
- Require complex setup or external services
SafeSnap works instantly, locally, and automatically.
Automatically detects and protects:
- Proper nouns (names, places, organizations)
- Money amounts with realistic variance
- Quantities with magnitude preservation
- Email addresses
- Phone numbers
- Street addresses
- Dates with time-based variance
- URLs and domains
- IP addresses
- Credit card numbers
- Custom regex patterns (user-defined)
- Multi-signal scoring with 11 context signals for proper noun detection
- Pattern matching for structured data (emails, phones, etc.) with library validation
- Context awareness (skips labels, headings, buttons; filters header/footer UI text)
- Adjective filtering using suffix-based pattern matching (no hardcoded lists)
- Email domain matching to boost company name detection confidence
- Form input protection before screenshots
- Consistent replacements (same input = same output)
- Global replacement ensures all occurrences of detected PII are replaced across the entire page
- Magnitude variance for realistic money/quantity replacement
Performance: High precision (zero false positives)
π Read detailed detection documentation β
- One-click protection before capture
- Instant screenshot of visible tab (PNG)
- Copy to clipboard for quick sharing
- Auto-download option
- Restore original to undo changes
-
Clone the repository:
git clone https://github.com/yourusername/safesnap.git cd safesnap -
Install dependencies:
bun install
-
Build the extension:
bun run build
-
Load in Chrome:
- Open
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
distfolder
- Open
Will be available on the Chrome Web Store once published.
- Navigate to any web page
- Click the SafeSnap icon in your toolbar
- Select PII types to protect (or use defaults)
- Click "Protect PII" to replace sensitive information
- Click "Take Screenshot" to capture
- Click "Restore Original" when done
Your screenshot is now safe to share without exposing sensitive data!
- Report bugs without exposing customer data
- Share test results with external contractors
- Create training materials safely
- Share mockups with customer examples
- Document workflows without privacy concerns
- Create presentations with real data (safely)
- Screenshot error messages without tokens
- Share production issues with support teams
- Document API responses safely
- Demonstrate UI without GDPR/CCPA violations
- Create audit documentation
- Share compliance screenshots
- Bun (package manager)
- Chrome browser for testing
# Clone and install
git clone https://github.com/yourusername/safesnap.git
cd safesnap
bun install
# Run development build with watch mode
bun run dev
# Run tests
bun run test
# Run linter
bun run lint
# Production build
bun run build
# Create package for distribution
bun run packagesafesnap/
βββ src/
β βββ background/ # Background service worker
β βββ content/ # Content scripts (PII detection/replacement)
β βββ popup/ # Extension popup UI
β βββ settings/ # Settings page
β βββ detection/ # PII detection engine (pii-detector.js, pattern-matcher.js, dictionary.js)
β βββ replacement/ # PII replacement logic (replacer.js, consistency-mapper.js, name/company pools)
β βββ utils/ # Utility functions
β βββ i18n/ # Internationalization
βββ tests/ # Jest unit tests (co-located with source as *.test.js)
βββ config/ # Configuration files (app-config.js)
βββ assets/ # Icons, images
βββ src/dictionaries/ # Dictionary data files (en.js with 801 words)
βββ dist/ # Build output
βββ docs/ # Documentation
# Run all tests (IMPORTANT: Use "bun run test", NOT "bun test")
bun run test
# Watch mode for TDD
bun run test:watch
# Coverage report
bun run test:coverage
# Run specific test
bun run test path/to/test.test.jsStatus: Comprehensive test suite with high coverage
# Lint code
bun run lint
# Auto-fix lint issues
bun run lint:fix
# Format with Prettier
bun run formatSafeSnap uses a modular Chrome extension architecture:
- Content Script: Runs on web pages, performs PII detection and replacement
- Background Service Worker: Handles screenshot capture and message routing
- Popup UI: User interface for controls and settings
- Settings Page: Configuration and customization
All PII processing happens locally in your browser. No data is sent to external servers.
SafeSnap uses a hybrid detection approach combining:
- Pattern-based detection - Regex patterns + library validation for structured data (emails, phones, credit cards)
- Multi-signal scoring - Multiple context signals for proper noun detection (names, companies, places)
- Context-aware filtering - Skips UI elements, applies department/team name penalties
Key Features:
- High precision (zero false positives)
- Curated dictionary for common English words
- Configurable detection threshold (default: 0.75)
- Email domain matching for company name validation
- Department name filtering (e.g., "Human Resources", "Customer Service")
Learn more about detection β
SafeSnap is built with privacy as the top priority:
- All processing happens locally in your browser
- No external servers or APIs
- No analytics or tracking
- No data collection
- Minimal permissions (activeTab, storage, clipboardWrite)
- Dictionary files are static, bundled assets
- Settings stored in Chrome's encrypted storage
We welcome contributions! See CONTRIBUTING.md for guidelines.
Quick checklist:
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Ensure
bun run testandbun run lintpass - Submit a pull request
MIT License - see LICENSE file for details.
Copyright (c) 2026 SafeSnap Community
- Bug reports: GitHub Issues
- Feature requests: GitHub Discussions
- Questions: Check existing issues or start a discussion
- Firefox support
- Edge support
- Safari support
- Additional language support (i18n)
- Export/import settings
- Bulk screenshot processing
- Video redaction support
- Additional PII types
See open issues for planned features and known issues.
- Dictionary data: US Census Bureau, Social Security Administration (public domain)
- Built with: Chrome Extension APIs, Jest, Webpack
- Community contributors: See Contributors
Made with privacy in mind by the SafeSnap Community

