LowNodes are the flexible building blocks of your application. They can respond to a route request, or they can be called by another node. They can render a return value, or they can create an event. They are designed to be specific enough to observe events and return values, but generic enough to be split up to represent a complex application with its own patterns and structure. Nodes can render HTML/JSON directly from the Ruby class (via RBX, similar to JSX) and render other nodes into the output using Raindeer's special Antlers syntax; <html><{ ChildNode }></html>.
Use .rbx as your file extension and now you can place HTML inside of render():
def render
<html>Content</html>
endAntlers expressions are also now accepted:
def render
<html><{ ChildNode }></html>
enddef render
<html><{ UserNode user=@user }></html>
enddef render
<html>
<{ LayoutNode: username=@user.username }>
<{ UserNode user=@user }>
<{ :LayoutNode }>
</html>
end# Block.
<{ if: @user.happy? }>
<{ UserNode user=@user }>
<{ :if }>
# Directive.
<{ UserNode user=@user if: @user.happy? }># Block.
<{ for: user in: @users }>
<{ UserNode user=user }>
<{ :for }>
# Directive.
<{ UserNode user=user for: user in: @users }>