# Harmony NAPI Bridge Flow
Use this guide to wire ArkUI/NAPI callbacks into `rust_widgets` with a predictable event flow.
## Step 1: Initialize and Create Widgets
Run this sequence in your app startup:
1. `rust_widgets_init()`
2. Create window and controls with `rust_widgets_create_*`
3. Store returned `widget_id` values in your native layer
## Step 2: Bind ArkUI Node Handles
When a UI node is created and mapped to a `widget_id`, register it once:
- `rust_widgets_harmony_bind_node(node_handle, widget_id)`
When a node is destroyed:
- `rust_widgets_harmony_unbind_node(node_handle)`
During app teardown:
- `rust_widgets_harmony_clear_node_bindings()`
## Step 3: Forward ArkUI/NAPI Callbacks
Forward native callbacks into `rust_widgets`:
- Click: `rust_widgets_harmony_on_node_click(node_handle)`
- Value change: `rust_widgets_harmony_on_node_value_changed(node_handle)`
- Menu item: `rust_widgets_harmony_on_node_menu_item(node_handle)`
- Generic: `rust_widgets_harmony_on_node_widget_event(node_handle, kind_code)`
If you already have a `widget_id`, use direct APIs:
- `rust_widgets_harmony_on_click(widget_id)`
- `rust_widgets_harmony_on_value_changed(widget_id)`
- `rust_widgets_harmony_on_menu_item(menu_item_id)`
- `rust_widgets_harmony_on_widget_event(widget_id, kind_code)`
## Step 4: Poll and Dispatch in the App Loop
Consume queued events on each runtime tick:
- `rust_widgets_poll_menu_triggered()`
- `rust_widgets_poll_widget_trigger_event(widget_id_out)`
Trigger kind mapping:
- `1` = clicked
- `2` = value-changed
- `0` = no event
## Step 5: Minimal Callback Pseudo-Flow
```text
onNodeReady(node, widgetId):
rust_widgets_harmony_bind_node(node, widgetId)
onTap(node):
rust_widgets_harmony_on_node_click(node)
onTextChange(node):
rust_widgets_harmony_on_node_value_changed(node)
appTick():
menuId = rust_widgets_poll_menu_triggered()
kind = rust_widgets_poll_widget_trigger_event(&widgetId)
dispatch(menuId, widgetId, kind)
onNodeDispose(node):
rust_widgets_harmony_unbind_node(node)
```
## Related Files
- Header: `examples/rust_widgets.h`
- C bridge sample: `examples/harmony_napi_bridge_sample.c`
- Bridge overview: `docs/HARMONY_NATIVE_BRIDGE.md`