📈 GH Trending Explorer 🎲 Surprise me

← all repos

GenericJam / mob

git clone https://github.com/GenericJam/mob.git 0.9.24 · 3d ago

—

+~1
stars, 24h · #13,789
+~5
stars, 7 days · #17,324
+~20
stars, 30 days · #22,041
297
★ total · +2% this week
28
forks · 22 open issues

Star history (as recorded here)

2026-10-20 · 295 ★ 2026-10-23 · 297 ★
LanguageElixir
LicenseMIT
Created2026-04-08 (6mo ago)
Last pushtoday
Watchers14
OwnerUser

Seen on GitHub Trending

  • 2026-10-21 — #9 monthly in elixir · +29 ★
  • 2026-10-20 — #9 monthly in elixir · +28 ★

Links

README excerpt
# Mob
BEAM-on-device mobile framework for Elixir. OTP runs inside your iOS and Android apps — embedded directly in the app bundle, no server required. Screens are GenServers; the UI is rendered by Compose and SwiftUI via a thin NIF.
> **Status:** Early development. Confirmed on the iOS simulator, the Android emulator, and real iOS and Android devices.
## What it is
 [code] 
You write Elixir. The native layer handles rendering. The BEAM node runs on the device — connect your dev machine to the running app over Erlang distribution, inspect state, and hot-push new bytecode without a restart.
## Installation
Add to `mix.exs`:
 [code] 
The `mob_new` package (separate) provides project generation, deployment tooling, and will import `mob_dev` which is a live dashboard. Install it as a Mix archive:
 [code] 
## A screen
 [code] 
A tap on the button delivers `{:tap, :increment}` to `handle_info/2` — the tag
comes from the `on_tap: {self(), :increment}` tuple in `render/1`, and `self()`
is this screen's own process.
## App entry point
 [code] 
## Navigation
 [code] 
## Theming
 [code] 
Core ships `Mob.Theme.Light`, `Mob.Theme.Dark`, and `Mob.Theme.Adaptive`
(follows the system light/dark setting). The preset themes —
`MobThemes.Obsidian`, `MobThemes.ObsidianGlass`, `MobThemes.Citrus`,
`MobThemes.Birch`, `MobThemes.Material3` — live in the
`mob_themes` style package:
 [code] 
See the Theming guide for details.
## Device APIs
Device APIs report back as messages: call the function, handle the result in
`handle_info/2`. (To run your own slow work, such as an HTTP call, without
blocking the screen, use `Mob.Socket.start_async/3` and `handle_async/3`; see
Screen Lifecycle.)
 [code] 
Some capabilities ship as first-party plugins rather than in core — see the
First-Party Packages catalog for the full set. Activating
one is two lines:
 [code] 
Plugins come in two kinds: **BEAM-only** (Elixir code: screens, lifecycle and
router hooks, workers; deployed and hot-pushed like your own code) and
**native** (NIFs, native components, permissions; need
`mix mob.deploy --native`). Apps generated by `mix mob.new` already trust the
first-party plugins' signing key; for any other plugin, run
`mix mob.plugin.trust ` once. To write your own, see
Writing a Plugin.
**In core:** `Mob.Clipboard`, `Mob.Share`, `Mob.Files`, `Mob.Audio`,
`Mob.Motion`, `Mob.Permissions`.
**As first-party plugins:** `mob_camera`, `mob_location`, `mob_notify`,
`mob_photos`, `mob_biometric`, `mob_scanner` (also needs `mob_camera`),
`mob_bluetooth`, `mob_nfc`, `mob_video`, `mob_midi`, `mob_touch`,
`mob_screencast`, `mob_audio_capture` (device-audio probe, Android),
`mob_sms`, `mob_wake` (OS-triggered handlers), `mob_background`
(keep-alive), `mob_speech` (speech-to-text), `mob_whisper` (offline
speech-to-text engine), `mob_sensors` (every phone sensor: barometer,
proximity, light, steps, ...), `mob_vision` (on-device OCR),
`mob_nx_eigen` (CPU Nx backend), `mob_scene3d` (Filament 3D scenes),
`mob_deliver` (si