A web proxy built on Scramjet, an interception-based proxy designed to bypass internet censorship.
Scramjet uses a service worker to intercept and rewrite web traffic in the browser. A Wisp WebSocket server handles the actual network requests server-side, while the browser rewrites HTML, CSS, and JavaScript on the fly using a WASM-based rewriter.
npm install
node server.jsOpen http://localhost:3030 in your browser.
This runs the full proxy with a local Wisp WebSocket server. All proxy functionality works.
docker build -t scramjet-proxy .
docker run -p 3030:3030 scramjet-proxyThe public/ directory contains a pre-built static version that can be deployed to GitHub Pages or any static host.
Important: The static version requires an external Wisp WebSocket server. The proxy will not work without one.
-
Deploy to GitHub Pages:
- Go to repo Settings → Pages
- Source: "Deploy from a branch"
- Branch:
main, Folder:/public - Save
-
Configure a Wisp server:
- Edit
public/config.jsand setwindow.WISP_URLto your Wisp WebSocket server address:window.WISP_URL = "wss://your-server.com/wisp/";
- You can run a Wisp server using wisp-js or deploy the full Node.js server from this repo to a VPS/Render/Railway/Fly.io.
- Edit
-
Access your static site:
- Visit
https://your-username.github.io/scramjet-proxy/
- Visit
The included workflow (.github/workflows/pages.yml) automatically deploys the public/ folder to GitHub Pages on every push to main.
- Scramjet core (service worker + WASM rewriter)
- Wisp protocol (WebSocket transport)
- proxy-bootstrap (auto-downloads and serves scramjet bundles)
- Express (static file serving for Node.js server)
GPL-3.0