Sandstone supports two distinct deployment models. You can host it on a server like any standard Node.js web app, or you can bundle everything into a single self-contained HTML file that runs from a local file path or aDocumentation 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.
data: URL — no server, no domain, and no service worker required. The right choice depends on your environment and how much infrastructure you want to maintain.
Sandstone is licensed under AGPL-3.0-only. If you distribute a modified version — including deploying a modified build to a public server — you must make the corresponding source code available to your users under the same license. See the full license text for details.
Deployment models
- Hosted server
- Standalone file
This model deploys the example Express server to a host of your choice. The server serves the compiled static files and provides a local Wisp WebSocket endpoint at the same origin.The server reads This gives you a Wisp endpoint at
Build for production
From the repository root, build the main library first, then build the example:Start the server
PORT and HOST from the environment. To bind to a specific port:Wisp endpoint
The Express server inexample/server.mjs automatically handles WebSocket upgrades and routes them to the bundled Wisp server:ws://yourserver/ (or wss://yourserver/ behind TLS) without running a separate service. When the example app detects it is being served over http: or https:, it automatically connects to the local origin as the Wisp server:Reverse proxy
When you put the Express server behind a reverse proxy such as nginx or Caddy, make sure your proxy forwards WebSocket upgrade requests. Wisp relies on the HTTP upgrade mechanism and will not work through a proxy that strips those headers.Wisp URL configuration
Both deployment models expose a Wisp URL input in the options panel. Users can change the Wisp endpoint at runtime without reloading the page. The new URL takes effect when the options panel is closed:wisp_url_input field with your server’s address so users connect to it by default.