GenericJam

GenericJam

Mob 0.9.28 has been released.

Changed

  • A component callback repaints its screen only when the component’s
    rendered props change.
    Before, every Mob.Component handle_event/3 and
    handle_info/2 repainted the screen, whatever it returned. What an app
    upgrading from 0.9.27 should know:

    • A component’s render/1 is treated as a function of its assigns, as in
      LiveView. Anything else it reads (a clock, ETS) is picked up on the next
      screen paint, not by a callback that changed no assign.
    • A component event that leaves the component’s props alone no longer
      re-renders the parent screen. A screen whose render/1 reads state a
      component writes outside messages (ETS, an Agent) and relied on component
      events to refresh it should be sent a message instead.
    • A native view is no longer re-committed with identical props. A view
      whose update block reset rejected input from props on every commit now
      keeps the typed text; to force a commit, have the component bump an assign
      its render/1 returns (a revision counter) when it rejects input.

    Decision: decisions/2026-11-12-component-events-repaint-only-on-changed-props.md.

Fixed

  • A native view event that changes nothing no longer commits the whole
    tree.
    Every component callback used to send {:component_changed, ...},
    and the screen repainted and called set_root without checking anything. A
    native view that sends an event per key press or knob move therefore
    committed twice per press: on a Moto G Power 2021, 5-15 ms of BEAM work plus
    10-20 ms of Compose recomposition per commit. Now a component notifies its
    screen only when render/1 returns props that differ from the ones the
    screen last fetched, and does not render to check if its assigns are
    unchanged (!==). The screen repaints through the same unchanged-tree skip
    its own messages use, so several notices queued behind one paint commit
    once. Verified on a Moto G Power 2021 and an iPhone SE (3rd gen). The last
    rendered props a component keeps for this are redacted in its crash report
    and :sys.get_status/1, as its assigns are (MOB-310).

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.

Where Next? Top

Trending in News & Updates Top

mat-hek
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
bartblast
Hologram UI is in the works - the official component library for Hologram - and the waiting list is now open. A common reaction when I m...
New
bartblast
This thread is for updates on the Hologram website (docs, new pages, roadmap, feature status, etc.). You can watch this thread to get no...
New
mandar1045
Stampede 1.2 is out, and I finally got to try it at a bigger scale. What’s new --find-limit: instead of a fixed number of users, it add...
New
uzaydurdu
Hey Elixir folks, I’ve been working on Xenia 0.2.0, and it’s nearly ready. This release focuses on performance, easier integration, and...
New
rodloboz
Hi all, I’ve just released Sake 0.5.0, and I want to explain better what it’s for, because I think many Phoenix apps can use it now. Wh...
New
Potions
I’m working to make Potions the easiest way to deploy Elixir applications, and the next step in that journey is live: you can now bring y...
New

Other Trending Topics Top

dominicletz
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
raa-ziq
Hi everyone :waving_hand: I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
mudasobwa
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
OndrejValenta
(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
kip
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews