Releases: rgdevment/LinkUnbound
v1.1.1
v1.1.1
-
Fixed default browser detection on MSIX installs — Windows assigns an opaque ProgId (AppX) to MSIX apps that doesn't contain the identity name; now resolved via AppUserModelID in the class registration
-
Fixed file type associations (.htm, .html, .xhtml, .svg, .pdf) not appearing as selectable defaults in Windows Settings for both standalone and MSIX installs
-
Added OpenWithProgIds entries per extension so LinkUnbound shows up in the per-app defaults picker
-
MSIX manifest now declares file extension associations (.htm, .html, .xhtml, .xht, .pdf, .svg, .mhtml, .mht, .shtml, .webp)
-
Standalone installer now registers all file extensions in Capabilities\FileAssociations and OpenWithProgIds
-
Implemented MSIX startup task management (background task via Windows Task Scheduler API)
-
Data storage paths migrated from APPDATA to LOCALAPPDATA with automatic migration on first launch
-
Enabled automatic publish to Microsoft Store on stable releases
-
Added GitHub Actions workflow for updating downloads badge
-
Unit tests for progIdMatchesLinkUnbound and winRegistrationUserChoiceKeys
-
Widget tests for new association labels (XHTML, SVG) in GeneralPage
-
Unit tests for SettingsView and TitleBar components
-
Improved WinStartupService tests with platform skip conditions
Full Changelog: v1.1.0...v1.1.1
v1.1.0
v1.1.0 — macOS Support & Windows Hardening
This release adds full macOS support, hardens the Windows build, and
significantly improves test coverage, logging, and diagnostics.
New Features:
- macOS: full platform support with native Swift channels for browser
detection, icon extraction, browser registration, startup, tray,
URL handling and local file routing (AppDelegate + Swift bindings) - macOS: tray icon via tray_manager with native icons (32/64/128/256px)
- macOS: DMG packaging script (scripts/build_macos_dmg.sh)
- Windows: MSIX context detection — app knows if it is running as a
Store package and adjusts update and startup flows accordingly - Windows: 'update available on Microsoft Store' notification (EN/ES)
- Diagnostics: ZIP export with system info, registry dump, log tail
and data files listing (replaces PowerShell zip compression) - Logging: structured file logging with subscription lifecycle management
Refactors:
- Replaced PipeMessage/pipe_service with InboundEvent for a cleaner
cross-platform event model - Unified platform bindings interface (DelegateBindings) for macOS
and Windows - Improved picker, settings and bootstrap code formatting and readability
- Streamlined local file URL handling and validation for both platforms
Fixes:
- macOS: defer 'ready' signal until a listener subscribes to avoid
event loss on startup - macOS: window blur and exit behaviour in settings view
- macOS: correct argument order when launching browsers
- Windows: startup task registration error handling and directory creation
- Windows: path separators now cross-platform in diagnostics export
- Windows: logging exceptions no longer crash on missing files
Tests & CI:
- Test suite grows from 106 to 343 total tests (+237):
- update_service coverage 34% -> 93% (HTTP mocks via HttpOverrides)
- win_diagnostics coverage 11% -> 78% (injectable registry dumper)
- New suites: inbound_event, url_utils, maintenance_page, picker_view
- bootstrap and general_page error-path coverage added
- Registry dumper injectable so diagnostics tests run on Linux CI
- Platform.pathSeparator used throughout for cross-platform test compat
Assets:
- New store images (71x71, 150x150, 300x300)
- Hero, poster and box-art images for store listing
- macOS tray icon set
What's Changed
- refactor: MacOS Support by @rgdevment in #1
- Fix. windows crash detection by @rgdevment in #2
New Contributors
- @rgdevment made their first contribution in #1
Full Changelog: v1.0.1...v1.1.0
v1.1.0-beta.3
v1.1.0-beta.3 — Windows stability & MSIX hardening
Windows:
- Detect MSIX packaged context and harden bootstrap error handling
- Replace PowerShell zip with native Dart archive implementation
- Fix MSIX startup task configuration and registration errors
- Add 'update available on Microsoft Store' messages (EN/ES)
- Improve path separators and error handling in diagnostics export
Logging:
- Better log subscription lifecycle and message formatting on Windows
Tests / CI:
- Registry dumper injectable so exportDiagnostics tests run on Linux CI
- Use Platform.pathSeparator for cross-platform test compatibility
- Coverage +29 tests (update_service 34->93%, win_diagnostics 11->78%)
What's Changed
- refactor: MacOS Support by @rgdevment in #1
Full Changelog: v1.1.0-beta.2...v1.1.0-beta.3
v1.1.0-beta.2
LinkUnbound v1.1.0-beta.2
Hotfix release on top of v1.1.0-beta.1, focused on a cold-start
regression on macOS and developer ergonomics.
Fixes
- macOS: opening a link or local file from Mail/Slack/Finder while
LinkUnbound was fully closed (not in the menu bar) used to launch the
app and show the Settings window instead of the picker. Root cause:
the inbound-events channel asked the native side to flush queued URL
events before the Dart side had a chance to subscribe, so cold-start
events landed on a listener-less broadcast stream and were dropped;
the post-frame fallback then opened Settings. The 'ready' signal is
now deferred until a Dart listener actually subscribes, guaranteeing
no events are lost between bootstrap and the first listener.
Tooling
- New scripts/dev_clean.sh (macOS counterpart of dev_clean.ps1):
removes Application Support, caches, preferences, saved state, login
items and rebuilds the Launch Services database. Supports --dry-run,
--skip-files, --skip-ls.
Tests
- mac_inbound_events: replaced the eager-ready test with two new tests
covering the deferred signalling behaviour and idempotency across
multiple listeners. - Coverage bumps for picker_view (file:// rendering + always-open guard
on hostless URLs), general_page (startup enable path, duplicate and
remove browser actions), maintenance_page (export diagnostics dialog
and reset confirmation flow) and log_service (FileSystemException
swallowing when the log directory disappears mid-session).
Distribution
- DMG (signed and notarized) for Apple Silicon and Intel via the
Homebrew tap (brew install --cask rgdevment/tap/linkunbound). - MSIX bundle and self-extracting EXE for Windows x64.
Full Changelog: v1.1.0-beta.1...v1.1.0-beta.2
v1.1.0-beta.1
v1.1.0-beta.1 — macOS support (beta)
First multi-platform release. Adds full macOS support to LinkUnbound.
Highlights
- Native macOS picker, settings and tray (LSUIElement, no Dock icon)
- Registers as default browser via LaunchServices
- Cold-start link handling
- Universal binary (arm64 + Intel x86_64)
- Signed with Developer ID + Hardened Runtime + Apple notarization
- Distributed via Homebrew: brew install --cask linkunbound-beta
- DMG installer attached to the GitHub Release
Pipeline
- New release-mac.yml (codesign + notarytool + stapler + Homebrew tap publish)
- CI matrix expanded to [windows-latest, macos-15]
- Caching, concurrency group and dart fix --dry-run check added
Windows
- No regressions. Existing installer + MSIX paths unchanged.
Full Changelog: v1.0.1...v1.1.0-beta.1
v1.0.1
Full Changelog: v1.0.0...v1.0.1
LinkUnbound v1.0.0
A free, open source browser picker for Windows.
Features:
- Intercepts every link click system-wide (HTTP, HTTPS, PDF, HTML)
- Floating picker near cursor to choose which browser opens the link
- Per-domain rules — save preferences like 'always open GitHub in Chrome'
- Hierarchical domain matching (subdomain → parent → picker)
- Microsoft SafeLinks and redirect unwrapping
- Automatic browser detection from Windows registry
- Custom browsers with manual executable paths
- Drag-and-drop browser reordering
- Keyboard shortcuts (1-9) in the picker
- System tray resident with instant response via named pipe IPC
- Startup with Windows (silent background mode)
- Export diagnostics for troubleshooting
- English and Spanish localization with auto-detection
- Update notifications via GitHub Releases API
- Signed installer (Inno Setup) + MSIX package
- 244 unit tests, zero analyzer issues
Privacy: no telemetry, no accounts, no tracking. Everything local.
License: GPL-3.0
Full Changelog: https://github.com/rgdevment/LinkUnbound/commits/v1.0.0