First-Party Packages

Copy Markdown View Source

Mob is fully featured — but since 0.7.0 the capabilities live in focused packages rather than one monolithic core. Core ships the kernel every app needs (screens, navigation, rendering, state, storage, permissions, distribution, the test harness, and the neutral light/dark/adaptive themes); everything else is one dep + one config line away.

Activating any capability plugin is the same two steps:

# mix.exs
{:mob_camera, "~> 0.1"}

# mob.exs
config :mob, :plugins, [:mob_camera]

Style packages use the styles lane instead:

config :mob, :styles, [:mob_themes]
config :mob, :default_style, :mob_themes

Capability plugins

PackageGives youNotes
mob_cameraPhoto/video capture, live preview session, ML-ready frame streamingThe <CameraPreview> view node is in core; pair it with MobCamera.start_preview/2
mob_photosThe system photo/video pickerNo runtime permission needed (out-of-process picker)
mob_locationGPS/network location — one-shot + continuous
mob_biometricFace ID / Touch ID / fingerprint authiOS fully working; Android currently reports :not_available (fix tracked)
mob_notifyLocal notification scheduling + push registrationPairs with the server-side mob_push; delivery into handle_info is core behavior
mob_scannerQR / barcode scanning (full-screen scanner)Also activate mob_camera (it owns the :camera permission)
mob_bluetoothBluetooth discovery + SPP/HFP/HID
mob_screencastThe device's own screen as an on-device-encoded H264 streamFor remote viewing/WebRTC; max_size is Android-only today

Style packages

PackageGives you
mob_themesFive preset looks — Obsidian (default), ObsidianGlass, Citrus, Birch, Material3. Switch live with Mob.Theme.set(MobThemes.Citrus)

Component kits

PackageGives youNotes
Mishka Chelekom70+ pre-styled components on the web, 60 already ported — sliders, dialogs, avatars, menus, pickers, and more — to real SwiftUI and ComposeReads Mob's theme tokens (see Theming), so switching Mob.Theme.set/1 re-skins every ported component at once, identically on both platforms. Not yet its own Hex package — the port lives in the mishka_chelekom monorepo alongside the web version. Register only the components a screen actually uses; the demo app's showcase eagerly registers and renders all 60 ported components at boot for its own catalog purposes, which is fine there but adds measurable startup cost on lower-end Android hardware if copied wholesale.

Framework integrations

PackageGives you
mob_ashDeclare Ash resources, get generated list/detail/create screens per resource — Ash runs on-device

Server-side companions

PackageGives you
mob_pushAPNs + FCM push sending from your Elixir server (no mob dependency — works for any app)

Building your own