System architecture
ShellCanvas is one desktop application with a hard line drawn through the middle of it. Above the line is a React interface that knows about windows, apps and workspaces. Below it is a Rust core that owns every connection, credential and byte on the wire. Nothing above the line ever speaks a protocol.
How it works
The layers
| Layer | Runs as | Owns |
|---|---|---|
| Desktop shell | React in the main webview | Windows, layout, the launcher, workspace state, settings UI |
| Workspace broker | Shell-side, between apps and the core | Capability bindings, permission checks, request routing, app lifecycle |
| Native core | Rust, in the Tauri process | Sessions, host-key trust, authentication, SSH, SFTP, terminals, adapter and bridge supervision |
| Extensions | Sandboxed webviews, or separate native processes | Apps, themes, connection adapters, filesystem bridges |
Calls travel one way: an app asks the broker, the broker checks the app's grants and the workspace's bindings, and only then does a native command reach the core. An app cannot address a session directly, cannot name a transport, and cannot reach a capability the workspace has not bound.
What a request looks like end to end
Opening a folder in Files:
- The Files app calls
files.liston the workspace, using an opaque location. - The broker resolves which connection currently provides the files capability, and checks the app's
files.readgrant. - The core issues the operation on that session — SFTP for an SSH connection, a
files.listrequest over stdin and stdout for an adapter. - The result comes back as a page of entries with a parent, roots and per-entry revisions.
- The shell renders it. It never parses the location string, because path syntax belongs to the provider.
The same shape holds for terminals, transfers and remote settings. The capability is the contract; the transport behind it is an implementation detail the layer above is not allowed to assume.
Processes
The desktop is one process with several webviews. Each installed app runs in its own sandboxed webview with no filesystem or network reach of its own. Each connection adapter runs as a separate native process, launched from an absolute path, speaking length-prefixed JSON over stdin and stdout with a 4 MiB frame limit and at most 32 requests in flight. Filesystem bridges are separate native processes too, on their own protocol with 1 MiB frames and 32 KiB chunks. A failure in one of those processes is contained to its own connection.
Local by construction
There is no ShellCanvas account, no server component and no telemetry. Saved hosts, workspace layouts, installed extensions and app storage live in the desktop's local application data. Connections run from your machine to the destinations you name, and nowhere else; the only network traffic ShellCanvas originates on its own is what you point it at.
The browser preview
Running the interface in a browser gives a synthetic preview backed by fixtures. It exists so the UI can be developed and demonstrated without hardware. It is deliberately not a fallback: a native connection that fails never quietly becomes a fixture, and the preview announces what it is rather than imitating a session.
Boundaries
ShellCanvas is an early working prototype, and this architecture is honest about which parts are proven. Windows is the validated platform; other targets build but are not verified end to end. Connection adapters and filesystem bridges are native code running with your permissions — the process boundary isolates failure, not trust. The webview isolation that apps run under has been validated on Windows only, and is not a certification against a hostile package.
Composition is real but bounded: a workspace may take files, console and settings from different connections, while the whole files family must come from one source. Capability discovery constrains what the interface offers; it is not a promise that a particular device supports a particular operation.
Related guides
- Connection and workspace model — how bindings and lifetimes work.
- Trust and isolation model — what is verified, and what is trusted.
- Providers and device detection — how capabilities are discovered.
- Core concepts — the same model in user terms.