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
06 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
250 releases · first in 2026
One column per month.
Wait for Android's package manager service, not only sys.boot_completed, before installing an APK and after a transient package-service restart.
sys.boot_completed,
before installing an APK and after a transient package-service restart.Recover automatically from bounded transient Android package-service and ADB transport failures while preserving immediate failure for real APK errors
Resolve the versioned PAM install root from the public launcher before clean mobile builds, keeping runtime discovery independent from install version
Carry the installed PAM runtime catalog into clean Native starter execution, so the candidate CLI can resolve Android PHP runtimes without host setup.
Certify Native 1.x dependents against this exact canonical release candidate before either side is published to Packagist.
Keep the checked-out PAM candidate outside the Native Cargo workspace during the mandatory clean-starter release gate.
pam init --template mobile plus pam dev journey in
release certification without weakening workspace isolation.Refresh the immutable Android ecosystem lock to the independently versioned plugin releases certified for the Native 1.x capability contract.
Freeze the ABI, protocol and capability-negotiation contract for the 1.x line.
pam init --template mobile plus pam dev launch as a hard
release prerequisite on a real Android emulator.Make reactive updates dependency-granular with indexed worklet bindings and a reusable evaluation stack, eliminating full binding scans and hot-path s
Nothing published for this version
Nothing published for this version
ci: certify Camera and PAM Native 0.8 on Android
ci: certify Camera and PAM Native 0.8 on Android
test: certify protected native video playback
test: certify camera Android compiler fix
test: add media editor to native aggregate gates
test: consume released protected video package
test: certify media editor iOS render size fix
test: add native canvas to aggregate gates
test: certify canvas GPU and 3D modules
fix: certify Filament clear color type
build: register modular media and graphics ecosystem
fix: qualify modular native view factories
build: certify stable modular graphics releases
fix: build Linux CLI on portable glibc baseline
chore: prepare PAM Native 0.8.1
feat: ship PAM Native UI Language 2
feat: ship PAM Native UI Language 2 (#69)
#[Expose] compatibility.Show, strict Match and typed Await flow primitives.feat: ship PAM Native Singularity architecture
feat: ship PAM Native Singularity architecture (#67)
pam release and four-framework physical-device comparison evidence.release: make PHP 8.5 the Native baseline
release: make PHP 8.5 the Native baseline
Make PHP 8.5 the SDK, showcase, certification and release-pipeline baseline, and consume the verified PAM v2.0.7 mobile runtime by default.
Replace the incomplete Native CLI help summary with the complete contextual, plugin, runtime, generator, Android and iOS command surface.
Collapse the duplicated onboarding section into one canonical Start Here flow built around PAM, Composer and contextual project commands.
Remove the PHP SDK's implicit ctype dependency so templates and scoped styles run on PAM's minimal verified PHP 8.5 extension profile.
Avoid PHP 8.5's null array-offset deprecation when reactive state is read outside an active component render.
Resolve PAM 2 runtime catalogs during Android source builds, require their declared PHP 8.5 default and expose the selected immutable runtime to Gradle.
Accept Composer's canonical vMAJOR.MINOR.PATCH installed-package version
while retaining strict SemVer validation for Native plugin compatibility.
Certify public Android plugins with the candidate Native CLI and the verified public PAM runtime, removing the pre-release dependency on an older SDK CLI.
Build the candidate Rust engine for both supported Android ABIs inside the aggregate plugin job instead of relying on artifacts from another workflow.
Make all four iOS, Android renderer, Android plugin API and PHP SDK release artifacts reproducible from the tagged commit. The release gate constructs each artifact twice, including an isolated clean Gradle rebuild of the AAR, requires byte-for-byte equality, and only then emits checksums, package-budget evidence and provenance attestations. A strict, bounded reproducibility report records integer artifact/result codes, size and digest; the final release job re-hashes every downloaded package against it.
Replace iOS development's rebuild/reinstall loop with bounded loopback hot
reload. Debug hosts now poll the CLI, stream-validate and transactionally
activate PNA1 bundles from cache, reload the embedded PHP runtime, and
measure accepted-version-to-first-frame latency with the same integer kind
6, 64-sample p95/failure evidence contract used by Android.
Add the bounded iOS PNA1 development-bundle parser and transactional
activator. It matches Android's file/count/size/path contract, rejects
malformed or duplicate input before activation, preserves the live PHP app
on failure and recovers an interrupted previous-directory swap.
Measure Android development hot reload from accepted version through the first committed native frame or runtime failure. DevTools now retains a bounded 64-sample window, exports success/failure counts and nearest-rank p95, and evaluates it against a configurable device budget. An offline, size-bounded verifier turns exported physical-device snapshots into a CI gate for sample count, failures and p95.
Add bounded custom TalkBack and VoiceOver actions across the PHP fluent API,
.pam templates, binary protocol, Android renderer, and iOS renderer. Complex
gesture controls can now expose localized screen-reader alternatives and
receive one stable action-name event without sending UI data across bridges.
Make Native source CI and both aggregate plugin certifications reusable and mandatory for every version tag. Android/iOS source changes now trigger their ecosystem workflows automatically instead of relying on a manual dispatch.
Add bounded Android and iOS HTTP diagnostics to the redacted Native DevTools timeline. Exports include only integer method/status codes, byte counts, duration and failure state; URLs, headers and bodies remain excluded.
Add strict, origin-scoped W3C traceparent propagation to the Native HTTP
client, with generic-header spoofing blocked in PHP, Android and iOS.
Add bounded, redacted Android and iOS Simulator DevTools snapshot transports
for contextual pam diagnostics, backed by one-use private-cache files
available only through debug hosts. Android is protected by the privileged
DUMP permission; iOS uses an application-scoped URL and simulator container.
Wire the generated iOS host to the UIKit DevTools overlay and runtime metrics by default in debug builds.
Nothing published for this version
chore(release): align PAM Native 0.6.73 metadata
chore(release): align PAM Native 0.6.73 metadata
feat(navigation): type imperative route destinations
feat(navigation): type imperative route destinations
Navigator, NavigationAction,
NavigationRef, legacy Router, bottom/top tabs and drawers now accept the
same string-backed route enums as Route::screen() and Route::to(). Route
names are normalized before lookup, persistence, events and native dispatch.feat(templates): expose shared element transitions
feat(templates): expose shared element transitions
shared-transition and shared-transition-style attributes to
PAM Image and MediaPlayer templates. Feed, gallery and other declarative
media screens can now participate in Shared Elements 2 without dropping down
to programmatic element construction.Added the Laravel-inspired Route:: navigation facade for composable native stacks, adaptive bottom tabs, swipeable top tabs and responsive drawers. Na
Route:: navigation facade for composable native
stacks, adaptive bottom tabs, swipeable top tabs and responsive drawers.
Navigator declarations may be nested without manually attaching hosts, and
actions, system Back, state restoration and deep links recurse through the
focused child graph.RouteModule composition let feature packages own
their route declarations without global registration order.Route::to() targets and the
pam-native-routes generator for enum cases and statically typed route helper
methods from a validated JSON contract.Fixed Android decorative children with ripple styling retaining clickable or long-clickable state without an event handler. Images and icons nested in
Pressable no longer intercept the parent's touch target, so tapping any
point inside an icon button dispatches its action consistently.Fixed Android BottomSheet interactive keyboard behavior to move its configured detent above the IME. Bottom-anchored composers no longer remain clippe
BottomSheet interactive keyboard behavior to move its
configured detent above the IME. Bottom-anchored composers no longer remain
clipped below the keyboard with inverted accessibility bounds.Bound Android rich-list empty-holder recovery to one attempt per holder and item identity. Legitimately empty conditional rows no longer trigger an en
Fix Android KeyboardAvoidingView instances mounted while the IME is closing retaining an intermediate resize inset after the keyboard is hidden. PAM n
KeyboardAvoidingView instances mounted while the IME is closing
retaining an intermediate resize inset after the keyboard is hidden. PAM now
reconciles newly mounted views with the authoritative IME visibility after
traversal and animation settling.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.Your coding agent can read these notes before it upgrades. Set up the MCP server →