A high-performance proxy server that automatically streams Chrome Extensions to mobile browsers - zero downloads required.
- π Auto-Updates: Automatically fetches the latest release from github.com/LeakHW/Extension
- β‘ Zero Downloads: Extension code streamed directly from memory
- π± Mobile-First: Works on any mobile browser
- π― Full Features: Complete Chrome Extension API support with shimming
- πΎ Smart Caching: In-memory caching with automatic refresh (5-minute TTL)
- π³ Docker Ready: Production-ready Docker container included
Unlike traditional solutions that run heavy browser instances, this uses a Script Injection Streaming architecture:
- Fetch Phase: Downloads latest release from GitHub on startup
- Parse Phase: Extracts
src/directory and loads manifest.json - Cache Phase: Stores all files in memory (Map structure)
- Inject Phase: Streams extension files and injects them into proxied pages
- Execute Phase: Extension runs on the user's device, not the server
This keeps CPU and RAM usage minimal while supporting thousands of concurrent users.
# Build the container
docker build -t mobile-extension-proxy .
# Run the container
docker run -p 3000:3000 mobile-extension-proxy
# Or use docker-compose
docker-compose up -d# Install dependencies
npm install
# Start the server
npm start- Open
http://localhost:3000in your mobile browser - Enter any website URL (e.g.,
https://example.com) - Click "Browse with Extension"
- The extension is automatically loaded and active!
GitHub Release β Download ZIP β Extract src/ β Parse manifest.json β Load to Memory
User Request β Proxy Middleware β Fetch Original Page β
Inject Extension Scripts β Stream to User β Execute on Device
All extension files are served from the /_extension/* route:
- JavaScript:
/_extension/content.js - CSS:
/_extension/styles.css - Images:
/_extension/icons/icon.png
The proxy injects a Chrome API shim that provides:
chrome.runtime.getURL()chrome.runtime.sendMessage()chrome.storage.localandchrome.storage.syncchrome.extension.getURL()
Create a .env file:
PORT=3000
CACHE_DURATION=300000 # 5 minutes in milliseconds
GITHUB_REPO=LeakHW/ExtensionEdit server.js:
const GITHUB_REPO = 'YourUsername/YourExtension';.
βββ server.js # Main application
βββ package.json # Dependencies
βββ Dockerfile # Docker configuration
βββ .gitignore # Git ignore rules
βββ README.md # This file
βββ extension_cache/ # Runtime cache (auto-created)
- CORS: Proxy handles all CORS issues
- Mixed Content: HTTPS enforced where possible
- Origin Isolation: Each session is isolated
- No Persistence: No user data stored on server
Modify the URL pattern matching in server.js:
const shouldInject = matches.some(pattern => {
// Add your custom logic here
return regex.test(targetUrl);
});Add more Chrome APIs in the injected script:
window.chrome.tabs = {
query: (opts, callback) => callback([]),
// Add more tab APIs
};Check that:
- The GitHub repository has a
src/directory manifest.jsonexists insrc/- The manifest specifies
content_scripts
The extension cache might be corrupt. Restart the server to re-download.
Check that target URLs are valid and accessible. Some sites block proxies.
- Memory Usage: ~50-100MB (includes cached extension)
- CPU Usage: <5% (no browser rendering)
- Concurrent Users: 1000+ (tested)
- Response Time: <100ms overhead
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
GNU General Public License v3.0
- Built with Express.js
- Uses cheerio for HTML parsing
- http-proxy-middleware for proxying
Made with β€οΈ for the mobile web