The hosted demo sandbox¶
The live demos page on provisa.dev opens each published demo in a sandbox on cloud.provisa.dev. No account is needed. The sandbox is your own copy of the demo: its model, and its data landed ahead of time, so the first query answers at once. Anything you add or change stays in your copy.
A "Try it Out" invitation opens the same kind of sandbox for a signed-in person. That sandbox is yours from every device you sign in on, and nobody else can be admitted to it.
What the sandbox is¶
It is a lightweight version of Provisa. The same product, with these limits:
| Limit | Value | Setting |
|---|---|---|
| Engine | A single-process DuckDB engine, not the engine production organizations use | |
| Memory | 256 MB for the sandbox's engine; a query that needs more is refused | sandbox.memory_limit |
| Disk | 512 MB for the sandbox's data and uploaded files together; a write past that is refused | sandbox.disk_limit |
| Inactivity | Deleted, with everything in it, after 1 hour without use | sandbox.idle_ttl |
| Open at once | 10 sandboxes; past that, a visitor is asked to try again shortly | sandbox.max_concurrent |
The sandbox also holds back what reaches past it:
- You can't invite people, confer roles, or switch or manage environments.
- The sample sources are read-only. What you write stays inside the sandbox.
- A source you register may reach only public internet addresses. A source that names a private, loopback or link-local address is refused by name, and so is one whose address could not be held to the one checked (a file read from a URL, for instance; upload the file instead).
- Changes made at the same moment from several devices can be refused as a conflict. Try again.
Every one of these is shown, with this deployment's own values, in the welcome notice the sandbox opens with.
For operators¶
The four settings above are on the Deployment settings page, under Limits. They take effect for the next sandbox opened, and the memory limit for the next sandbox engine built.
The sandboxes run in a process of their own, the sandbox tier (PROVISA_SANDBOX_TIER=true, one
worker), beside the API that serves every other organization. The UI server sends a sandbox's
requests there by the sandbox's address; any other process refuses a sandbox by name. Each
published demo (published: true in its demo/named/<name>/demo.yaml) has a template the
sandbox tier builds when it starts, landing the demo's data once; a sandbox is opened as a copy of
it. See named demos for how a demo is written.
AI in the sandbox¶
Polly and the AI features of a sandbox (column and table descriptions, relationship discovery, natural-language SQL, table selection) all use one OpenAI-wire endpoint the operator names, with one model. A sandbox has no embedding model, so catalog search is unavailable there; Polly browses the catalog instead. The key is stored once, as a secret in the deployment organization, and resolved there for every sandbox; a sandbox's own secrets never hold it.
| Setting | Value | Setting |
|---|---|---|
| Endpoint | Unset: no AI in sandboxes. OpenRouter's is https://openrouter.ai/api/v1 |
sandbox.ai_base_url |
| Model | anthropic/claude-haiku-5.5, for every role |
sandbox.ai_model |
| Key | Unset: no AI in sandboxes. A ${secret:NAME} reference to the deployment organization's secret |
sandbox.ai_api_key |