GenericJam
Mob 0.9.27 has been released.
Added
- Several windows of one app on iPad, one BEAM (MOB-245, iPad half). Each
UIWindowScenegets its ownMob.Router, navigation and screens; the app’s
root router keeps:mob_screenand renders to native’s default scene, so a
single-window app runs the same path as before. NewMob.Scenes(scene
registry and lifecycle),Mob.Scene(request_new/0,supported?/0,
of/1),Mob.Test.screens/1,scene:on everyMob.Testhelper that
addresses the current screen, andMob.Test.MultipleScenesErrorwhen
several windows are live and noscene:is given. Native: a tap set and
view model per scene, scene-routed back gesture, size class and alert
results, scene-awaresafe_area/1,size_class/1,alert_show/4,
action_sheet_show/3,clear_taps/1,scenes/0,scene_request/0,
scene_multiple_supported/0. Only application-role window scenes count,
so an AirPlay or cable display is not a second window. An alert or action
sheet appears in the window of the screen that showed it, even when another
window is in front.Mob.WebView, the back gesture’s WebView history step
andMob.Keyboard.dismiss/1act on the calling screen’s window
(webview_*anddismiss_keyboardNIFs gained a scene arity; with window
scenes attached,dismiss_keyboard/0now looks only in the primary’s
window, not in any visible one), and on
that window’s shown WebView, never the previous screen’s parked one. A
WebView’s messages and blocked URLs carry the scene its tree was built for,
so they reach that window’s screen even before the view is in a window.
Every window event with a known scene, the window-connected notice
included, goes throughMob.Scenes, which drops one no router shows.
scene: nilinMob.Testaddresses the window the app started in. Launch
notifications and links (Mob.Link) go to the root router only, and to
whichever router takes over:mob_screen. A frame in flight for a window
that closes is dropped rather than shown in the window that takes over its
tap set, and a closing window’s router is stopped without holding up the
other windows’ events. A
further window’s router mounts its root screen after starting, so a
mount/3may callMob.Scene.list/0;:mob_screenmoves to a remaining
window before the closing primary stops; a new session takes over a kept
window only when that window’s session is gone ({:mob_scene, :replaced, ...}), and a kept window whose session is discarded stops
({:mob_scene, :discarded, id}). The by-tag press helpers
(press_in/3,press_out/3,hold/4) takescene:too. The reload
mix mob.deploysends to:mob_screenafter a hot push repaints every
window, not only the one whose router holds the name. Opt in with
config :mob_dev, multi_window: true(mob_dev#114 stamps
UIApplicationSupportsMultipleScenes). Needs a native rebuild. Run on the
iPad and iPhone simulators, not yet on a physical iPad. See
decisions/2026-10-02-one-router-per-window-scene.md.
Fixed
- iOS release builds compile again (MOB-504). In 0.9.26,
nif_dismiss_keyboardand
the first-responder walk it uses were defined inside the debug-only test-harness block
(#if !MOB_RELEASE), while theirnif_funcsentries were not, so every iOS release
build failed with “use of undeclared identifier ‘nif_dismiss_keyboard’”. Both now sit
outside the harness block. CI now compilesios/mob_nif.min debug, release, and
release withMOB_ENABLE_SCREENSHOT(make -C test/native ios-nif).
Mob Info
Classification: Hybrid Mobile Framework
Description: 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.
Forum/tag: mob
Click here to view Mob’s main announcement thread.
Trending in News & Updates
Popcorn, the library that runs Elixir code in the browser, is now stable :popcorn:
This is possible because it now builds on a very stab...
New
Doggo 0.18.3 has been released.
Added
tabs: Add a disabled attribute to the :panel slot. A disabled tab can be focused with the arrow k...
New
Mob 0.9.18 has been released.
Added
anchor: "bottom" on :scroll, for chat logs (MOB-481). The scroll
opens at the end of its content. ...
New
Some root certs are compromised, updates are needed to maintain TLS security.
As reported by Mozilla the eMudhra intermediate CA privat...
New
Doggo 0.18.4 has been released.
Fixed
menu: Run phx-click-away bindings when an item is chosen.
menu, menu_bar: Choose the focused item...
New
Doggo 0.18.2, 0.18.1 and 0.18.0 have been released.
Fixed
alert_dialog, modal: Show an open dialog as a modal again when a patch moves ...
New
SystemOneClient v0.3.0 has been released.
Added
images: option for image inputs with provider: :openai and provider: :cloudflare.
Imag...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
In 2021 I started a new library called Tempo with the objective of modelling time as a set of intervals - not as instants. In 2022 I gave...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #blog-post
- #ecto-query
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #hex









