mobiler-core 0.35.1

Mobiler runtime: the MobilerApp trait + Crux shell adapter over the fixed UI ABI
Documentation

mobiler-core

Mobiler's runtime — the developer-facing API.

Implement MobilerApp with your typed events, model, and a view built from the widget builders. Mobiler wraps it in MobilerShell, a Crux app speaking the fixed UI ABI (mobiler-ui) — so the native shell stays generic and you never touch the wire protocol.

impl MobilerApp for Counter {
    type Event = Msg;
    type Model = Model;

    fn update(&self, msg: Msg, model: &mut Model, cx: &mut Cx<Msg>) {
        match msg {
            Msg::Increment => model.count += 1,
            Msg::Greet => cx.notify("toast", "show", "Hi from Rust!"),
        }
    }

    fn view(&self, model: &Model) -> Widget {
        column(vec![
            title("Counter"),
            text(format!("count: {}", model.count)),
            button("Increment", ButtonStyle::Filled, Msg::Increment),
        ])
    }
}

pub type App = MobilerShell<Counter>;
  • Capabilities via Cx — device APIs as async effects, reached through typed helpers in update/input. Built in: HTTP, storage, clipboard, share, browser, toast, device info, haptics, a confirm dialog, the photo picker, camera capture, the date picker, and the time picker. Each is an opaque {plugin, op, input} effect, so adding one never changes the wire ABI; the generic shell fulfils them natively on Android, iOS, and the web.
  • Navigation — a core-owned Nav<Route> stack + nav_scaffold.
  • Theme-as-data — dark mode, brand color, corner radius, and a Density (Compact/Comfortable/Large — Large scales up control sizing and spacing for touch) all flow through the Widget tree.
  • Charts — typed builders for data viz: bar_chart/line_chart, multi-series chart/stacked_bar_chart/pct_stacked_bar_chart, pie_chart/donut_chart, fitness-style rings_chart, a gauge_chart, and region_chart (variable-width coverage-gap bands).
  • Live native views — builders for native-engine widgets the shell hosts: video_player (AVPlayer / ExoPlayer / <video>), web_view, pdf_view, and map (MapKit / MapLibre — markers + tap events, no API key).
  • Accessibilitya11y(child, label) (+ with_a11y_hint / with_a11y_role) names any widget for VoiceOver / TalkBack.
  • Localizationformat (synchronous, ICU-free locale-aware currency / number / date formatting via Locale + Currency, plus weekday_short / month_year and Locale::week_start for a localized calendar_in) and i18n (negotiate a device language + a tiny fallback-aware Catalog for translating UI strings in view).

Most users go through the mobiler CLI, which scaffolds a project wired to this crate and a generic native shell.

License

Dual-licensed under either MIT or Apache-2.0, at your option.