Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ading2210/sandstone/llms.txt

Use this file to discover all available pages before exploring further.

Sandstone is a web proxy library that uses sandboxed iframes and the Wisp protocol to proxy web traffic — no service worker needed. Unlike traditional proxies that require a hosted domain, Sandstone can run from a local HTML file or a data: URL, making it significantly harder to block.

Quickstart

Embed Sandstone in your page and proxy your first URL in minutes.

How it works

Learn the architecture: sandboxed iframes, Wisp, and JS rewriting.

Embedding guide

Step-by-step instructions for integrating Sandstone into any web page.

API Reference

Full reference for the ProxyFrame class and all public exports.

Why Sandstone?

Traditional web proxies like Ultraviolet require you to visit an unblocked domain — leading to an endless game of domain whack-a-mole. Sandstone sidesteps this entirely:
  • Runs from a local file — no hosted domain means fewer attack surfaces for blocking
  • Fully sandboxed — proxied pages run inside a sandboxed iframe and cannot access or tamper with your host page
  • No service worker — works in environments where service workers are unavailable or restricted
  • End-to-end encrypted — uses libcurl.js over the Wisp WebSocket protocol for encrypted traffic

Get started

1

Install Sandstone

Build the library from source or use the pre-built dist/sandstone.mjs bundle.
git clone https://github.com/ading2210/sandstone
cd sandstone
npm install
npm run build:prod
2

Import and create a ProxyFrame

Import the host bundle and create a ProxyFrame instance.
import * as sandstone from "./dist/sandstone.mjs";

const frame = new sandstone.controller.ProxyFrame();
document.body.appendChild(frame.iframe);
3

Connect to a Wisp server

Point Sandstone at a Wisp WebSocket server for network access.
sandstone.libcurl.set_websocket("wss://wisp.mercurywork.shop/");
4

Navigate to a URL

Call navigate_to to load any URL inside the sandboxed frame.
await frame.navigate_to("https://example.com");
Sandstone is experimental and still lacks support for some web APIs (notably cookies and ES6 modules). See the introduction for a full list of supported and unsupported features.

Build docs developers (and LLMs) love