What's new since 1.5.3
Detection
- Results are now traits grouped by kind, so an app can be SwiftUI and Swift and Sparkle at once instead of having a single stack.
- Languages for every app: Swift, Objective-C, Rust, and Go, found in the app's executable, its own frameworks, and its extensions. Tailscale shows Go from its network extension; SwiftUI apps with a Rust core show both.
- New kinds:
- Graphics: Metal, OpenGL, Vulkan (MoltenVK).
- Distribution: App Store, TestFlight, Developer ID, Apple, and ad-hoc signed, read from the code signature. App Store moves here from Updaters, and TestFlight builds are no longer reported as App Store.
- Updaters: Sparkle, Squirrel, and Tauri Updater.
- Security: App Sandbox, Hardened Runtime, and Notarized (when the ticket is stapled).
- Background items: login items, launch agents and daemons, privileged helpers, and system extensions.
- Bundles without an executable are reported as Other but keep what their contents show.
- Cached results are re-detected on first launch.
Main window
- The sidebar has a section per kind; pick one trait from each to combine filters.
- App rows keep their tags to how the app is built (UI, language, renderer, updater); the inspector lists every kind.
- The evidence list says which traits were inferred, such as AppKit and Objective-C when nothing more specific matched.
- A trait filter stays visible after switching to a category without it, and an empty result offers Reset Filters.
- File → Export Results… is disabled when no apps match, and CSV gets a column per kind.
Command-line tool
- Text output prints one line per kind. In
--json,traitsis an object keyed by kind (ui,language,renderer,graphics,distribution,updater,security,background). - Unknown options are reported instead of being read as the app path.
Performance
- Binaries are searched in place instead of through
strings: Tern went from 3.7s to 0.6s, and a full/Applicationsscan takes a few seconds.