# mob v0.8.3 - Table of Contents

> BEAM-on-device mobile framework for Elixir

## Pages

- [Mob](readme.md)
- [Changelog](changelog.md)

- Guides
  - [Why the BEAM?](why_beam.md)
  - [Getting Started](getting_started.md)
  - [First-Party Packages](packages.md)
  - [Architecture &amp; Prior Art](architecture.md)
  - [Screen Lifecycle](screen_lifecycle.md)
  - [Events](events.md)
  - [Event Model](event_model.md)
  - [Background Execution](background_execution.md)
  - [Components](components.md)
  - [Styling &amp; Native Rendering](styling.md)
  - [Theming](theming.md)
  - [Navigation](navigation.md)
  - [Device Capabilities](device_capabilities.md)
  - [Mobile Surface Matrix](mobile_surface_matrix.md)
  - [Permissions](permissions.md)
  - [Native Extensions (NIFs, features)](native_extensions.md)
  - [Writing a Plugin](plugins.md)
  - [DNS on iOS](dns_on_ios.md)
  - [Push Notifications](push_notifications.md)
  - [Data &amp; Persistence](data.md)
  - [Testing](testing.md)
  - [Tooling &amp; Formatting](tooling.md)
  - [Publishing to App Store / TestFlight](publishing.md)
  - [Troubleshooting](troubleshooting.md)
  - [Device Support Matrix](support_matrix.md)
  - [LiveView Mode](liveview.md)
  - [iOS Physical Devices](ios_physical_device.md)
  - [Agentic Coding](agentic_coding.md)

- Plugins
  - [Plugins — Manifest Reference](mob_plugins.md)
  - [Plugins — Security &amp; Trust](mob_plugin_security.md)
  - [Styles — Manifest Reference](mob_styles.md)
  - [Fonts — Design Reference](mob_fonts.md)

## Modules

- [Mob.Agent.Receipt](Mob.Agent.Receipt.md): What one action did, and which layer is answerable if it did nothing.
- [Mob.Agent.Receipts](Mob.Agent.Receipts.md): A bounded record of recent action receipts, and the telemetry bridge.
- [Mob.Agent.Receipts.Owner](Mob.Agent.Receipts.Owner.md): Owns the receipts ETS table, and does nothing else.
- [Mob.Alert](Mob.Alert.md): Native alert dialogs, action sheets, and toast messages.
- [Mob.Canvas](Mob.Canvas.md): Drawing-op constructors for `Mob.UI.canvas/1`.
- [Mob.Certs](Mob.Certs.md): CA-certificate loading for mob apps. Companion to `Mob.DNS` — same
shape: a small wrapper documenting and working around something OTP
assumes about the OS that Android doesn't satisfy.
- [Mob.Component](Mob.Component.md): Behaviour for native view components.
- [Mob.DNS](Mob.DNS.md): Hostname → IP resolution that works around BEAM's broken DNS path
on iOS and physical Android devices.
- [Mob.Defect](Mob.Defect.md): Entry points that convert what the framework's detectors produce into
capsules on the defect bus.
- [Mob.Defect.Bus](Mob.Defect.Bus.md): The bounded record of defects the framework has emitted, and the fanout to
whoever subscribed to hear about them.
- [Mob.Defect.Bus.Owner](Mob.Defect.Bus.Owner.md): Owns `Mob.Defect.Bus`'s ETS tables and the subscriber registry.
- [Mob.Defect.Capsule](Mob.Defect.Capsule.md): A defect, in the shape a consumer can act on.
- [Mob.Defect.Sinks.Dev](Mob.Defect.Sinks.Dev.md): A defect sink that formats every emitted capsule as a Logger line.
- [Mob.Device](Mob.Device.md): Cross-platform device events and queries.
- [Mob.Device.Android](Mob.Device.Android.md): Android-specific device events. Symmetrical with `Mob.Device.IOS`.
- [Mob.Device.IOS](Mob.Device.IOS.md): iOS-specific device events. Subscribers receive events that either have no
Android counterpart (e.g. `:protected_data_did_become_available`) or carry
extra iOS fidelity beyond what `Mob.Device` exposes cross-platform.
- [Mob.Diag](Mob.Diag.md): Runtime diagnostics that run inside a Mob app's BEAM. Designed to be
invoked via Erlang RPC from a developer's machine to inspect the
actual state of a deployed app.
- [Mob.Differential](Mob.Differential.md): Compare two `Mob.Test.view_tree/1` snapshots and report the first divergence.
- [Mob.Event](Mob.Event.md): The unified event emission API for Mob.
- [Mob.Event.Address](Mob.Event.Address.md): Canonical address for an event in the Mob view tree.
- [Mob.Event.Bridge](Mob.Event.Bridge.md): Translates legacy event shapes (`{:tap, tag}`, `{:change, tag, value}`,
`{:tap, {:list, id, :select, index}}`) into the canonical
`{:mob_event, %Address{}, event, payload}` envelope.
- [Mob.Event.Component](Mob.Event.Component.md): Behaviour for **stateful** event-owning components.
- [Mob.Event.Target](Mob.Event.Target.md): Resolves a `target:` spec to a concrete delivery pid.
- [Mob.Event.Throttle](Mob.Event.Throttle.md): Throttle / debounce config for high-frequency event subscriptions.
- [Mob.Event.Trace](Mob.Event.Trace.md): Live tracing of Mob events for IEx debugging.
- [Mob.Font](Mob.Font.md): Font-name utilities backing the theme system's `fonts:` token map — see
`Mob.Theme` for the `fonts:` / `font_fallback:` fields these support.

- [Mob.Invariant](Mob.Invariant.md): Checks the framework can make about itself, and the rule that stops them
becoming noise.
- [Mob.Invariant.Builtins](Mob.Invariant.Builtins.md): The checks the framework ships with, and an honest list of the ones it does
not yet.
- [Mob.Invariant.Owner](Mob.Invariant.Owner.md): Owns the invariant registry and violation tables.
- [Mob.Invariant.Violation](Mob.Invariant.Violation.md): One confirmed invariant breach.
- [Mob.LiveView](Mob.LiveView.md): Bridge between Phoenix LiveView and the Mob native WebView.
- [Mob.PostMortem](Mob.PostMortem.md): Collect the post-mortems the OS and the BEAM leave behind when a
process dies, and put them onto `Mob.Defect.Bus` as capsules.
- [Mob.PostMortem.Android](Mob.PostMortem.Android.md): `ApplicationExitInfo`-backed post-mortem ingest for Android.
- [Mob.PostMortem.BeamCrashDump](Mob.PostMortem.BeamCrashDump.md): Scan for `erl_crash.dump` files the BEAM leaves behind, and turn each into
a defect capsule.
- [Mob.PostMortem.IOS](Mob.PostMortem.IOS.md): MetricKit-backed post-mortem ingest for iOS.
- [Mob.PostMortem.Registry](Mob.PostMortem.Registry.md): A one-shot record of post-mortem artifacts we have already emitted a
capsule for.
- [Mob.PostMortem.Registry.Owner](Mob.PostMortem.Registry.Owner.md): Owns the ETS table `Mob.PostMortem.Registry` writes to.
- [Mob.Registry](Mob.Registry.md): Maps component names (atoms) to their platform-specific NIF constructors.
- [Mob.ScreenCase.View](Mob.ScreenCase.View.md): A screen under test. Two backends, same query/assertion surface
- [Mob.Speech](Mob.Speech.md): Text-to-speech. No permission required on either platform.
- [Mob.Storage](Mob.Storage.md): App-local file storage.
- [Mob.Storage.Android](Mob.Storage.Android.md): Android-specific storage locations and MediaStore integration.
- [Mob.Storage.Apple](Mob.Storage.Apple.md): iOS-specific storage locations and media library integration.
- [Mob.Theme.AdaptiveWatcher](Mob.Theme.AdaptiveWatcher.md): GenServer that re-resolves the active theme when the OS appearance flips.
- [Mob.Torch](Mob.Torch.md): Rear-camera torch (flashlight) on/off. No permission required on either
platform — the torch is toggled directly, without opening a camera session.
- [Mob.VendorUsb](Mob.VendorUsb.md): Raw USB host access via vendor bulk endpoints. **Android only.**
- [Mob.WebView](Mob.WebView.md): Bidirectional JS bridge for the native WebView component.

- Core
  - [Mob](Mob.md): Mob — BEAM-on-device mobile framework for Elixir.
  - [Mob.App](Mob.App.md): Behaviour for Mob application entry point.
  - [Mob.Screen](Mob.Screen.md): Behaviour and GenServer wrapper for a Mob screen.
  - [Mob.ScreenState](Mob.ScreenState.md): Persistent store for screen assigns.
  - [Mob.Socket](Mob.Socket.md): The socket struct passed through all Mob.Screen and Mob.Component callbacks.
  - [Mob.State](Mob.State.md): Persistent key-value store for app state.

- UI
  - [Mob.Composite](Mob.Composite.md): Pure-Elixir composite components: the third expansion pass.
  - [Mob.Renderer](Mob.Renderer.md): Serializes a component tree to JSON and passes it to the platform NIF in
a single call. Compose (Android) and SwiftUI (iOS) handle diffing and
rendering internally.
  - [Mob.Style](Mob.Style.md): Thin wrapper around a props map for named, reusable styles.
  - [Mob.Theme](Mob.Theme.md): Design token system for Mob apps.
  - [Mob.Theme.Adaptive](Mob.Theme.Adaptive.md): Theme that follows the OS-level light / dark setting.
  - [Mob.Theme.Dark](Mob.Theme.Dark.md): High-contrast greyscale dark theme.
  - [Mob.Theme.Light](Mob.Theme.Light.md): High-contrast greyscale light theme.
  - [Mob.UI](Mob.UI.md): UI component constructors for the Mob framework.

- Navigation
  - [Mob.Nav](Mob.Nav.md): Multi-stack navigation state.
  - [Mob.Nav.Registry](Mob.Nav.Registry.md): ETS-backed registry mapping screen name atoms to their modules.
  - [Mob.Router](Mob.Router.md): Owns navigation, and the one process per live screen that serves it.

- Runtime Processes
  - [Mob.Listener](Mob.Listener.md): The single process the native layer delivers interaction events to.
  - [Mob.Screen.Server](Mob.Screen.Server.md): One process per live screen, owning that screen's socket.
  - [Mob.Sender](Mob.Sender.md): The only process permitted to call the render NIFs.

- Plugins
  - [Mob.Plugins](Mob.Plugins.md): On-device access to the activated plugins' tier-3/4 contributions.
  - [Mob.Plugins.Lifecycle](Mob.Plugins.Lifecycle.md): Dispatches OS foreground/background transitions to the tier-4 plugins'
`lifecycle.on_resume` / `lifecycle.on_background` hooks.
  - [Mob.Plugins.Supervisor](Mob.Plugins.Supervisor.md): Supervises the tier-4 plugins' lifecycle.

- Device APIs
  - [Mob.Audio](Mob.Audio.md): Microphone recording and audio playback.
  - [Mob.Clipboard](Mob.Clipboard.md): System clipboard access. No permission required.
  - [Mob.Files](Mob.Files.md): System file picker. Opens the OS document picker (Files app on iOS, SAF on Android).
  - [Mob.Haptic](Mob.Haptic.md): Haptic feedback. No permission required on either platform.
  - [Mob.Motion](Mob.Motion.md): Accelerometer, gyroscope, and magnetometer (compass) sensor data.
  - [Mob.Permissions](Mob.Permissions.md): Request OS-level permissions from the user.
  - [Mob.Share](Mob.Share.md): System share sheet. Opens the OS share dialog with a piece of content.
Fire-and-forget — no response arrives in the BEAM.

- Testing &amp; Debugging
  - [Mob.RenderStats](Mob.RenderStats.md): Per-frame timing for the render pipeline, readable from a connected node.
  - [Mob.ScreenCase](Mob.ScreenCase.md): The blessed way to unit-test a `Mob.Screen` in the BEAM, no device or
emulator required. The screen-level analog of `Phoenix.LiveViewTest`.
  - [Mob.Test](Mob.Test.md): Remote inspection and interaction helpers for connected Mob apps.

- Tooling
  - [Mob.Formatter](Mob.Formatter.md): `mix format` plugin for the `~MOB` sigil.

- Internals
  - [Mob.Dist](Mob.Dist.md): Platform-aware Erlang distribution startup.
  - [Mob.List](Mob.List.md): Data-driven list component.
  - [Mob.NativeLogger](Mob.NativeLogger.md): OTP logger handler that routes Elixir Logger output to the platform's native
system log.
  - [Mob.Sigil](Mob.Sigil.md): The `~MOB` sigil for declarative native UI.

- Exceptions
  - [Mob.Screen.UnhandledEventError](Mob.Screen.UnhandledEventError.md): Raised by the `handle_event/3` `use Mob.Screen` injects when a screen defines
no clause for an event.

## Mix Tasks

- [mix erlfmt](Mix.Tasks.Erlfmt.md): Format `.erl` files (or check formatting with `--check`).
- [mix mob.flake](Mix.Tasks.Mob.Flake.md): Run the test suite until it fails, or a set number of times, and report
which tests were not deterministic.
- [mix mob.onboarding_test](Mix.Tasks.Mob.OnboardingTest.md): Runs the Mob onboarding integration tests, which verify that a new user can
go from zero to a running app without hitting any friction that should have
been caught automatically.

