Layerz 3.9: Loops, Guards, and Smarter Data
For Each and Guard bring real control flow to Action Flows — plus rich link cards, HTML rendering, relative dates, and lists that hide rows on their own.
Layerz 3.9 is all about logic and data. Action Flows learn to loop and to stop early, labels learn HTML and friendlier dates, and lists learn to hide rows on their own. Here's the tour.
Real control flow: For Each and Guard
Until now, Action Flows ran top to bottom, with Conditional as the one way to branch. Version 3.9 adds the two missing pieces.
For Each iterates over any array, running a body flow once per
element. Inside the body you bind the loop's {Item, Index} output like
any other value, and collect results by appending to a data array. Feed
it a list of IDs, call an API for each one, append every response — and
an ID list becomes a detail list, no code involved.
Guard is the early exit. Give it one condition: when it holds, the flow continues; when it doesn't, the flow stops right there — an intended stop, not an error. "Continue only when the input isn't empty" or "stop unless the response is 2XX" is now a single action instead of a branch with empty arms. Inside a For Each body, a Guard skips just that iteration.
Together with Conditional, that's branch, loop, and early return — the full control-flow toolkit, assembled visually.
Link cards and HTML text
The new Link View component turns a URL into a rich preview card — title, image, and domain, fetched automatically. Bind the URL to your data and every cell gets its own card.
Labels gain a Renders HTML toggle. API text that arrives as HTML
fragments — bold, links, code — now renders properly, and links are
tappable. It's the difference between showing <p>We're hiring</p>
and showing what it means.
Dates that read like a feed
Bind a date to a label and pick a display format: date only, time only, standard combinations — or relative time, so timestamps read "2 hours ago" or "yesterday" like every feed you've ever scrolled.
And because so many APIs send time as a bare number, Layerz now reads numbers as Unix time wherever a date is expected. Seconds or milliseconds, parsed automatically — no conversion step, no transformer, it just works everywhere a date can go.
Lists that manage themselves
A cell whose Hidden resolves to true now drops out of the list entirely at runtime — no blank row left behind. Combine it with comparison bindings (which gain not contains, is empty, and is not empty operators) and rows appear and disappear with your data: hide the link card when there's no URL, show the empty state when the array runs dry. When a whole section empties out, Hide When Empty takes care of the rest.
APIs that shape your data for you
Send a test request, and the response's root object now registers as a project data schema, named after the API's path. Parsed responses carry real schema identity, so you can append them to arrays or run them through a Data Transformer directly. Repeat the test as often as you like — similar schemas are reused, and merging only ever adds fields, so your bindings never break. OpenAPI imports with inline response shapes get the same treatment.
And the polish
- The data schema editor got a fresh look — a card on a dotted-grid canvas, matching the design canvas (enums included).
- Bar Buttons gain an Enabled property with data binding.
- Bindings now reach views inside section headers, footers, and menus.
- Editing a tab bar container no longer runs the child screens' Scene Load flows.
- Scroll position stays put while data streams into a bound list.
Layerz 3.9 is available now on the App Store for iPhone, iPad, and Mac. The documentation covers every feature above in depth — start with Conditions & Branching for the new control flow.
We'd love to hear what you build — support@layerz.app.