Block NSFW content on Twitter/X β’ Zero data collection β’ Local processing only β’ Free forever
π Major Update v0.1.0: XSafe is now ready for Chrome Web Store publication!
- β All Critical Errors Fixed: Resolved TypeError, connection errors, and DOM manipulation issues
- β Chrome Web Store Compliant: Enhanced error handling, privacy-first architecture, Manifest V3
- β
Extension Package Ready:
xsafe-extension-v0.1.0.zipprepared for Chrome Web Store upload - β Zero Data Collection: Privacy advantage with no data collection requirements
- β Professional Documentation: Complete technical architecture and submission guides
Next: Chrome Web Store review process (1-7 days expected timeline)
Andy Bo Wu - Privacy-focused Chrome extension developer
- π Website: https://andybowu.xyz/
- π¦ Twitter/X: https://x.com/andybowu
- πΌ LinkedIn: https://www.linkedin.com/in/andybowu/
XSafe is a privacy-focused Chrome extension that blocks NSFW images and videos on Twitter/X timeline without collecting any personal data. All processing happens locally on your device with optimized performance. XSafe will always be completely free with no premium features or subscriptions.
- π‘οΈ NSFW Protection: Block inappropriate images and videos on Twitter/X timeline
- π― Granular Filtering: Hide only media content while preserving post text, usernames, and engagement buttons
- π Privacy-First: No data collection, tracking, or external servers
- βοΈ Simple Toggle: Easy Safe Mode switch - one toggle for complete protection
- π Local Processing: Everything processed on your device only
- β‘ Optimized Performance: Lightweight with 1-second scanning for fast content detection
- π¨ Smart Content Preservation: Post structure remains intact while filtering visual content
- π« Profile Picture Protection: Smart filtering that excludes avatars and UI elements
- π§ Automatic Content Hiding: Filtered images and videos disappear completely for cleaner browsing
- π° Free Forever: No premium features, no subscriptions, completely free to use
- π₯ Professional Use: Safe Twitter/X browsing in workplace environments
- π¨βπ©βπ§βπ¦ Family Safety: Protect family members from NSFW content
- π Educational Settings: Safe social media access in schools/libraries
- π’ Corporate Networks: Maintain professional browsing standards
- π Privacy Conscious: Users who want content filtering without data collection
Simple Safe Mode Toggle:
- Normal Mode: Content displays normally
- Safe Mode: Automatically hides images and videos while preserving post text and structure
- Visual Feedback: Green background when Safe Mode is active
- Content Preservation: Posts remain readable with usernames, text, and engagement buttons visible
- GitHub Link: Direct access to source code for transparency
Recent performance improvements eliminate browser crashes:
- π‘ Smart Scanning: 1-second periodic scanning with cooldown protection for responsive filtering
- π― Granular Media Targeting: Precise targeting of images/videos while preserving post content
- π§Ή Memory Management: Automatic cleanup with limits (max 200 filtered elements)
- π± Efficient Observers: Targeted mutation detection with 1-second debouncing
- πΎ Caching: UI element detection caching to prevent repeated expensive checks
- π§ Proper Cleanup: All intervals, observers, and caches are properly managed
- π¨ Content Preservation: Only hides media elements, maintaining post readability and functionality
Don't just trust us - verify our privacy claims yourself! XSafe is designed to be completely auditable.
Verify ZERO external requests:
- Install XSafe (or use the development version)
- Open Twitter/X in your browser
- Press F12 (Developer Tools)
- Click "Network" tab
- Browse Twitter/X for 5 minutes with XSafe active
- Look for XSafe requests - you'll find ZERO external calls
# What you'll see in Network tab:
# β
Twitter/X requests (normal)
# β NO requests from XSafe extension
# β
All processing happens locallyVerify no data collection in our code:
-
Search our codebase for external requests:
# Clone the repository git clone https://github.com/AndyBoWu/xsafe.git cd xsafe # Search for any external network calls grep -r "fetch\|XMLHttpRequest\|axios\|request" src/ # Result: No external API calls found!
-
Check data storage - only local Chrome APIs:
# Search for data storage grep -r "chrome.storage" src/ # Result: Only local and sync storage (no external databases)
| Privacy Measure | How to Verify | What You'll Find |
|---|---|---|
| No External APIs | Network tab in DevTools | Zero outgoing requests |
| Local Storage Only | chrome://extensions/ β Inspect |
Only browser storage used |
| Minimal Permissions | Extension details page | Only 3 basic permissions |
| Open Source | This GitHub repository | Every line of code visible |
| No Analytics | Search codebase for "analytics" | No tracking code found |
| No Telemetry | Search codebase for "telemetry" | No crash reporting found |
We only request 3 minimal permissions:
"permissions": [
"storage", // β
Local settings only (no external DB)
"activeTab", // β
Current tab only (not all tabs)
"scripting" // β
DOM manipulation only (no network access)
]
"host_permissions": [
"*://x.com/*", // β
Twitter/X only
"*://twitter.com/*" // β
Twitter redirect support
]Compare with other extensions that often request:
- β
tabs(access to all tabs) - β
history(browsing history) - β
cookies(tracking data) - β
identity(personal information) - β
http://*/*(access to all websites)
Our CSP prevents external code injection:
"content_security_policy": {
"extension_pages": "script-src 'self'; object-src 'self'"
}What this means:
- β Only our own code can run
- β No external scripts allowed
- β No remote resources loaded
- β No code injection possible
Full source code available:
- Repository: https://github.com/AndyBoWu/xsafe
- License: MIT (complete transparency)
- No hidden builds: Webpack config is public
- No obfuscation: All code is readable
Community auditing:
- π Security researchers: Please audit our code
- π Bug reports: Report privacy concerns via Issues
- π€ Contributions: Help improve privacy through PRs
β XSafe has NONE of these privacy concerns:
- β No Google Analytics or tracking pixels
- β No external CDNs or fonts
- β No crash reporting services (Sentry, Bugsnag)
- β No A/B testing platforms
- β No advertising networks
- β No user accounts or registration
- β No cloud storage or syncing
- β No encrypted "anonymous" data collection
For privacy advocates:
# Advanced verification techniques:
1. Network traffic analysis with Wireshark
2. Static code analysis with ESLint security rules
3. Extension sandboxing with Chrome DevTools
4. Manifest.json permission analysisFor everyday users:
- Check Network tab (should show 0 XSafe requests)
- Compare our permissions vs other extensions
- Read our source code (it's surprisingly readable!)
π Privacy Promise: If you find ANY external data transmission in XSafe, please report it immediately. We're committed to absolute transparency.
π In Review: XSafe is currently under review for the Chrome Web Store. Once approved, it will be available for easy one-click installation.
π¦ Current Status: Extension package ready (xsafe-extension-v0.1.0.zip) with all error fixes applied and Chrome Web Store compliance achieved.
- Download the latest release from GitHub Releases
- Extract the ZIP file
- Open Chrome and go to
chrome://extensions/ - Enable "Developer mode" in the top right
- Click "Load unpacked" and select the extracted folder
- The extension will appear in your browser toolbar
git clone https://github.com/AndyBoWu/xsafe.git
cd xsafe
npm install
npm run build
# Load the 'dist' folder as an unpacked extension in Chrome- Node.js 16+
- npm 8+
- Git
# Clone the repository
git clone https://github.com/AndyBoWu/xsafe.git
cd xsafe
# Install dependencies
npm install
# Development build with file watching
npm run dev
# Production build
npm run build
# Run tests
npm test
# Lint code
npm run lintXSafe uses Webpack for building with the following features:
# Development
npm run dev # Watch mode with source maps
npm run build:dev # Development build (one-time)
# Production
npm run build # Optimized production build
npm run package # Build + create extension zip
# Testing & Quality
npm test # Run Jest tests
npm test:watch # Watch mode testing
npm run lint # ESLint code checking
npm run lint:fix # Auto-fix linting issues
# Analysis
npm run analyze # Bundle size analysis
npm run clean # Clean dist directoryβ Multi-Entry Points: Separate bundles for background, content, popup, options β Code Splitting: Optimized chunking for better performance β CSS Processing: PostCSS with autoprefixing and minification β Asset Management: Automatic handling of images, fonts, icons β Source Maps: Available in development mode β Bundle Analysis: Webpack Bundle Analyzer integration β File Validation: Build verification and size checking β Chrome Extension Optimized: Manifest handling and extension structure
xsafe/
βββ src/
β βββ background/ # Service worker
β βββ content/ # Content scripts
β βββ popup/ # Extension popup
β βββ options/ # Settings page
β βββ utils/ # Shared utilities
βββ dist/ # Built extension (generated)
βββ tests/ # Test files
βββ scripts/ # Build scripts
βββ webpack.config.js # Webpack configuration
βββ package.json # Dependencies & scripts
βββ manifest.json # Extension manifest
-
Start Development:
npm run dev
This starts webpack in watch mode with source maps.
-
Load Extension:
- Open
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked" and select the
dist/folder
- Open
-
Make Changes:
- Edit source files in
src/ - Webpack automatically rebuilds
- Reload extension in Chrome to test
- Edit source files in
-
Production Build:
npm run build
Creates optimized build in
dist/folder.
XSafe uses Jest with Chrome extension API mocking:
# Run all tests
npm test
# Watch mode (re-run on changes)
npm test:watch
# Coverage report
npm test -- --coverageTest files should be placed alongside source files with .test.js or .spec.js extensions.
- ESLint: Configured for Chrome extensions with modern JavaScript
- Prettier: Code formatting (integrated with ESLint)
- Babel: ES6+ transpilation for Chrome compatibility
- Settings management
- Content filtering logic
- Statistics tracking
- Chrome API interactions
- DOM manipulation
- Real-time content filtering
- Performance optimization
- Quick settings toggle
- Current page statistics
- Domain whitelisting
- Advanced configuration
- Domain management
- Statistics dashboard
- Privacy settings
The build process generates:
dist/
βββ manifest.json # Updated extension manifest
βββ background.js # Service worker bundle
βββ content.js # Content script bundle
βββ popup.html # Popup page
βββ popup.js # Popup bundle
βββ popup.css # Popup styles
βββ options.html # Options page
βββ options.js # Options bundle
βββ options.css # Options styles
βββ icons/ # Extension icons
The webpack.config.js provides:
- Multiple Entry Points: Each extension component has its own bundle
- Environment-Specific Builds: Different configs for dev/prod
- Chrome Extension Optimization: Specialized plugins and settings
- Asset Processing: Images, fonts, CSS handling
- Code Splitting: Vendor and common chunk separation
The .babelrc configures:
- Target: Chrome 88+ for extension compatibility
- Presets: Modern JavaScript features with polyfills
- Environment-Specific: Different settings for dev/prod/test
Analyze bundle sizes and dependencies:
npm run analyzeThis opens an interactive bundle analyzer showing:
- Bundle composition
- Module sizes
- Dependency relationships
- Optimization opportunities
-
Create Production Build:
npm run package
This creates
xsafe-extension.zipready for Chrome Web Store. -
Upload to Chrome Web Store:
- Visit Chrome Web Store Developer Dashboard
- Upload the generated zip file
- Fill out store listing details
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
npm test - Run linting:
npm run lint - Create a pull request
MIT License - see LICENSE file for details.
- GitHub Repository
- Chrome Web Store (coming soon)
- Report Issues
XSafe - Protecting your privacy while browsing, one filter at a time. π‘οΈ