Capability matrix
Use this page when you need to answer a practical question: can this feature work on the platform I am targeting, and what extra work is required before it behaves like a production feature?
A Fission capability has three separate pieces:
The typed API is what shared app code calls. For example, ctx.effects.camera().capture_photo(...) records a camera request without importing Android, iOS, web, or desktop camera APIs into your reducer.
The provider is the shell-side Rust implementation. It receives the typed request and maps it to the current host: an operating-system API, browser API, hardware SDK, service worker, device manager, or a typed unsupported error.
Packaging configuration is the native metadata that lets the platform allow the feature in an installed app. Examples include Android permissions, iOS usage strings, entitlements, URL schemes, associated domains, service-worker files, Windows package capabilities, macOS bundle keys, Linux portal dependencies, or store-side setup.
When a cell says Provider, the Fission API is present and the platform has a realistic implementation route, but the app or shell still needs the concrete provider and the package metadata for that product. For example, a desktop camera app needs a CameraHost implementation and, on packaged macOS builds, camera usage text in the app bundle. Without the provider the call returns unsupported; without the package metadata the operating system may deny access.
A cell marked Yes means there is a normal product path for the feature on that target. Limited means support depends heavily on browser, hardware, distribution, policy, or optional platform services. No general API means the platform does not expose a normal app-level API for that feature.
Desktop support deserves a careful reading. Windows and macOS increasingly expose camera, microphone, notifications, Bluetooth, local authentication, clipboard, location, and volume APIs that a Fission host can connect to. Linux often has an equivalent route, but it may depend on portals, desktop services, BlueZ, NetworkManager, PulseAudio or PipeWire, and distribution packaging. For that reason Linux cells are more often marked limited or provider-driven.
Web biometrics deserve a separate note. When a site appears to authenticate with a fingerprint, it is usually using a passkey or WebAuthn credential. The browser or password manager may use fingerprint or face recognition to unlock the credential, but the web app receives a credential assertion rather than direct biometric access. Fission models that as the separate Passkeys credential capability, not as raw biometric scanning.
For conceptual guidance, read Platform capabilities. For lower-level request, provider, and configuration details, start with Platform capabilities reference.
Finished capability flow
A complete Capability matrix integration has all of these pieces in place:
| |
|---|
| fission.toml declares the capability and generated platform files contain the permission text, manifest entry, entitlement, domain, or protocol metadata the target needs. |
| App state records the in-flight flag, the successful value, and the user-facing error separately. |
| One reducer starts the host request, one handles success, and one handles denial, unsupported hosts, cancellation, or provider errors. |
| The shell registers a real provider for production and a memory provider for tests. |
| At least one test covers success and one covers permission denial or unsupported host behavior. |
Diagnose capability failures
Capability failures should be safe to retry and easy to explain. Start by checking fission.toml, then run fission doctor, then inspect the generated target files. If the provider is missing, the request should return an unsupported error. If the provider exists but the platform configuration is wrong, the OS or browser will usually deny the request before the provider can complete it. Keep those cases distinct in the UI so users know whether they can retry, change settings, connect hardware, or choose another path.