Skip to content

Extension permissions and trust

ShellCanvas takes extensions from three sources, and they are not equally contained. Knowing which is which tells you what a given "yes" actually grants.

How it works

Three kinds of extension

KindWhat it isContainment
ThemesJSON data: colours and a few sizesNo code at all. Nothing to grant.
Installed appsA package of JavaScript and CSS, loaded into an isolated frameA sandboxed frame with no network access and a permission-checking broker. Validated on Windows.
Connection adaptersA native executable that supplies files, a console, settings or custom servicesNone. Native code, running with your operating-system permissions.

An adapter is the one to think hardest about: installing it is like running any other program you downloaded. ShellCanvas reviews its identity and hashes its files, and says explicitly that a hash identifies content but does not authenticate a publisher.

What an app can ask for

An app declares permissions in its package; you see them, in plain language, before installing:

PermissionWhat the app may do
system.storageKeep its own local data and settings
system.dialogsShow message boxes and file pickers
system.networkSend data to API endpoints you configure for it
system.consoleOpen and control remote consoles
files.read, files.edit, files.createRead, change and create files on the connected host
files.manage, files.move, files.copyRename and delete, move, copy
files.upload, files.downloadTransfer files between your computer and the host
system.clipboard.read / .writeRead clipboard text, including content from other apps, or replace it
system.clipboard.image.read / .writeThe same for images
system.clipboard.files.read / .writeWork with files copied for transfer
host.settings.read / .writeRead or change settings the device exposes
services.<id>Call every method of one adapter's custom service

How a grant is enforced

Two independent checks stand between an app and an action:

  1. The grant. The desktop intersects what the package declares with what you approved. Anything else fails with denied, in the broker, not in the app.
  2. The capability. The connection must actually offer the service. A host without SFTP has no file capabilities, so file permissions grant nothing there.

An app therefore cannot widen its own access by asking again at runtime, and a permission you approved yesterday does not apply to a host that cannot serve it.

What no app ever receives

API keys it asked you to configure, the local paths you pick in a download dialog, native session handles, direct desktop IPC, browser network access, and any other app's data. App storage is keyed to the installation, so two apps cannot read each other's state.

Updates and removal

An update is reviewed like a new install, and newly requested permissions start unselected. Windows that are already open keep the version and grants they started with until they close. Removing an app also removes its local data and saved connections; a reinstall starts empty.

You can disable an app instead: it stops launching but keeps its data and its open windows.

Boundaries

  • Installed app isolation is validated on Windows, using a frame without same-origin privileges, a strict content policy with no network access, and a broker that checks every call. Other native platforms do not load installed app interfaces at all.
  • Containment of hostile code is not claimed. The boundary is designed to stop an app doing what it was not granted, not to withstand a determined attacker, and there are no CPU or memory limits.
  • Adapters are outside all of that. They are trusted native programs; app permissions do not constrain them.
  • Bundled apps — Files, Terminal, Editor, Host details — are part of ShellCanvas itself. Their declarations prevent accidental undeclared calls; they are not a security boundary.
  • A package hash is not a signature. It identifies reviewed bytes, nothing about who produced them.

ShellCanvas documentation