AzNavRail

AzNavRail — Capabilities & Limitations

A single reference for what the recent feature set can and can’t do, on both the Android (Jetpack Compose) and React (aznavrail-react, React Native / Web) libraries. Behaviour is kept at parity between the two unless noted.


Requirements (what’s needed)

Nothing new was added to the dependency surface for the recent features.

Android (aznavrail)

React (aznavrail-react)


Kinetic typography (WP7-style)

Config-driven motion for menu words — preset enums, no free-composable escape hatch.

Capabilities

Limitations


Host auto-expansion (expandWhen / initiallyExpanded)

A host item can auto-expand its sub-items reactively.

Capabilities

Limitations

Historical note: this previously appeared “broken” because the watcher was keyed on the whole item list, so any item-value change relaunched the watchers and swallowed the rising edge. It is now keyed on the stable host-id set. See docs/DSL.md → Reactive Host Expansion.


About screen / docs reader / “More from Az”

Capabilities

Limitations


Gestures the rail claims

Capabilities

Limitations


Platform parity

Area Android React
Kinetic entrance/exit/tilt/title ✅ ✅ (tilt web-only)
expandWhen / host initiallyExpanded ✅ instant + ~300 ms poll ✅ render-eval + ~300 ms poll
About .azignore filtering ✅ ✅
Pinned “More from Az”, tap-to-open cards, real app icon ✅ ✅
Clear Help/Tutorial while About open ✅ ✅
About (?) rail item, auto-appended + overridable ✅ ✅
Borderless shapes with a base footprint (NONE_SQUARE/NONE_CIRCLE) ✅ ✅
Shared rail palette for every AzNavRail surface ✅ LocalAzRailPalette ✅ AzRailPaletteContext
Outside-tap collapses the drawer without dimBehindMenu ✅ ✅

Feature parity (as of this release)

Feature Android (aznavrail) CMP (aznavrail-cmp) React (aznavrail-react)
Drop-down trigger set + title-row placement ✅ ✅ ❌ not ported
Unattached hosts (azUnattachedHostItem) ✅ ✅ ❌ not ported
Floating-host screen-edge & rail-to-rail docking ✅ ✅ ❌ n/a (no unattached hosts)
Per-item badge / loading (azItemState) ✅ ✅ ❌ not ported
Popups (azPopup) + warning triangle ✅ ✅ ❌ not ported
Pinned “More from Az” rail item ✅ ✅ ✅
Three highlights (active / focus / secondary) ✅ ✅ ✅
Per-item highlight colours ✅ azHighlight ✅ azHighlight ✅ item props
About de-duplication across surfaces ✅ ✅ ✅
About content warmed in the background ✅ ✅ ✅
Auto-sizing footer labels ✅ ✅ ✅
Floating windows (AzWindow) — movable + minimizable ✅ ✅ ✅
Hidden menu drawn in a window ✅ ✅ ✅
System overlay (overlayService) ✅ Android target only ❌ n/a
Dissolve overlay on item tap ✅ ❌ not ported ❌
Unit tests ✅ ✅ (DSL-level only) ✅

Known gaps


Conveyance posture

The library is measured against the Conveyance manifesto. What that means in practice, and what changed to honour it:

Principle How the rail expresses it
Guide by example Toggles/cyclers are label-is-state-is-control. An alerted item morphs into the warning triangle and back. Menus unfold; taps dissolve outward across the screen.
Resourceful minimalism AzLoad is a morphing shape, not a ring plus the word “loading…”. Per-item loading rather than a screen-blanking overlay. The rail is also the FAB, the drag handle and the app identity.
Eradicate explicit instruction Auto-generated guidance (“Open the menu”, “Tap Settings”) is off by default (azAdvanced(autoGuidanceEdges = true) opts in). Affordance captions (“Tap to continue”, “Tap to collapse”) are gone.
Physics and motion Haptics now answer every commit, not only FAB activation. New surfaces animate in rather than appearing.

Behaviour changes to be aware of