NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist
Build fast native Android and iOS applications with PHP and PAM.
Last release today
07 Oct 2026
Ships on a steady schedule
a new release about every 1 weeks
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
2 months old
286 releases · first in 2026
One column per month.
Fix Android KeyboardAvoidingView resize behavior to reduce its native viewport and reflow flex descendants. Fixed composers and footer actions now rem
KeyboardAvoidingView resize behavior to reduce its native
viewport and reflow flex descendants. Fixed composers and footer actions now
remain above the IME instead of staying at their pre-keyboard screen position.Fixed Android intrinsic text measurement for packaged fonts by reserving a small relative shaping/hinting allowance. Multi-word labels no longer wrap
numberOfLines="1" and the
native TextView rounds slightly wider than the TTF advance metrics.Preserve native module results and runtime reload signals when sustained UI input fills the Android or iOS event queue. The bridge now evicts an older
Decode Android inline data:image/* assets on an isolated image lane. Small bundled UI assets such as icon masks now reach the first interactive frame
data:image/* assets on an isolated image lane. Small
bundled UI assets such as icon masks now reach the first interactive frame
without waiting behind remote photos, disk reads, or animated media decoding.Snapshot Android virtualized lists before critical memory trimming. Releasing recycled child trees may mutate the renderer view registry, so iterating
LongSparseArray could crash a backgrounded application with
ArrayIndexOutOfBoundsException. Critical trim now visits the stable snapshot
exactly once while preserving the existing memory-release behavior.Add Android KeyboardAvoidingView behavior interactive for bottom sheets. The sheet follows the IME but clamps below safe top chrome, keeping headers,
KeyboardAvoidingView behavior interactive for bottom sheets.
The sheet follows the IME but clamps below safe top chrome, keeping headers,
search fields, and actions visible instead of panning the entire surface off
screen.Keep translated Android composer actions tappable above a geometrically overlapping message scroller while still honoring interactive camera and media
Publish the translated composer touch-target refresh with synchronized Android, Rust protocol, and PHP SDK version metadata.
Respect Android visual stacking when dispatching translated keyboard-avoidance touch targets. Absolute camera, media, and composer overlays now receiv
Invalidate dependency-skipped component trees before invoking template event handlers. Direct mutations of component properties from press, native-vie
Remount empty Android rich-list holders when a retained navigation route becomes visible again. VirtualizedList and VirtualGrid now recover their cell
VirtualizedList and VirtualGrid now recover their
cells after route transitions and reactive appearance changes even when the
containing window itself never changed visibility.Use the React Native-compatible 46.5 × 27 logical-pixel footprint in the layout engine's intrinsic Switch geometry. This removes the legacy 52 × 48 fr
46.5 × 27 logical-pixel footprint in the
layout engine's intrinsic Switch geometry. This removes the legacy
52 × 48 frame before Android receives its exact native measure specs.Match the intrinsic Android Switch footprint used by React Native (46.5 × 27 logical pixels) while preserving authored exact dimensions and respecting
Switch footprint used by React Native
(46.5 × 27 logical pixels) while preserving authored exact dimensions and
respecting bounded measure specs. Switches no longer expand compact rows to
the platform widget's legacy 40dp minimum height.Remount empty Android rich-list holders when a retained window becomes visible again. VirtualizedList and VirtualGrid now recover cells whose native s
VirtualizedList and VirtualGrid now recover cells whose
native subtree was released while the app was backgrounded, without waiting
for scrolling or a data change.Fully bind empty Android rich-list holders when a layout payload arrives before their initial materialization. VirtualizedList and VirtualGrid cells n
VirtualizedList and VirtualGrid
cells no longer remain blank after row-height, prefetch, or clipping setup.Respect min-width and min-height while intrinsically measuring the cross axis of flex children, including wrapped rows. Auto-sized controls now reserv
min-width and min-height while intrinsically measuring the cross
axis of flex children, including wrapped rows. Auto-sized controls now reserve
their authored logical minimum before line sizing and placement instead of
collapsing to their label's intrinsic extent.Keep Android pinch and rotation gestures inside their detector when nested in a ScrollView or pager. The detector now claims the touch stream when the
ScrollView or pager. The detector now claims the touch stream when the
second pointer lands and releases it when the gesture finishes, preventing a
gallery pinch from being misinterpreted as horizontal page navigation.Recover Android autoFocus when an already-retained conditional ancestor becomes visible. Inputs inside p-if subtrees now focus and request the IME at
autoFocus when an already-retained conditional ancestor
becomes visible. Inputs inside p-if subtrees now focus and request the IME
at the visibility transition, even after the initial bounded retry elapsed.Keep reactive Android autoFocus pending while its screen is detached or a navigation transition does not yet own window focus. A bounded retry now foc
autoFocus pending while its screen is detached or a
navigation transition does not yet own window focus. A bounded retry now
focuses the input and opens the IME as soon as that screen becomes active.Make Android autoFocus open the software keyboard for inputs introduced by reactive renders. The renderer waits for attachment/window focus with a bou
autoFocus open the software keyboard for inputs introduced by
reactive renders. The renderer waits for attachment/window focus with a
bounded retry and respects showSoftInputOnFocus="false".Preserve independent CSS column-gap and row-gap values in flex and flex-wrap layouts. The retained Rust engine now applies the horizontal and vertical
column-gap and row-gap values in flex and
flex-wrap layouts. The retained Rust engine now applies the horizontal and
vertical axes independently during line breaking, placement and intrinsic
measurement, while gap remains the fallback for either omitted axis.Add an optional failure callback to PushNotifications::register() so FCM and APNs provider/configuration failures can recover application UI without t
PushNotifications::register() so FCM
and APNs provider/configuration failures can recover application UI without
throwing from an asynchronous native-module result. Existing positional API
and exception behavior remain compatible when no callback is supplied.Add native baseline cross-axis alignment throughout the typed API, template renderer, scoped CSS utility compiler and Rust layout engine. Horizontal f
Match React Native text-input baselines on Android by disabling the platform font padding, and retry imperative scroll requests after the next rendere
Add bounded pressedScale feedback to Pressable on Android and iOS, compositing it with authored scaleX/scaleY transforms and the existing pressedOpaci
pressedScale feedback to Pressable on Android and iOS,
compositing it with authored scaleX/scaleY transforms and the existing
pressedOpacity animation. The declarative pressedScale attribute and
fluent Pressable::pressedScale() API preserve a scale of 1 by default.Add typed scrollTargetAlignment (start, center, or end) to tokenized descendant scroll requests on Android and iOS scroll views and virtualized lists.
scrollTargetAlignment (start, center, or end) to tokenized
descendant scroll requests on Android and iOS scroll views and virtualized
lists. Alignment accounts for target and viewport extent and clamps edge
targets without changing the existing start-aligned default.Add an optional failure callback to Location::current() so permission, provider and timeout failures can recover application UI without throwing from
Location::current() so permission,
provider and timeout failures can recover application UI without throwing
from an asynchronous native-module result. Existing positional parameters
and exception behavior remain compatible when no failure callback is given.Add authenticated, observable sandbox downloads through Files::downloadWithProgress(), including validated request headers, typed byte progress, expli
Files::downloadWithProgress(), including validated request headers, typed
byte progress, explicit failure callbacks and cancellation. The Android
implementation streams off the UI thread, enforces the existing 256 MiB
ceiling and atomically publishes only completed files.Files::open() and an app-private Android FileProvider, allowing a
downloaded sandbox document to open in a compatible platform application
without exposing file:// URIs or granting broad storage access.Files::download() with optional validated request headers and a
non-throwing failure callback while preserving its existing positional API.Add optional failure callbacks to Linking::open(), canOpen(), and initial() so applications can recover from asynchronous platform link failures witho
Linking::open(), canOpen(), and
initial() so applications can recover from asynchronous platform link
failures without an uncaught exception.Add optional failure callbacks to AudioRecorder::start(), stop(), cancel(), discard(), and watch() so applications can recover their UI from asynchron
AudioRecorder::start(), stop(),
cancel(), discard(), and watch() so applications can recover their UI
from asynchronous native recorder failures without an uncaught exception.Support tokenized scrollRequest, scrollTargetOffset, and scrollTargetTestId on Android and iOS virtualized lists, grids, and section lists, including
scrollRequest, scrollTargetOffset, and
scrollTargetTestId on Android and iOS virtualized lists, grids, and section
lists, including variable-height cells and offscreen targets.Route Android MediaPlayer HTTP and HTTPS sources through the network URL overload instead of ContentResolver, fixing remote audio/video failures repor
MediaPlayer HTTP and HTTPS sources through the network URL
overload instead of ContentResolver, fixing remote audio/video failures
reported as No content provider while preserving content://, file://
and android.resource:// playback.Preserve explicit reactive scrollRequest commands on Android instead of restoring the pre-commit viewport afterward, fixing jump-to-target and jump-to
scrollRequest commands on Android instead of
restoring the pre-commit viewport afterward, fixing jump-to-target and
jump-to-end controls that appeared to run but left the list in place.Treat Android and iOS file/media picker cancellation as normal UI control flow: Files::pick() now resolves null and Files::pickMany() resolves an empt
Files::pick() now resolves null and Files::pickMany() resolves an
empty list instead of raising a native-module failure when users press back.null through MediaCapture::capture() as
well, while preserving native failures for actual capture/import errors.Render Android MediaPlayer thumbnails as native posters and keep them visible until the first video frame reaches the TextureView, preventing blank me
MediaPlayer thumbnails as native posters and keep them
visible until the first video frame reaches the TextureView, preventing
blank media surfaces while remote playback prepares or buffers.Make declarative MediaPlayer autoPlay fully reactive on Android and iOS: switching the bound value to false now pauses a prepared player at its curren
MediaPlayer autoPlay fully reactive on Android and iOS:
switching the bound value to false now pauses a prepared player at its
current position instead of leaving native playback running.Match Android CameraRoll recent-media ordering by sorting equal added-time assets by modified time instead of media ID.
Make the Android renderer release artifact self-contained for SDK assembly by shipping its matching Cargo workspace and Rust engine/protocol sources.
Add the typed BorderStyle/borderStyle protocol contract with solid, dashed, and dotted values.
BorderStyle/borderStyle protocol contract with solid,
dashed, and dotted values.border-style and render uniform patterned borders
natively on Android and iOS, including rounded corners and image hosts.Fix Image/ImageBackground cachePolicy="none" so templates map it to a typed native policy instead of throwing Unknown template option none.
Image/ImageBackground cachePolicy="none" so templates map it to a
typed native policy instead of throwing Unknown template option none.Paint the active declarative StatusBar color over the Android 15+ edge-to-edge status-bar inset, so a light root view cannot show through a dark autho
StatusBar color over the Android 15+
edge-to-edge status-bar inset, so a light root view cannot show through a
dark authored system-bar surface.Reapply the active declarative StatusBar configuration after host-root background synchronization on Android 15 and newer, so a status-bar color diffe
StatusBar configuration after host-root
background synchronization on Android 15 and newer, so a status-bar color
different from the screen root is not overwritten at the end of a render
commit.Decode declarative MediaPlayer progress payloads and invoke template handlers with the documented (float $currentTime, float $duration) pair, matching
MediaPlayer progress payloads and invoke template
handlers with the documented (float $currentTime, float $duration) pair,
matching the programmatic component API instead of passing one wire string.StatusBar omits navigationBarHidden, preventing retained routes from
overriding the active global navigation-bar contract.Add Android immersive navigation control through StatusBar::navigationBarHidden() and the declarative navigationBarHidden property, including transien
StatusBar::navigationBarHidden() and the declarative
navigationBarHidden property, including transient swipe recovery and
safe-area inset updates when system navigation is hidden.StatusBar color, icon appearance, visibility and
translucency to active Android modal windows, so full-screen modal routes no
longer retain the dialog theme's light system bar.Add bounded, atomic Files::download() support on Android and iOS for materializing HTTPS media into the PAM sandbox as a typed FileReference.
Files::download() support on Android and iOS for
materializing HTTPS media into the PAM sandbox as a typed FileReference.Canonicalize the Android file-sandbox root before deriving returned relative paths, preventing /data/user/0 and /data/data aliases from producing a tr
/data/user/0 and /data/data aliases from producing a
traversal-shaped FileReference after Files::copyAsset().Add Files::copyAsset() for atomically materializing packaged project assets in the application file sandbox without transporting base64 bytes through
Files::copyAsset() for atomically materializing packaged project assets
in the application file sandbox without transporting base64 bytes through
PHP, with traversal protection and Android/iOS implementations.Add bounded, normalized positioned text-layer compositing to ImageEditor::render(), including scale, radian rotation, color and integer presentation s
ImageEditor::render(), including scale, radian rotation, color and integer
presentation style for editable social-media compositions.Decode explicitly passed $event expression arguments into GestureEvent when the target method uses that type, enabling contextual handlers such as mov
$event expression arguments into GestureEvent
when the target method uses that type, enabling contextual handlers such as
moveLayer($id, $event) without exposing the binary wire payload.Reject malformed p-for directives during template compilation instead of deferring the deterministic failure until the component renders on-device.
p-for directives during template compilation instead of
deferring the deterministic failure until the component renders on-device.GestureDetector trees resolve to exactly one
child across conditional branches, while accepting complete mutually
exclusive p-if/p-else-if/p-else chains.Measure dialog-modal cards at their authored percentage or fixed width and intrinsic content height in the shared layout engine, then center the resul
Reveal the focused input automatically when padding-mode Android keyboard avoidance owns a contained vertical scroll view.
keyboardVerticalOffset as extra
space for adjacent form actions, with API 26–36 instrumentation coverage.Normalize declarative ScrollView deceleration aliases so normal and fast encode as numeric protocol values accepted by both native hosts.
ScrollView deceleration aliases so normal and
fast encode as numeric protocol values accepted by both native hosts.0...1 range
and cover alias and numeric behavior with PHP SDK regressions.Add Sms::isAvailable() and Sms::compose() for querying platform support and opening a pre-addressed native SMS draft without sending automatically.
Sms::isAvailable() and Sms::compose() for querying platform support
and opening a pre-addressed native SMS draft without sending automatically.ACTION_SENDTO with the smsto: scheme so only
messaging applications can handle the request, declare the corresponding
Android package-visibility query, and use MessageUI's native composer on iOS.Preserve an Android dialog modal's intrinsic card width and height and center it inside the native backdrop instead of stretching every dialog child t
Promote the remaining replacement route when a renderer update removes the currently active Android route after a completed pop. This prevents a valid
Idle after native transition
completion instead of leaving a settled pop encoded in later renders.Preserve a subpixel safety guard for intrinsic text measured from packaged TTF/OTF advances. This prevents Android TextView from wrapping a final word
TextView from wrapping a final word
into a clipped second line when platform hinting rounds the run fractionally
wider than the font's ideal advance sum.Expose the device's IANA time-zone identifier through DeviceInfo::timeZone on Android and iOS so applications can format API timestamps in local time.
DeviceInfo::timeZone
on Android and iOS so applications can format API timestamps in local time.DeviceInfo values
with a documented UTC fallback when older native hosts omit the field.Honor dark status-bar icons on Android 15 and newer instead of silently forcing light icons after the platform's edge-to-edge transition.
disabled template attributes to the inverse native
enabled state so controls stop interaction and report their state correctly
to accessibility services.Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →