mob_new
Project generator for the Mob mobile framework. Installs a global mix mob.new command.
Installation
mob_new is a Mix archive — install it globally, not as a project dependency:
mix archive.install hex mob_newUsage
mix mob.new my_app
cd my_app
mix mob.install # first-run setup: download OTP runtime, generate icons, write mob.exsOptions
| Option | Description |
|---|---|
--ios |
Generate iOS boilerplate only (skip android/) |
--android |
Generate Android boilerplate only (skip ios/) |
--liveview |
Wrap a Phoenix LiveView app in a Mob WebView (combines with --ios / --android) |
--no-install |
Skip mix deps.get after generation |
--dest DIR | Create the project in DIR (default: current directory) |
--local |
Use path: deps pointing to local mob/mob_dev repos — see below |
--no-ios |
Alias for --android (skip iOS boilerplate) |
--no-android |
Alias for --ios (skip Android boilerplate) |
mix mob.install, mix mob.deploy, and mix mob.doctor detect the project's
platform set from on-disk layout, so a single-platform project skips the
absent platform's setup automatically (no Android OTP download, no iOS
toolchain check, etc.).
Local development mode (--local)
This flag is for Mob framework contributors and library authors testing unpublished changes. It is not intended for app developers — use the standard
mix mob.new my_appinstead.
Installing the local mob_new archive
When working on mob_new itself, build and force-install the archive to pick up your changes:
cd ~/code/mob_new && mix archive.build && mix archive.install $(ls mob_new-*.ez | tail -1) --forceVerify it's active:
mix archive # mob_new should appear with the updated version
mix mob.new --help
If you are working on Mob itself and want to test your changes end-to-end
before publishing to Hex, pass --local to generate a project that depends on
your local checkouts instead of the published packages:
mix mob.new my_app --local
This generates mix.exs with path: deps:
{:mob, path: "/path/to/mob"},
{:mob_dev, path: "/path/to/mob_dev", only: :dev, runtime: false}
It also pre-fills mob.exs with your actual local paths so mix mob.install
skips the path configuration prompts and proceeds straight to OTP download and
icon generation.
Path resolution (in order):
MOB_DIR/MOB_DEV_DIRenvironment variables./mob/./mob_devin the current directory (e.g. running from~/code)../mob/../mob_devrelative to the current directory
# If mob and mob_dev live alongside each other in ~/code:
cd ~/code
mix mob.new my_app --local # auto-detects ~/code/mob and ~/code/mob_dev
# Or set explicitly from anywhere:
MOB_DIR=~/code/mob MOB_DEV_DIR=~/code/mob_dev mix mob.new my_app --localWhat gets generated
my_app/
├── mix.exs
├── lib/
│ └── my_app/
│ ├── app.ex # Mob.App entry point
│ └── home_screen.ex # starter screen
├── android/
│ ├── build.gradle
│ └── app/
│ └── src/main/
│ ├── AndroidManifest.xml
│ └── java/com/mob/my_app/MainActivity.java
└── ios/
├── beam_main.m
└── Info.plistNext steps after generation
First deploy (builds the native app and installs it):
mix mob.deploy --nativeDay-to-day (hot-pushes changed BEAMs, no native rebuild):
mix mob.deploy # push + restart
mix mob.watch # auto-push on file save
mix mob.connect # open IEx connected to the running device nodeDocumentation
Full guide at hexdocs.pm/mob, including Getting Started, screen lifecycle, components, navigation, and live debugging.