Share your screen without exposing sensitive data.
Obscuro is a Chrome extension that intelligently hides sensitive information in your browser. You can either mask sensitive data or replace it with realistic scrambled stand-ins, then share your screen with confidence.
- π― CSS Selector-based Hiding - Target specific elements with precision
- π Regex Pattern Matching - Automatically detect sensitive text (emails, SSNs, credit cards, etc.)
- οΏ½ Scramble Mode - Replace sensitive values with realistic, deterministic fake values
- π«οΈ Blur Mode - Keep the original text in place while visually blurring it
- ποΈ Mode Switcher in Popup - Toggle between Blur and Scramble without changing config
- οΏ½π« Smart Ignore Rules - Exclude specific content from processing
- β‘ Dynamic Content Support - Works with React, Vue, and other SPAs via MutationObserver
- π¨ Customizable Blur Effect - Adjust the blur intensity to your needs by changing the CSS
- πΎ Import/Export Configs - Share configurations across teams
- π Privacy First - No data collection, everything runs locally
| Before (Sensitive Data Visible) | After (Data Hidden) |
|---|---|
![]() |
![]() |
Watch Obscuro automatically hide sensitive data in real-time
- Visit the Chrome Web Store
- Click "Add to Chrome"
- Start hiding sensitive data!
-
Clone this repository:
git clone https://github.com/yourusername/obscuro.git cd obscuro -
Install dependencies:
npm install
-
Build the extension:
npm run build
-
Load in Chrome:
- Open
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
dist/directory
- Open
Use the Obscuro popup to choose a mode:
- Blur - Keeps the original value in the DOM and visually blurs it
- Scramble - Replaces the visible value with a deterministic fake value generated locally
Scramble mode is useful when blur is too distracting or when you want the page to remain readable during demos while still hiding sensitive values.
Click the Obscuro icon in your toolbar to open the configuration panel. Use the mode dropdown to choose Blur or Scramble. The extension uses a JSON configuration file:
{
"version": "1",
"selectors": [
"[data-sensitive='true']",
".customer-email",
"input[name='email']"
],
"regex": [
{
"pattern": "[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}",
"flags": "gi"
}
],
"ignore": {
"selectors": [".public-data"],
"regex": [
{
"pattern": "support@mycompany\\.com",
"flags": "i"
}
]
}
}CSS selectors to target elements for hiding.
Examples:
"[data-sensitive='true']"- Elements with data-sensitive attribute".customer-email"- Elements with customer-email class"input[name='email']"- Email input fields"#user-profile .address"- Specific nested elements
Regular expressions to match and hide sensitive text content.
Structure:
{
"pattern": "regex_pattern_here",
"flags": "gi" // optional: g=global, i=case-insensitive
}Common Patterns:
- Email:
[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,} - SSN:
\\b\\d{3}-\\d{2}-\\d{4}\\b - Credit Card:
\\b\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}\\b - Phone:
\\b\\d{3}[-.\\s]?\\d{3}[-.\\s]?\\d{4}\\b
Exceptions to prevent hiding of specific content.
Structure:
{
"selectors": ["array of CSS selectors"],
"regex": [
{
"pattern": "pattern_to_ignore",
"flags": "i"
}
]
}Hide sensitive data while screen sharing your CRM, analytics platform, or admin dashboard.
Hide patient names, medical record numbers, and diagnoses during training sessions.
Mask account numbers, balances, and transaction details in presentations.
Share screenshots with support teams without exposing sensitive information.
We provide pre-built configurations for common use cases:
- SaaS/CRM - Customer emails, phone numbers, addresses
- Healthcare - Patient data, medical records, PHI
- Financial - Account numbers, credit cards, balances
To use an example:
- Open the Obscuro popup
- Click "Import Config"
- Select an example JSON file
- Click "Save Config"
- Node.js 16+
- npm or yarn
# Install dependencies
npm install
# Build TypeScript
npm run buildobscuro/
βββ src/
β βββ content.ts # Content script (main logic)
β βββ popup.ts # Popup UI logic
β βββ scrambler.ts # Deterministic local scramble engine
β βββ types.ts # TypeScript types
β βββ content.css # Content styles for blur/scramble states
βββ examples/ # Example configurations
βββ icons/ # Extension icons
βββ manifest.json # Chrome extension manifest
βββ config.json # Default configuration
βββ popup.html # Popup UI
βββ popup.css # Popup styles
- Content Script Injection: When you visit a page,
content.tsis injected - Configuration Loading: The script loads your config from Chrome storage
- Mode Selection: The popup stores whether the extension should blur or scramble matched content
- Initial Scan: All elements matching your selectors are processed using the active mode
- MutationObserver: Watches for DOM changes to process dynamically added content
- Regex Processing: Text nodes are scanned for regex patterns and wrapped in censor spans
- Scramble Engine: In scramble mode, sensitive values are replaced with deterministic fake values locally
- Idempotency: Uses
data-censor="1"attribute to prevent re-wrapping
Obscuro collects ZERO data. Everything runs locally in your browser.
- β No analytics or tracking
- β No external API calls
- β No data sent to servers
- β Open source and auditable
This project is licensed under the MIT License - see the LICENSE file for details.


