Mob — BEAM-on-device mobile framework for Elixir.
OTP runs on the device. Screens are GenServers. The UI is rendered by Compose (Android) and SwiftUI (iOS) via a thin NIF. No server required.
Quick start
defmodule MyApp.HomeScreen do
use Mob.Screen
def mount(_params, _session, socket) do
{:ok, Mob.Socket.assign(socket, :title, "Hello, Mob!")}
end
def render(assigns) do
%{
type: :column,
props: %{padding: :space_md},
children: [
%{type: :text, props: %{text: assigns.title, text_size: :xl}, children: []}
]
}
end
endModules
Mob.App— app entry point and navigation declarationMob.Screen— screen behaviour and GenServer wrapperMob.Socket— assigns and navigation APIMob.Theme— design token systemMob.Renderer— component tree serialisationMob.Test— live device inspection and testing helpers
See the Getting Started guide to create your first app. See Architecture & Prior Art for how Mob compares to LiveView Native, Elixir Desktop, React Native, Flutter, and native development.
Summary
Functions
See Mob.Socket.assign/2.
See Mob.Socket.assign/3.