Serializes a component tree to a binary command stream and passes it to the platform NIF in a single call. Compose (Android) and SwiftUI (iOS) handle diffing and rendering internally.
Node format
%{
type: :column,
props: %{padding: :space_md, background: :surface},
children: [
%{type: :text, props: %{text: "Hello", text_size: :xl, text_color: :on_surface}, children: []},
%{type: :button, props: %{text: "Tap", on_tap: self()}, children: []}
]
}Token resolution
Atom values for color props, spacing props, radius props, and text sizes are
resolved at render time through the active Dala.Theme and the base palette.
Component defaults
When a component's props omit styling keys, the renderer injects sensible defaults from the active theme. Explicit props always win over defaults.
Platform blocks
Props scoped to one platform are silently ignored on the other:
props: %{padding: 12, ios: %{padding: 20}}
# iOS sees padding: 20; Android sees padding: 12Injecting a mock NIF
Dala.Renderer.render(tree, :android, MockNIF)Binary protocol
See Dala.Renderer module docs and guides/binary_protocol.md for the full
binary protocol specification (v3).
Summary
Functions
Get available colors from theme.
Compute a stable layout hash for a node tree.
Encode a native event frame.
Encode patches to binary frame format for the native side.
Encode a field-mask node patch frame.
Encode a string-table registration entry.
Encode a targeted text update for an existing node.
Render a UI tree for the given platform.
Fast render path for simple updates.
Compute patches between old and new trees.
Get text sizes from theme.
Functions
@spec colors() :: map()
Get available colors from theme.
@spec compute_layout_hash(Dala.Node.t()) :: non_neg_integer()
Compute a stable layout hash for a node tree.
Delegates to Dala.Ui.Renderer.compute_layout_hash/1.
@spec encode_event(String.t(), non_neg_integer(), non_neg_integer(), binary()) :: binary()
Encode a native event frame.
Delegates to Dala.Ui.Renderer.encode_event/4.
@spec encode_frame([Dala.Diff.patch()]) :: binary()
Encode patches to binary frame format for the native side.
@spec encode_patch_node(String.t(), non_neg_integer(), map()) :: binary()
Encode a field-mask node patch frame.
Delegates to Dala.Ui.Renderer.encode_patch_node/3.
@spec encode_register_string(non_neg_integer(), String.t()) :: binary()
Encode a string-table registration entry.
Delegates to Dala.Ui.Renderer.encode_register_string/2.
Encode a targeted text update for an existing node.
Delegates to Dala.Ui.Renderer.encode_set_text/2.
@spec render(Dala.Node.t() | map(), atom(), term(), atom()) :: {:ok, :binary_tree} | {:error, term()}
Render a UI tree for the given platform.
@spec render_fast(Dala.Node.t() | map(), atom(), term(), atom()) :: {:ok, :binary_tree} | {:error, term()}
Fast render path for simple updates.
@spec render_patches( Dala.Node.t() | map() | nil, Dala.Node.t() | map(), atom(), term(), atom() ) :: {:ok, [Dala.Diff.patch()]} | {:error, term()}
Compute patches between old and new trees.
@spec text_sizes() :: map()
Get text sizes from theme.