Make structure visible
Read common SwiftUI, XAML, QML, Qt Designer, Qt C++ and JUCE constructs as normalized reports or an ASCII layout tree. Unsupported components remain explicit review boundaries.
Open-source developer tool · Starlit Digital
Understand a UI layout before you translate it.
loom analyzes interface structure across SwiftUI, WinUI XAML, Qt and JUCE. Inspect a layout, generate a reviewable scaffold, and compare what changed—all from the command line.
Local analysis. Readable reports. Native behavior stays an engineering decision.
Why loom?
Moving a screen between frameworks means more than renaming controls. Spacing, hierarchy, native components and accessibility can change along the way. loom brings common layout constructs into a shared model so you can inspect differences and review the target’s remaining contracts.
Read common SwiftUI, XAML, QML, Qt Designer, Qt C++ and JUCE constructs as normalized reports or an ASCII layout tree. Unsupported components remain explicit review boundaries.
Produce reviewable XAML, SwiftUI or JUCE output and target contracts. Review behavior, actions, state and accessibility before integrating generated code.
Compare structural parity and profile-based visual metrics. Bundle analysis, graphs, contracts and reports for a handoff another developer can inspect.
A first useful result
The source install includes loom’s pattern catalog. It needs Go 1.25 or later, Bash and Make. The sample uses public fixture layouts; you do not need to point loom at a private project to try it.
Clone the repository and run make build. Add $HOME/.local/bin to PATH. Prefer a binary? Release archives are available for macOS, Linux and Windows.
Run loom inspect:ascii examples/sampleapp/mainwindow.xaml from the checkout. You get a layout tree before generating or changing files.
Write a scaffold into a fresh temporary directory, then compare the supplied SwiftUI and XAML layouts. Reports identify work to review; they do not certify a finished port. This sample comparison reports warnings and exits with status 1 because the layouts differ.
A runnable workflow
This macOS/Linux shell example uses the bundled sample and a fresh output directory. Inspecting and comparing read the source; generation writes the requested file.
For the CLI alone, clone the Starlit Digital repository, then run go install ./cmd/loom from its root. That does not install the pattern catalog. Use the full source install for catalog validation and the complete sample workflow.
git clone https://github.com/Starlit-Digital/loom.git
cd loom
make build
# Add $HOME/.local/bin to PATH if needed.
loom inspect:ascii examples/sampleapp/mainwindow.xaml
output_dir=$(mktemp -d)
loom generate:xaml examples/sampleapp/contentview.swift \
--output "$output_dir/generated.xaml"
loom inspect:parity examples/sampleapp/contentview.swift \
--target examples/sampleapp/mainwindow.xaml \
--from swiftui --to winui3 --jsonGo further
Once the sample makes sense, point loom at your own layouts. Use individual commands for focused questions, or a project manifest to assemble a review bundle.
inspect:visual-parity compares profile-normalized metrics and semantic roles. Font inspection supplies intrinsic material metrics. These reports are not screenshot-based pixel comparisons.
generate:contracts reports state, action, collection and accessibility work. patterns:transfer helps plan how source layout intent maps to a target.
project:build writes manifest-directed analysis, component graphs, scaffolds, contracts and comparison reports. It builds a review bundle, not a compiled native application.
Know the boundary
loom parses common constructs, with conservative heuristics for some C++ and Designer inputs. Generated output is scaffold code. A good report does not prove that a target screen renders, behaves or meets accessibility requirements correctly.