Skip to main content

Crate cranpose_services

Crate cranpose_services 

Source
Expand description

§Cranpose services

cranpose-services defines platform service contracts for Cranpose applications. The crate groups APIs for HTTP, files and folders, URI handlers, audio and media, camera, image pickers, haptics, heart rate, accessibility, device and power information, app updates, purchases, navigation, preferences, and shared content.

Most applications use these APIs through the cranpose facade. Add cranpose-services directly when an application provides a custom backend or needs a service contract outside the facade. Platform adapters register implementations through each module’s set_platform_* function. Composition-local services use local_* functions and Provide* composables; process-wide services use plain functions.

§Example: read purchase state

Configure product IDs at startup, then read the current snapshot and react to store updates from app code:

use cranpose_services::purchases;

fn configure_store() {
    purchases::configure(&["com.example.pro"]);
}

fn pro_is_owned() -> bool {
    purchases::store_state().owns("com.example.pro")
}

fn current_store_phase() -> purchases::StorePhase {
    purchases::store_state().phase
}

Purchase events arrive asynchronously through rememberPurchaseEvents or take_event. Store platform setup in the adapter. See the purchases API.

§Example: read the wearer’s heart rate

The heart-rate sensor is in a build only when its build script declares cranpose_capabilities::Use::heart_rate(reason), and the person is asked only when the application asks:

use cranpose_services::{rememberHeartRate, request_heart_rate_permission};

// On a screen that reads the pulse: the sensor runs while this is composed
// and `active`, and observing it never prompts.
fn pulse(active: bool) -> Option<f32> {
    rememberHeartRate(active).get().live_bpm()
}

// When the person chooses the feature that reads it, never on the app's own.
fn on_choose_heart_mode() {
    request_heart_rate_permission();
}

An application that has not asked sees HeartRateStatus::NeedsPermission, and one that was refused sees Denied. live_bpm() is a reading only while the sensor is on the skin. On Android the service is compiled into the app only when declared, and the sensor pauses with the activity; other platforms report Unavailable.

§Saving state

rememberSaveable(key, saver, initial) restores once when its composition slot is created. Native hosts save the latest values before leaving the foreground; the browser host saves when its page loses foreground visibility or focus. Changes do not require another frame to be included. Ordinary recomposition does not read, serialize or write preferences again.

Call run_durable_saves(deadline) on the composition thread for an explicit save boundary before discarding a composition or finishing a critical operation. Completed means all registered callbacks and preference writes succeeded. Failed is retryable; TimedOut allows an already running batch to finish. Abrupt termination before a successful save can lose pending changes. Browser storage is synchronous, so its deadline can be reported but cannot interrupt I/O.

DurableSaveEffect and register_durable_save callbacks return Result<(), DurableSaveError>. Preference-producing callbacks should use register_preference_save: values for the same store are written as a batch. Native saving uses at most one worker and does not queue obsolete batches.

FilePreferences coordinates all instances opening the same canonical file within the process. Writes synchronize the replacement file; Unix also synchronizes its directory. If a write fails, reads include pending changes and PreferencesStore::flush() retries them. Other processes must not modify that file concurrently. Custom backends implement set_many to batch their writes.

§Features and platform adapters

The default feature set is empty. Select only the host integrations the application uses:

FeatureIntegration
http-nativeNative HTTP client with platform TLS support
web-httpBrowser HTTP client
file-picker-nativeNative desktop file and folder picker
file-picker-webBrowser file and folder picker
uri-native, uri-android, uri-webURI open requests for each host
preferences-webBrowser local storage
system-theme, system-theme-webNative or browser theme detection
notifier-nativeDesktop notifications through host commands

Android and iOS file pickers register through the cranpose platform backends. The cranpose facade selects service features for its platform; app authors can also choose features directly for custom hosts. cranpose-audio implements short sound playback, cranpose-media implements native long-form playback, and cranpose-capabilities writes app permission declarations.

Re-exports§

pub use accessibility_options::ProvideAccessibilityOptions;
pub use accessibility_options::local_accessibility_options;
pub use accessibility_state::AccessibilityState;
pub use accessibility_state::ProvideAccessibilityState;
pub use accessibility_state::local_accessibility_state;
pub use accessibility_state::platform_accessibility_state;
pub use accessibility_state::set_platform_accessibility_state;
pub use app_info::AppInfo;
pub use app_info::AppInfoRef;
pub use app_info::app_info;
pub use app_info::build_version;
pub use app_info::clear_platform_app_info;
pub use app_info::set_platform_app_info;
pub use app_info::version_name;
pub use app_update::AppUpdateCapabilities;
pub use app_update::AppUpdateError;
pub use app_update::AppUpdateObserver;
pub use app_update::AppUpdateStatus;
pub use app_update::AppUpdater;
pub use app_update::AppUpdaterRef;
pub use app_update::DigestAlgorithm;
pub use app_update::DigestVerifier;
pub use app_update::GitHubReleaseUpdate;
pub use app_update::PackageDigest;
pub use app_update::UpdatePackage;
pub use app_update::app_update_capabilities;
pub use app_update::app_update_checks_supported;
pub use app_update::app_update_status;
pub use app_update::app_updates_supported;
pub use app_update::check_for_app_update;
pub use app_update::clear_platform_app_updater;
pub use app_update::install_app_update;
pub use app_update::observe_app_update_status;
pub use app_update::set_app_update_status;
pub use app_update::set_platform_app_updater;
pub use app_update::sha256_hex;
pub use app_update::verify_package;
pub use async_io::ChunkChannel;
pub use async_io::ChunkNext;
pub use async_io::ChunkStream;
pub use async_io::MAX_PENDING_CHUNKS;
pub use async_io::Signal;
pub use async_io::SignalWait;
pub use audio::AudioBus;
pub use audio::AudioClip;
pub use audio::AudioError;
pub use audio::AudioPlayer;
pub use audio::AudioPlayerRef;
pub use audio::NoopAudioPlayer;
pub use audio::PlaybackParams;
pub use audio::ProvideAudio;
pub use audio::SoundBank;
pub use audio::SoundBankEntry;
pub use audio::SoundBankFailure;
pub use audio::SoundId;
pub use audio::SoundSpec;
pub use audio::VoiceId;
pub use audio::clear_platform_audio;
pub use audio::default_audio;
pub use audio::local_audio;
pub use audio::rememberSoundBank;
pub use audio::set_platform_audio;
pub use background::BackgroundActivity;
pub use background::BackgroundActivityRef;
pub use background::BackgroundWorkLease;
pub use background::acquire_background_work;
pub use background::background_active;
pub use background::background_activity;
pub use background::clear_platform_background_activity;
pub use background::set_platform_background_activity;
pub use bundled_assets::BundledAssetEntry;
pub use bundled_assets::BundledAssetInstallOutcome;
pub use bundled_assets::BundledAssetInstallSpec;
pub use bundled_assets::install_bundled_asset_set;
pub use bundled_assets::BundledAssetError;
pub use bundled_assets::BundledAssetReader;
pub use bundled_assets::BundledAssets;
pub use bundled_assets::BundledAssetsRef;
pub use bundled_assets::StreamingAssetReader;
pub use bundled_assets::bundled_assets;
pub use bundled_assets::clear_platform_bundled_assets;
pub use bundled_assets::set_platform_bundled_assets;
pub use camera::Camera;
pub use camera::CameraError;
pub use camera::CameraFrame;
pub use camera::CameraLens;
pub use camera::CameraLenses;
pub use camera::CameraObserver;
pub use camera::CameraRef;
pub use camera::CameraState;
pub use camera::CameraStill;
pub use camera::FlashMode;
pub use camera::FrameFormat;
pub use camera::LensFacing;
pub use camera::UprightRgba;
pub use camera::camera;
pub use camera::camera_lenses;
pub use camera::camera_state;
pub use camera::camera_supported;
pub use camera::capture_camera_still;
pub use camera::clear_platform_camera;
pub use camera::dropped_camera_frames;
pub use camera::latest_camera_frame;
pub use camera::observe_camera_frames;
pub use camera::observe_camera_lenses;
pub use camera::observe_camera_state;
pub use camera::observe_camera_stills;
pub use camera::publish_camera_frame;
pub use camera::publish_camera_lenses;
pub use camera::publish_camera_state;
pub use camera::publish_camera_still;
pub use camera::record_dropped_camera_frame;
pub use camera::rememberCameraFrames;
pub use camera::rememberCameraLenses;
pub use camera::rememberCameraState;
pub use camera::rememberCameraStills;
pub use camera::request_camera_still;
pub use camera::set_platform_camera;
pub use camera::start_camera;
pub use camera::stop_camera;
pub use content::BytesContent;
pub use content::Content;
pub use content::ContentChannel;
pub use content::ContentEntry;
pub use content::ContentError;
pub use content::ContentFolder;
pub use content::ContentFolderRef;
pub use content::ContentFuture;
pub use content::ContentHandle;
pub use content::ContentMetadata;
pub use content::ContentReader;
pub use content::ContentReaderRef;
pub use content::ContentResolver;
pub use content::ContentResolverRef;
pub use content::ContentSink;
pub use content::ContentSinkRef;
pub use content::ContentStream;
pub use content::ContentStreamRef;
pub use content::DEFAULT_CHUNK_LEN;
pub use content::ReadyFolder;
pub use content::clear_platform_content_resolver;
pub use content::collect_stream;
pub use content::drain_reader;
pub use content::folder_files;
pub use content::percent_decode;
pub use content::percent_decode_lossy;
pub use content::resolve_content;
pub use content::set_platform_content_resolver;
pub use content::write_all;
pub use content::FileContent;
pub use content::FileFolder;
pub use content::FileSink;
pub use content::file_content;
pub use content::file_folder;
pub use device_info::DeviceInfo;
pub use device_info::DeviceInfoRef;
pub use device_info::clear_platform_device_info;
pub use device_info::device_info;
pub use device_info::release_free_memory;
pub use device_info::set_platform_device_info;
pub use file_picker::FileFilter;
pub use file_picker::FilePicker;
pub use file_picker::FilePickerError;
pub use file_picker::FilePickerOptions;
pub use file_picker::FilePickerRef;
pub use file_picker::PickerFuture;
pub use file_picker::ProvideFilePicker;
pub use file_picker::SaveDocumentRequest;
pub use file_picker::clear_platform_file_picker;
pub use file_picker::default_file_picker;
pub use file_picker::local_file_picker;
pub use file_picker::set_platform_file_picker;
pub use github_release_updater::GitHubAppUpdater;
pub use haptics::HapticEffect;
pub use haptics::HapticError;
pub use haptics::HapticFeedback;
pub use haptics::HapticPattern;
pub use haptics::Haptics;
pub use haptics::HapticsRef;
pub use haptics::ProvideHaptics;
pub use haptics::clear_platform_haptics;
pub use haptics::default_haptics;
pub use haptics::local_haptics;
pub use haptics::set_platform_haptics;
pub use heart_rate::HeartRate;
pub use heart_rate::HeartRateError;
pub use heart_rate::HeartRateMonitor;
pub use heart_rate::HeartRateMonitorRef;
pub use heart_rate::HeartRatePermission;
pub use heart_rate::HeartRateReader;
pub use heart_rate::HeartRateStatus;
pub use heart_rate::clear_platform_heart_rate;
pub use heart_rate::heart_rate;
pub use heart_rate::heart_rate_available;
pub use heart_rate::heart_rate_permission;
pub use heart_rate::observe_heart_rate;
pub use heart_rate::publish_heart_rate;
pub use heart_rate::publish_heart_rate_permission;
pub use heart_rate::rememberHeartRate;
pub use heart_rate::request_heart_rate_permission;
pub use heart_rate::set_platform_heart_rate;
pub use host::DEFAULT_DURABLE_SAVE_DEADLINE;
pub use host::DurableSaveEffect;
pub use host::DurableSaveError;
pub use host::DurableSaveOutcome;
pub use host::DurableSaveRegistration;
pub use host::HostController;
pub use host::HostControllerRef;
pub use host::LifecycleEvent;
pub use host::LifecycleObserver;
pub use host::LifecycleState;
pub use host::PlatformDirectories;
pub use host::PlatformDirectoryError;
pub use host::ProvideLifecycle;
pub use host::advance_lifecycle;
pub use host::application_directories;
pub use host::application_id;
pub use host::background_app;
pub use host::clear_application_id;
pub use host::clear_host_controller;
pub use host::current_lifecycle_state;
pub use host::dispatch_lifecycle;
pub use host::dispatch_lifecycle_state;
pub use host::durable_save_deadline;
pub use host::exit_app;
pub use host::host_controller;
pub use host::local_lifecycle_state;
pub use host::observe_lifecycle;
pub use host::register_durable_save;
pub use host::register_preference_save;
pub use host::rememberLifecycleEvents;
pub use host::rememberLifecycleState;
pub use host::run_durable_saves;
pub use host::set_application_id;
pub use host::set_host_controller;
pub use host::set_keep_screen_on;
pub use host::window_lifecycle_state;
pub use host_messages::HostMessage;
pub use host_messages::HostMessageObserver;
pub use host_messages::clear_host_messages;
pub use host_messages::clear_host_outbox;
pub use host_messages::install_host_outbox;
pub use host_messages::observe_host_messages;
pub use host_messages::publish_host_message;
pub use host_messages::rememberHostMessages;
pub use host_messages::send_to_host;
pub use host_surface::HostSurface;
pub use host_surface::HostSurfaceObserver;
pub use host_surface::HostSurfaceRef;
pub use host_surface::HostSurfaceSize;
pub use host_surface::ResizeRefused;
pub use host_surface::clear_platform_host_surface;
pub use host_surface::host_surface;
pub use host_surface::host_surface_size;
pub use host_surface::observe_host_surface_size;
pub use host_surface::publish_host_surface_size;
pub use host_surface::rememberHostSurfaceSize;
pub use host_surface::request_host_surface_size;
pub use host_surface::set_platform_host_surface;
pub use http::BytesBody;
pub use http::HttpBody;
pub use http::HttpBodyRef;
pub use http::HttpClient;
pub use http::HttpClientRef;
pub use http::HttpControl;
pub use http::HttpError;
pub use http::HttpFuture;
pub use http::HttpMethod;
pub use http::HttpProgress;
pub use http::HttpRequest;
pub use http::HttpResponse;
pub use http::ProgressHandler;
pub use http::StubAnswer;
pub use http::StubHttpClient;
pub use http::default_http_client;
pub use http::http_body_ref;
pub use http::local_http_client;
pub use http::map_ordered_concurrent;
pub use image_picker::IMAGE_EXTENSIONS;
pub use image_picker::ImagePicker;
pub use image_picker::ImagePickerError;
pub use image_picker::ImagePickerRef;
pub use image_picker::ImageSource;
pub use image_picker::ProvideImagePicker;
pub use image_picker::clear_platform_image_picker;
pub use image_picker::default_image_picker;
pub use image_picker::local_image_picker;
pub use image_picker::set_platform_image_picker;
pub use incoming_share::IncomingContent;
pub use incoming_share::IncomingContentObserver;
pub use incoming_share::IncomingSource;
pub use incoming_share::clear_incoming_content;
pub use incoming_share::observe_incoming_content;
pub use incoming_share::publish_incoming_content;
pub use incoming_share::rememberIncomingContent;
pub use launch_args::LaunchArgValue;
pub use launch_args::LaunchArgs;
pub use launch_args::LaunchArgsRef;
pub use launch_args::ProvideLaunchArgs;
pub use launch_args::clear_platform_launch_args;
pub use launch_args::is_debuggable;
pub use launch_args::isDebuggable;
pub use launch_args::launch_args;
pub use launch_args::launch_args_from_command_line;
pub use launch_args::local_launch_args;
pub use launch_args::set_platform_launch_args;
pub use launcher::LauncherResult;
pub use launcher::OpenFileLauncher;
pub use launcher::OpenFilesLauncher;
pub use launcher::OpenFolderLauncher;
pub use launcher::SaveDocumentLauncher;
pub use launcher::WritableFolderLauncher;
pub use launcher::clear_launcher_state;
pub use launcher::rememberOpenFileLauncher;
pub use launcher::rememberOpenFilesLauncher;
pub use launcher::rememberOpenFolderLauncher;
pub use launcher::rememberSaveDocumentLauncher;
pub use launcher::rememberWritableFolderLauncher;
pub use media::AudioFocus;
pub use media::DUCKED_GAIN;
pub use media::EqualizerBand;
pub use media::EqualizerSettings;
pub use media::MediaArtwork;
pub use media::MediaCapabilities;
pub use media::MediaCommand;
pub use media::MediaError;
pub use media::MediaItem;
pub use media::MediaMetadata;
pub use media::MediaObserver;
pub use media::MediaPlayer;
pub use media::MediaPlayerRef;
pub use media::MediaSamples;
pub use media::MediaSourceHandle;
pub use media::MediaSourceOpener;
pub use media::MediaSourceOpenerRef;
pub use media::OCTAVE_BAND_CENTERS_HZ;
pub use media::PlaybackProgress;
pub use media::PlaybackState;
pub use media::audio_focus;
pub use media::clear_platform_media_player;
pub use media::clear_platform_media_source_opener;
pub use media::current_media_item;
pub use media::dropped_media_samples;
pub use media::latest_media_samples;
pub use media::media_capabilities;
pub use media::media_equalizer;
pub use media::media_equalizer_bands;
pub use media::media_playback_supported;
pub use media::media_player;
pub use media::media_volume;
pub use media::observe_audio_focus;
pub use media::observe_media_commands;
pub use media::observe_media_samples;
pub use media::observe_playback_progress;
pub use media::observe_playback_state;
pub use media::octave_equalizer_bands;
pub use media::open_media;
pub use media::open_media_source;
pub use media::path_from_uri;
pub use media::pause_media;
pub use media::play_media;
pub use media::playback_progress;
pub use media::playback_state;
pub use media::probe_media_duration;
pub use media::publish_audio_focus;
pub use media::publish_media_command;
pub use media::publish_media_samples;
pub use media::publish_playback_progress;
pub use media::publish_playback_state;
pub use media::record_dropped_media_samples;
pub use media::rememberAudioFocus;
pub use media::rememberMediaCommands;
pub use media::rememberMediaSamples;
pub use media::rememberPlaybackProgress;
pub use media::rememberPlaybackState;
pub use media::seek_media;
pub use media::seek_media_fraction;
pub use media::set_media_analysis_enabled;
pub use media::set_media_balance;
pub use media::set_media_equalizer;
pub use media::set_media_looping;
pub use media::set_media_metadata;
pub use media::set_media_speed;
pub use media::set_media_volume;
pub use media::set_platform_media_player;
pub use media::set_platform_media_source_opener;
pub use media::stop_media;
pub use media::toggle_media;
pub use media::uri_for_path;
pub use memory_pressure::MemoryPressure;
pub use memory_pressure::MemoryPressureObserver;
pub use memory_pressure::observe_memory_pressure;
pub use memory_pressure::publish_memory_pressure;
pub use memory_pressure::rememberMemoryPressure;
pub use microphone_permission::MicrophoneAccess;
pub use microphone_permission::MicrophonePermission;
pub use microphone_permission::MicrophonePermissionObserver;
pub use microphone_permission::microphone_permission;
pub use microphone_permission::observe_microphone_permission;
pub use microphone_permission::open_microphone_settings;
pub use microphone_permission::publish_microphone_permission;
pub use microphone_permission::rememberMicrophonePermission;
pub use microphone_permission::request_microphone_permission;
pub use microphone_permission::set_platform_microphone_access;
pub use microphone_standby::MicrophoneStandby;
pub use microphone_standby::MicrophoneStandbyLease;
pub use microphone_standby::hold_microphone_standby;
pub use microphone_standby::microphone_standby_available;
pub use microphone_standby::set_platform_microphone_standby;
pub use navigation::BackHandler;
pub use navigation::BackRequestObserver;
pub use navigation::back_interception_enabled;
pub use navigation::exit_requested;
pub use navigation::observe_back_requests;
pub use navigation::push_back_request;
pub use navigation::request_exit;
pub use navigation::set_back_interception;
pub use navigation::take_back_requests;
pub use navigation::take_exit_request;
pub use network_status::NetworkMonitor;
pub use network_status::NetworkMonitorRef;
pub use network_status::NetworkStatus;
pub use network_status::clear_platform_network_monitor;
pub use network_status::network_monitor;
pub use network_status::network_status;
pub use network_status::set_platform_network_monitor;
pub use notifier::Notifier;
pub use notifier::NotifierRef;
pub use notifier::NotifyRequest;
pub use notifier::ProvideNotifier;
pub use notifier::clear_platform_notifier;
pub use notifier::default_notifier;
pub use notifier::local_notifier;
pub use notifier::set_platform_notifier;
pub use peer::ByteSource;
pub use peer::BytesSource;
pub use peer::FetchResult;
pub use peer::PeerError;
pub use peer::PeerServer;
pub use peer::SourceResolver;
pub use peer::content_length;
pub use peer::fetch_range;
pub use peer::fetch_to_writer;
pub use power::BatteryStatus;
pub use power::PowerCapabilities;
pub use power::PowerMonitor;
pub use power::PowerMonitorRef;
pub use power::PowerObserverRegistration;
pub use power::PowerReading;
pub use power::PowerState;
pub use power::ThermalState;
pub use power::clear_platform_power_monitor;
pub use power::observe_power_state;
pub use power::power_capabilities;
pub use power::power_monitor;
pub use power::power_state;
pub use power::publish_power_state;
pub use power::rememberPowerState;
pub use power::set_platform_power_monitor;
pub use preferences::FilePreferences;
pub use preferences::MemoryPreferences;
pub use preferences::PreferencesError;
pub use preferences::PreferencesRef;
pub use preferences::PreferencesStore;
pub use preferences::Saver;
pub use preferences::clear_platform_preferences;
pub use preferences::preferences;
pub use preferences::rememberSaveable;
pub use preferences::set_platform_preferences;
pub use purchases::Product;
pub use purchases::PurchaseEvent;
pub use purchases::Purchases;
pub use purchases::PurchasesRef;
pub use purchases::StoreObserver;
pub use purchases::StorePhase;
pub use purchases::StoreState;
pub use purchases::clear_platform_purchases;
pub use purchases::note_store_news;
pub use purchases::observe_store_news;
pub use purchases::purchases;
pub use purchases::rememberPurchaseEvents;
pub use purchases::rememberStoreState;
pub use purchases::set_platform_purchases;
pub use purchases::store_available;
pub use purchases::store_state;
pub use share_sheet::ProvideShareSheet;
pub use share_sheet::ShareContent;
pub use share_sheet::ShareError;
pub use share_sheet::ShareSheet;
pub use share_sheet::ShareSheetRef;
pub use share_sheet::clear_platform_share_sheet;
pub use share_sheet::default_share_sheet;
pub use share_sheet::local_share_sheet;
pub use share_sheet::set_platform_share_sheet;
pub use theme::ProvideSystemTheme;
pub use theme::SystemTheme;
pub use theme::clear_platform_system_theme;
pub use theme::default_system_theme;
pub use theme::isSystemInDarkTheme;
pub use theme::local_system_theme;
pub use theme::set_platform_system_theme;
pub use uri_handler::ProvideUriHandler;
pub use uri_handler::UriHandler;
pub use uri_handler::UriHandlerError;
pub use uri_handler::UriHandlerRef;
pub use uri_handler::clear_platform_uri_handler;
pub use uri_handler::default_uri_handler;
pub use uri_handler::local_uri_handler;
pub use uri_handler::set_platform_uri_handler;
pub use wearable::WearableError;
pub use wearable::WearableEvent;
pub use wearable::WearablePeer;
pub use wearable::WearableReceiver;
pub use wearable::WearableStream;
pub use wearable::open_wearable_stream;
pub use wearable::publish_wearable_event;
pub use wearable::send_wearable_message;
pub use wearable::set_wearable_receiver;
pub use wearable::wearable_peers;
pub use writable_folder::FolderEntry;
pub use writable_folder::FolderError;
pub use writable_folder::FolderReader;
pub use writable_folder::FolderWriter;
pub use writable_folder::WritableFolderStore;
pub use writable_folder::WritableFolderStoreRef;
pub use writable_folder::open_writable_folder;
pub use writable_folder::set_writable_folder_store_factory;

Modules§

accessibility_options
The display options a person set in the system’s accessibility settings: larger text, less motion, less transparency, more contrast, bold text, inverted colors. The framework applies them on its own; an app reads them for what it draws itself.
accessibility_state
What the platform says about the assistive technology in use, for an app that speaks guidance, slows an automatic step down or drops a gesture-only path while a screen reader is on.
app_info
How the platform packaged this app: the version a user is shown, and the build version a store orders releases by.
app_update
Typed application update discovery, verification, and platform installation.
async_io
Waking a future from another thread.
audio
Sound effects and music — the audio analogue of haptics.
background
Background execution: ask the OS to keep running briefly after the app is backgrounded, so in-flight work (e.g. draining a recognition queue) can finish instead of being suspended immediately.
bundled_assets
Read-only assets packaged with the application.
camera
The live camera: what it is doing, the frames it is producing, and the stills it takes.
content
Streaming content: the single shape every byte source hands the application.
device_info
What the device has, and what this process is using of it.
file_picker
Native, cross-platform file, folder and document choosers.
github_release_updater
A portable AppUpdater that discovers a newer release from a GitHub repository’s release feed.
haptics
Haptic feedback — the framework analogue of Jetpack’s LocalHapticFeedback.
heart_rate
The wearer’s heart rate, from the device’s own sensor.
host
Framework-owned application-host state and controls.
host_messages
Messages between the application and the program embedding it.
host_surface
The surface the host gives the application, and what the application may ask of it.
http
image_picker
Photo/image picker: choose a single image from the user’s photo library.
incoming_share
Content another application shares into this one.
launch_args
Launch arguments — the typed parameters the app was started with.
launcher
Composition-owned launchers for the system choosers.
media
Media playback: one item at a time, observable rather than polled.
memory_pressure
Memory pressure the platform reports for this process.
microphone_permission
Permission to record from the microphone.
microphone_standby
Keeps the microphone usable while the application is in the background.
navigation
System “back” navigation requests.
network_status
Network status (connectivity + whether the connection is metered). Apps use it to defer or confirm large transfers on cellular/metered links.
notifier
Local notifications: ask permission and post user-visible notifications.
peer
Local-network peer streaming for Cranpose apps.
power
Device power and thermal state: observable, capability-aware, and explicit about what this platform cannot answer.
preferences
Small durable key/value storage, and the composition state built on it.
purchases
In-app purchases: products, prices and owned entitlements.
share_sheet
System share sheet: hand a file (and optional text) to the OS share UI so the user can send it to another app.
theme
uri_handler
wearable
Messages and byte streams between an application and the same application on the paired phone or watch: a watch app streams its microphone to the phone, and the phone sends its results back.
writable_folder
Cross-platform access to a user-chosen writable folder.

Structs§

AccessibilityOptions
What the person set in the system’s accessibility settings.

Functions§

platform_accessibility_options
What the platform last reported.
set_platform_accessibility_options
Installs what the platform reports. A backend calls this at start and on every change, and forces a root render when the answer is true, so the theme, the glass and the animations read the new options.
windowless_command
A Command for a helper program an application runs behind its window, such as reg, powershell or notify-send.