app-info
app-info is a synchronous Rust library for discovering installed desktop
applications and extracting file icons on macOS and Windows.
Features
- Enumerates application metadata without loading icons by default.
- Loads icons lazily or during enumeration at a requested size.
- Returns tightly packed RGBA pixels with cheap, reference-counted clones.
- Supports best-effort scans with per-entry warnings and strict scans that stop at the first error.
- Scans standard macOS application roots recursively.
- Scans per-machine and per-user Windows uninstall registry views.
- Supports optional Serde serialization through the
serdefeature.
Installation
[]
= "0.1"
Enable serialization only when it is needed:
[]
= { = "0.1", = ["serde"] }
Fast metadata-only listing
use get_installed_apps;
Passing 0 keeps enumeration inexpensive because no pixel buffers are created.
Listing with diagnostics
use ;
Use ListOptions::new().strict(true) when inaccessible or malformed entries
should fail the complete operation.
Lazy icon loading
use ;
Icon edges must be between 1 and MAX_ICON_SIZE (currently 2048). This
prevents accidental multi-gigabyte allocations.
Name and identifier lookup
find_apps_by_namereturns every matching display name.find_app_by_nameis the compatibility helper that returns the first match.find_app_by_identifieruses the macOS bundle identifier or Windows product code when available.
Saving icons
The example writes application icons to collision-safe PNG filenames:
Platform behavior
macOS
The library recursively scans /Applications, /System/Applications, and the
current user's ~/Applications directory. Icons are rendered through AppKit in
an autorelease pool, with the calling thread's graphics context restored before
returning.
Windows
The library scans the Uninstall registry keys under HKEY_LOCAL_MACHINE and
HKEY_CURRENT_USER, including 32-bit and 64-bit views on 64-bit builds. It
filters common system/update entries, expands environment variables, handles
quoted DisplayIcon values and converts Shell icons to RGBA through WIC.
Known limitations
- Applications installed outside the standard macOS roots are not discovered.
- Microsoft Store/MSIX packages that do not publish uninstall registry entries are not currently enumerated.
- Publisher and installation date availability varies by platform and installer.
- Some applications do not expose a usable icon or executable path.
- The API is synchronous; call it from a worker thread in latency-sensitive UI applications.
License
MIT