Show detached visualizers in popovers and inline ones in place. Move
through the tree with the keyboard, and scroll the hex view and the
tree separately.
Draw line numbers and the current line's band in a gutter, with fold
chevrons that fade in while the pointer is over it, and a guide down
each open scope. Collapse a folded range behind a placeholder, and put
a swatch before each colour the server reports.
Store them with the REPL cell and the address insight, as a JSON
column each, and bind the decode view to them. Older rows and wire
cells without the field decode as none.
Place a struct at any byte from the context menu, or run a file's own
placements. Outline each leaf field in the hex view, and select the
innermost field on a byte click.
HSplitView sizes itself to its panes' preferred widths rather than the
window, so at narrow widths the panel ran past the window's edge and
was clipped. Hold the panel's width ourselves and resize it through a
handle, keeping it within what the detail pane leaves.
Draw each row as a single Text in a LazyVStack, redraw only rows whose
selection changed, and hit-test from the font's metrics instead of
measuring every cell.
templates and availability spawned `emulator -list-avds` on every
render, so opening the boot sheet -- and clicking a template, which
re-queries them all -- stuttered for seconds. Cache the listing and
warm it off the main thread when the picker or sheet appears.
Collapse the two per-architecture Android entries into one; the
chosen AVD now decides the architecture, retiring the message that
wrongly claimed Frida could only instrument the other one.
Make NavigationSplitView the window's root so its sidebar tints its
slice of the titlebar natively, the way Xcode's does. Move the side
panel into the detail column and the event stream to a bottom
safeAreaInset with an opaque background, so the stream spans the full
width and pushes the content up whether or not the sidebar is
showing. Replace CollapsibleVSplitView with a SwiftUI resize handle
and collapse bar.
Give the detail side the same placeholder rows as the device list:
while a device enumerates, with a status footer that keeps the
connection-stage readout; and while devices are still being
discovered, so the detail never flashes "Select a Device" first.
Render redacted placeholder rows in the same list the loaded state
uses, so the sidebar keeps its shape and the swap to real devices
is a fill-in rather than a jump from empty space.
The mode picker's maxWidth cap compressed and clipped its leading
segment on the first layout pass, before the detail column's width
resolved. Pin it to its natural size instead. Drop the redundant
discovery hint so the loading sidebar is just the header.
The sidebar dropped its header and centred a lone spinner while
discovering, then snapped to the header and list once devices
arrived. Pin the header for every state so rows just fill in.
The Liquid Glass toolbar backdrop frosted the top of the detail
column's content and drew a divider across it. Hide it so the
detail stays flush to the top.
Reset the parameters synchronously with the template selection instead
of a render cycle later, and key the detail on the template, so a newly
selected template no longer shows the previous one's fields.
Read the shared connection activity in the target picker and put the
current stage, with a progress bar that eases toward the next stage
over its expected duration, under the spinner in place of "Querying".
Show the stage on an attaching session's row too, since a session
re-establishing connects the same way.
Unpack the published archive beside the LumaCore bundle, where the
app already looks, and sign every emulator for the hardened runtime;
TCG needs the JIT entitlements.
Name the build once now that more than Windows uses it, and keep a
checksum per platform.
Drop the Monaco webview. Edit in a GtkSourceView on GTK and in a
native text view on Apple, both speaking to Frida.Compiler's
in-process language server for completions, signature help,
hovers and diagnostics.
Color, complete and indent code natively, matching the GitHub
theme in light and dark.
Keep a stopping machine listed until its shutdown returns, guard
against a second stop, and let the button say so and go quiet
instead of firing again.
Map the shifted row so keys like ':' reach the guest, and hold
shift around a stroke that needs it. Send a character on its own
key-down, tapping down and up, rather than tracking its phases.
Read the version stamped into a fetched agent's note, and list the
last releases from GitHub to learn what each flavor has published.
Offer the latest to download, name it on the button, and show an
update once a newer one lands. Drop the pinned version constant.
A machine named after its template showed no subheading at all, and
with one Linux template the architecture is half the story. Both
panels now say template and architecture, whenever that adds to the
name.
Hitting Download gave nothing back until the file was there. Stream
the starter images and the agent through a delegate that reports how
much has arrived, carry the fraction in the downloading state, and
show the percentage in both boot dialogs as it moves.
The starter files and the agent follow the chosen architecture, yet
the choice sat below them. Put it with the machine's identity, right
after its name.
The three Alpine templates said the same thing three times. Fold them
into one Linux template whose architecture is a parameter, defaulting
to the machine's own. A template now carries a variant per
architecture -- its agent flavor and starter images -- and resolves
the right one from the chosen parameters, so the boot dialogs offer
the starter kit and agent that fit the selection.