Repository navigation
feat: add host-controlled external navigation - #130
Merged
Merged
Conversation
Add ExternalLink and an opt-in navigation route with HTTPS validation, origin policy, and host-owned confirmation. Preserve the bundle sandbox and wire the local preview host. Validation: build, static checks, reference check, starter check, and 1,044 tests pass. Packed consumer installation is blocked by npm returning 404 for es-toolkit@1.53.1.
albert20260301
approved these changes
Nov 2, 2026
albert20260301
left a comment
There was a problem hiding this comment.
No blocking findings. The route is opt-in, validates absolute credential-free HTTPS destinations and exact allowed origins, and keeps confirmation in the host without widening the iframe sandbox. Modifier intent survives transport; cancellation and Activity restoration clean up pending requests.
Local build, types and lint pass, as do all 35 focused tests (21 policy/helper tests and 14 Chromium workflows), including confirmation, popup isolation and cancellation. Required source/packed CI is green.
Other viewers still need to register the route. This is not available in published packages until a containing SDK release is published.
redox
approved these changes
Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bundle apps cannot open external links from their restricted iframe. Add
ExternalLinkand thenavigateNewTab,navigateNewWindow, andnavigateNewWindowOrTabclient helpers, delivering navigation intent through an opt-innavigation:openExternalbridge route without relaxing the sandbox.The host validates HTTPS URLs and optional allowed origins, then asks for confirmation before opening the destination. Original Shift/Ctrl/Cmd intent survives the bridge. Existing frontend navigation helpers can be registered directly with
createExternalLinkHandler({ navigate: navigateNewWindowOrTab }); the SDK supplies an undispatched synthetic KeyboardEvent with the navigation modifiers during the real confirmation click. Ordinary links request a new tab.Local preview hosts are wired up. Other viewers must register the route. Cancellation cleans up the host dialog and allows links hidden by React Activity to work when restored.
Validation:
bun run checkpassed with Bun 1.4.4 and four test workers, including all 1,063 tests, package-consumer checks, and starter checks. The 35 focused navigation tests cover URL policy, all three intents, modifier precedence, popup isolation, helper failures, and cancellation/retry behavior.