Concept | Public API | What it does |
|---|---|---|
Capability identity | CapabilityType<C> | Gives an operation a stable name and typed request/result contract. |
Operation contract | OperationCapability | Associates Request, Ok, and Err payload types with one host operation. |
Reducer entrypoint | ctx.effects.<group>() | Starts a typed request builder from a reducer. |
Result binding | .on_ok(...) and .on_err(...) | Chooses which actions the runtime dispatches after the host finishes. |
Provider registration | with_<name>_host(...) or AsyncRegistry::register_operation_capability(...) | Connects a shell implementation to the runtime. |
CLI declaration | fission add-capability <name> | Records the capability and updates generated platform files where Fission can do that safely. |
Group | Effect helper or entrypoint | Provider trait or host contract | Test provider or test entrypoint | Detailed reference |
|---|---|---|---|---|
Notifications | effects.notifications() | NotificationHost | MemoryNotificationHost | |
Deep links | inbound DeepLinkReceived | DeepLinkConfig and shell startup | startup deep-link tests | |
NFC | effects.nfc() | NfcHost | MemoryNfcHost | |
Biometrics | effects.biometrics() | BiometricHost | MemoryBiometricHost | |
Passkeys | effects.passkeys() | PasskeyHost | MemoryPasskeyHost | |
Barcode scanner | effects.barcode_scanner() | BarcodeScannerHost | MemoryBarcodeScannerHost | |
Camera and flashlight | effects.camera() | CameraHost | MemoryCameraHost | |
Clipboard | effects.clipboard() | ClipboardHost | MemoryClipboardHost | |
Geolocation | effects.geolocation() | GeolocationHost | MemoryGeolocationHost | |
Haptics | effects.haptics() | HapticHost | MemoryHapticHost | |
Microphone | effects.microphone() | MicrophoneHost | MemoryMicrophoneHost | |
Bluetooth | effects.bluetooth() | BluetoothHost | MemoryBluetoothHost | |
Wi-Fi | effects.wifi() | WifiHost | MemoryWifiHost | |
Volume control | effects.volume() | VolumeHost | MemoryVolumeHost |
CLI value | Android generated config | iOS generated config | Notes |
|---|---|---|---|
nfc | android.permission.NFC, optional NFC feature | NFCReaderUsageDescription, NFC reader-session entitlement | Desktop generally needs a hardware-provider decision. |
biometric | USE_BIOMETRIC, legacy USE_FINGERPRINT | NSFaceIDUsageDescription | Web sign-in should use passkeys, not raw biometric access. |
passkeys | Recorded only; Digital Asset Links are product-domain-specific | Recorded only; associated domains are product-domain-specific | The relying-party domain must match production identity. |
barcode-scanner | CAMERA, optional camera feature | NSCameraUsageDescription | Image-only decoding may not need camera access on every target. |
camera | CAMERA, optional camera/front/flash features | NSCameraUsageDescription | Desktop packages may need camera metadata. |
geolocation | ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION | NSLocationWhenInUseUsageDescription | Background location requires product-specific policy review. |
haptics | VIBRATE | none | Desktop haptics are hardware/provider-specific. |
microphone | RECORD_AUDIO | NSMicrophoneUsageDescription | Desktop packages may need microphone metadata. |
bluetooth | Legacy and Android 12+ Bluetooth permissions, optional Bluetooth features | NSBluetoothAlwaysUsageDescription | Some operations need additional product policy review. |
wifi | Wi-Fi/network permissions, nearby Wi-Fi, older fine-location permission, optional Wi-Fi features | Wi-Fi info/hotspot entitlements, location usage where needed | iOS and desktop Wi-Fi management is constrained. |
volume-control | MODIFY_AUDIO_SETTINGS | none | iOS and web do not expose broad system-volume control. |
File | Platform | Role |
|---|---|---|
all | Stores the canonical capabilities = [...] list and product-level references. | |
platforms/android/AndroidManifest.xml | Android | Declares permissions, features, activities, services, and intent filters where generated. |
platforms/ios/Info.plist | iOS | Declares user-facing usage descriptions for permission prompts. |
platforms/ios/Entitlements.plist | iOS | Declares platform capabilities Apple gates through entitlements. |
packaged app Contents/Info.plist | macOS | Declares usage descriptions for packaged desktop apps when a capability needs camera, microphone, location, Bluetooth, barcode camera access, associated domains, or other app services. |
Windows package manifest | Windows | Declares package identity, protocol activation, capabilities, and store-facing metadata for packaged apps. |
static/web host files | Web/site | Declares service workers, route handling, manifest metadata, icons, and secure-origin assumptions where needed. |
ctx.effects
.microphone()
.capture_audio(MicrophoneCaptureRequest::default())
.on_ok(ctx.effects.bind(
AudioCaptured(MicrophoneCapture::default()),
reduce_with!(on_audio_captured),
))
.on_err(ctx.effects.bind(
AudioCaptureFailed(MicrophoneError::default()),
reduce_with!(on_audio_failed),
));
Part | Requirement |
|---|---|
Stable name | Use a product-owned name such as com.example.payments.authorize. |
Typed request | Include only data the app is allowed to know and send to the host. |
Typed success | Return the smallest portable result the reducer needs. |
Typed error | Use stable code values plus human-readable message text. |
Provider | Register the host implementation during shell startup. |
Tests | Include success, unsupported, denied, cancelled, and malformed-request cases. |