"Shuttle Stealth" is a static, single-page web proxy application that provides a "Virtual Browser" experience: a tabbed browser UI whose navigation is proxied through a Service Worker. It is built on the Vector proxy engine (a UV-style bundle) with a BareMux transport connection and Wisp protocol support.
This README was audited from repository evidence (commit
2512b3c, branchmaster) on 2026-08-13. Facts below were verified against the source; anything unverified is markedTODO/Unknownrather than invented.
- Purpose: Client-side web proxy ("Virtual Browser") with a tabbed interface, iframe-based browsing surfaces, bookmarks, theming, and a new-tab page. Proxied requests are handled by a Service Worker (
compute.js) using the Vector/UV proxy engine. - Monetization/analytics integrations (verified in source):
- Google Publisher Tag (GPT) H5 rewarded ad integration in
shader-canvas.js(ad unit path/22921845643/H5_Game_Rewarded). - Plausible analytics script in
index.html(stats.senty.com.au,data-domain="shuttle-stealth"). - Startup popup URL configured in
index.html(shuttleApp.startupPopupUrl).
- Google Publisher Tag (GPT) H5 rewarded ad integration in
- Status: No CI, no releases/tags, no version file in the repository. Live deployment status is Unknown —
project.jsonlists the domainshuttle-stealth.vercel.app, but the deployed instance was not verified as part of this audit (TODO).
- Type: Static frontend only — plain HTML/CSS/JavaScript (ES modules). No server-side code, no database.
- UI:
index.html+ Alpine.js (loaded fromunpkg.com) for reactive UI state. - Proxy engine: Vendored Vector library (
vector/,shader.bundle.mjs) with UV-style client/handler/sw modules (shader.canvas.mjs,shader.handler.mjs,shader.kernel.mjs). - Transport: BareMux v2.1.6 (build
4b7607b, vendored inmatrix/) connecting to a remote Wisp server. - Tooling: None — no
package.json, no Node.js/Composer detected (project.json), no build step, no lint/test tooling.
- A modern browser with Service Worker and SharedWorker support (service workers require a secure context —
localhostor HTTPS). - Any static file server to serve the repository directory.
- Reachable proxy backends: the app expects a Bare-compatible server at the
telemetry/path and a Wisp server at/ws/(relative to the deployed origin; seeshader.config.mjs). These backends are not part of this repository — provisioning them isTODO/environment-specific. - No runtime environment variables, secrets, or API keys are required.
No installation is required — serve the directory with any static file server:
# from the repository root
python3 -m http.server 8080
# or
npx serve .Open http://localhost:8080 in your browser. On first load the page registers the Service Worker and reloads itself once (shader-client.js). Note that the app's pre-configured proxy backends (/telemetry/, /ws/) may not be available on your own host — serving the UI locally works, but proxied navigation depends on those endpoints (TODO).
None. This project is fully static; there are no environment variables, .env files, or secrets in the repository. The only configuration is shader.config.mjs (path/prefix settings — no credentials).
- Build: None. Files are served as-is; there is no bundler, transpiler, or build step.
- Dev workflow: Edit files and refresh the browser; hard-refresh or re-register the Service Worker (
compute.js) after changes since the SW is cached per scope. - Test: No test suite exists (
TODO). Validation is manual: load the page, confirmShaderClientinitializes (ready state), tabs open, and proxied navigation works. - Lint/format: No configured linting or formatting tooling (
TODO).
| File/Dir | Role (verified) |
|---|---|
index.html |
Main entry point / UI: Alpine.js app state (shuttleApp), tab bar, bookmarks, themes (dark/light/system), new-tab page, startup popup, Plausible analytics, GPT ad markup. |
shader-client.js |
ShaderClient: loads BareMux (matrix/index.mjs) and Vector libs, sets the Wisp transport via BareMux, registers the Service Worker, encodes/decodes proxy URLs. |
shader-canvas.js |
ShaderCanvas: multi-tab manager ("Virtual Browser" controller) — iframe lifecycle, tab switching, event bubbling; includes the GPT H5 rewarded-ad injection code. |
compute.js |
Service Worker (registered as a module worker, scope ./): imports BareMux + Vector bundle/config/kernel, configures the Vector transport, and answers fetch events for URLs under the proxy prefix. |
shader.config.mjs |
Proxy configuration: prefix calc/, bare server telemetry/, Wisp /ws/, DuckDuckGo search template, XOR URL codec (Vector.codec.xor), asset paths. |
shader.bundle.mjs |
Vendored Vector/UV bundle (uv.bundle.js) — defines the self.Vector global. |
shader.canvas.mjs |
UV client (uv.client.js) — defines self.ShaderCanvas / self.UVClient; includes BareMux v2.1.6. |
shader.handler.mjs |
UV handler (uv.handler.js) — request handling/rewriting. |
shader.kernel.mjs |
UV service worker (uv.sw.js) — defines self.UVServiceWorker. |
matrix/ |
Vendored BareMux library (index.js/index.mjs, worker.js) used for transport bridging. |
vector/ |
Vendored Vector transport module (index.js/index.mjs) used as the BareMux remote transport with Wisp. |
shuttle.png |
Favicon. |
GEMINI.md |
Internal project overview/conventions document. |
project.json |
Repo metadata (stack: static/html; domain: shuttle-stealth.vercel.app). |
Flow: index.html → shader-client.js loads BareMux + Vector, registers SW → compute.js (SW) intercepts requests under the calc/ prefix → proxies via Vector/UV handler through the BareMux transport to the Wisp/Bare backends → iframes in shader-canvas.js render proxied pages in tabs.
- This is a static site: deployable to any static host/CDN (Vercel, Netlify, Railway, Render, S3, etc.) by publishing the repository contents.
- The repository contains no platform configuration files (no
vercel.json,netlify.toml,railway.json,render.yaml,Dockerfile) — the previous README's "one-click deploy" buttons are unverified (TODO). project.jsonreferencesshuttle-stealth.vercel.appas the known domain.- The Bare and Wisp backends referenced by
shader.config.mjs(telemetry/,/ws/) must be hosted and reachable from the deployed origin for proxying to work; they are not part of this repo (TODO). - Service Worker registration uses
scope: './', so the app also works when hosted in a subdirectory.
.mjs+?raw=trueconvention: shared libraries use.mjsextensions for stable delivery via module CDNs (e.g.esm.sh); scripts that must run as classic scripts are fetched with?raw=true(seeshader-client.jsloadScript/worker fetch).- Global dependencies: Vector/UV scripts expect
self.Vector,self.ShaderCanvas,self.UVClient,self.UVServiceWorker,self.__uv$config, andself.__uv$cookiesto be defined globally — keep load order intact (bundle→config→canvas/handler/kernel). - Service Worker: always register with
scope: './';compute.jsmust stay a module worker. - Path resolution: use
new URL(path, location.href).hreffor absolute path resolution in workers so assets resolve regardless of hosting depth. - Code integrity: avoid placeholders like
...when editing minified sources (seeGEMINI.md). - Monetization knobs: GPT rewarded ad unit path in
shader-canvas.js(YOUR_H5_ADS.rewardedUnitPath), startup popup URL and Plausibledata-domaininindex.html. - Config changes: proxy prefix/bare/wisp endpoints are edited in
shader.config.mjs; changing them requires updating both the page and the Service Worker (deploy + SW re-registration).
This project is open-source. See the repository for license details.
Audit note: no
LICENSEfile or explicit license text is present in the repository, and no separate credits section exists — the statement above is preserved from the original README.