Skip to content

Deprecation warning

This page in the documentation is about Appyx 1.x.

Appyx is now in its 2.x iteration.

To access the 2.x-related pages please check the sidebar or go to:

Documentation root


Pending changes



  • #425Fixed: Up navigation should be properly propagated from Appyx to RIBs
  • #384Updated: Compose BOM version and activity-compose version
22 Jun 2023


  • #393Breaking change: Removed non-lazy implementations from NodeCustomisationDirectory
  • #393Breaking change: Removed NodeCustomisationDirectoryImpl#put(vararg values: T) due to potential uncaught bugs. Please call the reified put extension function instead.
11 Apr 2023


  • #391Added: Introduced putLazy and putSubDirectoryLazy functions within NodeCustomisationDirectoryImpl via LazyMutableNodeCustomisationDirectory
04 Apr 2023


  • #386Updated: RIBs version to 0.39.0
31 Mar 2023


  • #383Changed: Removed deprecated methods in Node, ParentNode and CombinedHandler classes
  • #376Changed: Androidx lifecycle version updated to 2.6.1.
  • #376Updated: Kotlin and Compose compiler version updated to 1.8.10 to align kotlin version used in androidx lifecycle
  • #375Fixed: SaveableStateHolder does no longer save state for destroyed elements
27 Mar 2023


  • #370Added: RetainedInstanceStore has two new functions which allows a developer to check whether an object is retained. These are: isRetainedByStoreId and isRetained.
04 Mar 2023


  • #361Added: Introduced RetainedInstanceStore. This provides developers the ability to retain objects between configuration changes.
  • #336Updated: ChildAware API does not enforce Node subtypes only anymore, making it possible to use interfaces as public contracts for child nodes.
20 Feb 2023


  • #325Fixed: Crash when using PermanentChild API in View testing
23 Jan 2023


  • #287Added: Introduced a new rememberCombinedHandler implementation that takes an immutable list to avoid non-skippable compositions. The previous implementation is now deprecated.
  • #287Added: ImmutableList has been added to avoid non-skippable compositions.
  • #289Added: Introduced interop-rx3 for RxJava 3 support. This has identical functionality to interop-rx2.
  • #298Updated: ChildView documentation. TransitionDescriptor generics has been renamed to NavTarget and State
  • #307 - Added: Spotlight.current() method to observe currently active NavTarget.
  • #314Fixed: Lifecycle is properly destroyed for suspended nodes.
10 Jan 2023


  • #268Fixed: PermanentChild now does not crash in UI tests with ComposeTestRule.
  • #276Fixed: Back press handlers order is fixed for RIBs-Appyx integration.
  • #272Changed: attachWorkflow renamed to attachChild. executeWorkflow renamed to executeAction.
  • #272Added: NodeReadyObserver plugin to observe when the Node is ready
22 Nov 2022


  • #247Added: Added EmptyNavModel to core for cases in which a ParentNode only uses PermanentChild. The DummyNavModel test class is deprecated.
  • #250Updated: Jetpack Compose to 1.3.0
31 Oct 2022


  • #231Fixed: Changing transition handler at runtime does not redraw children
  • #239Fixed: Fixed an issue with desynchronisation between NavModel and children's restoration process
  • #218Updated: androidx.core:core-ktx to 1.9.0.
21 Oct 2022


  • #214Breaking change: AppyxViewTestRule stops supporting automatic launching activity. Activities should be started explicitly in tests.
  • #197Breaking change: ParentNodeView does not implement plugin anymore. Node instance is retrieved via LocalComposition. AppyxParentViewTestRule and AbstractParentNodeView have been removed.
  • #196Breaking change: InteropBuilder now should be supplied with Appyx IntegrationPointProvider to attach it at the same time Appyx Node is created.
  • #185Breaking change: Activity must implement IntegrationPointProvider and create IntegrationPoint manually. Weak references usage has been removed.
  • #173Breaking change: ActivityStarter and PermissionRequester now exposes coroutine based API instead of minimal.reactive.
  • #200Breaking change: Reordered the parameters for ParentNode<NavTarget>.Child and fun <N : Node> NodeHost to meet Compose guidelines.
  • #43Updated: Jetpack Compose to 1.2.1 and Kotlin to 1.7.10.
  • #168Updated: Kotlin coroutines to 1.6.4.
  • #171Updated: RIBs to 0.36.1.
  • #212Updated: Node parent property is now public instead of private.
  • #174Fixed: IntegrationPointExample does not work with "do not keep activities"
  • #180Added: Ensure that super.onSaveInstanceState() was called to restore Node's state correctly
13 Oct 2022


  • #151 - Breaking change: Renamed Routing to NavTarget. All related namings are affected (RoutingElement, RoutingKey, etc.)
  • #158 - Breaking change: Renamed TransitionState to State in all NavModel impls. Renamed STASHED_IN_BACK_STACK to STASHED.
  • #146 - Breaking change: Removed FragmentIntegrationPoint. Clients should use ActivityIntegrationPoint.getIntegrationPoint(context: Context) to get integration point from Fragment
  • #160 - Breaking change: Renamed navmodel-addons to navmodel-samples and stopped publishing the binary. If you feel we should add any of the samples to the main codebase, please let us know!
  • #138 - Fixed: androidx.appcompat:appcompat from is exposed via api within com.bumble.appyx:core. This prevents potential compilation bugs.
  • #143 - Fixed: Correctly exposed transitive dependencies that are part of the libraries ABI
  • #162 - Fixed: NodeTestHelper's moveTo function can now move to Lifecycle.State.DESTROYED. The node itself has safeguards to prevent moving from destroyed state, and moving to destroyed is a valid test case.
  • #145 - Updated: SpotlightSlider now uses offset modifier with lambda
  • #159 - Added: NodeHost now takes modifier parameter to decorate the view of a root node
  • #162 - Added: disposeOnDestroyPlugin extension has been added to interop-rx2. This will allow Rx2 code to be easily disposed when the node it belongs to is destroyed.
  • #161 - Added: Operations helpers
22 Sep 2022


  • #140 - Breaking change: Added testing-ui-activity module to avoid needing to add testing-ui as a debug implementation as part of instrumentation testing. See the linked issue for more details
  • #139 - Fixed: IntegrationPoint memory leak created by ActivityIntegrationPoint
12 Sep 2022


  • #122 - Breaking change: ChildEntry.ChildMode is removed, now nodes are always created when a nav model changes (previously default behaviour)
  • #99Breaking change: Removed IntegrationPointAppyxProvider and made ActivityIntegrationPoint's constructor private. Use ActivityIntegrationPoint.createIntegrationPoint. This uses a weak reference to keep track of the integration points, and will not introduce memory leaks.
  • #122 - Added: New ChildEntry.KeepMode that allows to destroy nodes that are currently not visible on the screen
  • #132 - Added: New NodeComponentActivity to extend when wanting to work with ComponentActivity as your base activity, eg when migrating from a project built from the Jetpack Compose template
  • #119 - Fixed: Lifecycle observers are invoked in incorrect order (child before parent)
  • #62 - Fixed: Node is marked with stable annotation making some of the composable functions skippable
  • #129 - Updated: Removed sealed interface from operations to allow client to define their own
  • #133 - Updated: NodeView interface and ParentNode marked as stable improving amount of skippable composables
9 Sep 2022


  • #96Breaking change: Removed InteractorTestHelper. Please use Node tests instead of Interactor tests.
  • #99Breaking change: Modified package of NodeConnector and Connectable
  • #99Added: Source.rx2() to convert Source to io.reactivex.Observable
  • #107Fixed: Back press handlers are not properly registered on lifecycle events
26 Aug 2022


  • #83Breaking change: RoutingSource renamed to NavModel. All subclasses, fields, package names, etc., any mentions of the word follow suit.
  • #91Fixed: Spotlight next and previous operations crash fix
19 Aug 2022


  • #39Added: Workflows implementation to support deeplinks
  • #32Added: BackPressHandler plugin that allows to control back press behaviour via androidx.activity.OnBackPressedCallback
  • #59Added: interface for ParentNodeView<>
  • #32Added: Jetpack Compose Navigation code sample
  • #81Added: Support integration point for multiple roots
  • #65Added: InteropBuilderStub and InteropSimpleBuilderStub testing util classes
  • #47Updated: The customisations module is now pure Java/Kotlin.
  • #85Updated: Improved InteropView error messaging when Activity does not implement IntegrationPointAppyxProvider
  • #88Updated: Moved TestUpNavigationHandler to testing-unit-common
18 Aug 2022


  • #38Added: JUnit5 support
2 Aug 2022


  • #19Fixed: Do not allow setting Node.integrationPoint on non-root nodes
  • #23Fixed: Integration point attached twice crash when using live literals
  • #14Fixed: Transition interruptions bug
  • #23Added: Unit test support
  • #26Added: Publish snapshot versions
  • #9Migrated: app-tree-utils into this repository
19 Jul 2022


  • Initial release
4 Jul 2022