Skip to content

Add warp://tabconfig/<name> deeplink#9379

Open
haha1903 wants to merge 1 commit intowarpdotdev:masterfrom
haha1903:haichang/tabconfig-uri
Open

Add warp://tabconfig/<name> deeplink#9379
haha1903 wants to merge 1 commit intowarpdotdev:masterfrom
haha1903:haichang/tabconfig-uri

Conversation

@haha1903
Copy link
Copy Markdown

Description

Add a warp://tabconfig/<name> URL scheme handler so users can launch a saved tab config straight from a deeplink (alongside the existing warp://launch/<name>).

By default the tab config opens as a new tab in the active window. Pass ?new_window=true (or invoke when no Warp window is open) to open in a brand-new window instead.

<name> matches the tab config's name field case-insensitively, falling back to the file stem so both warp://tabconfig/My%20Tab and warp://tabconfig/my_tab.toml work.

The handler dispatches to the existing Workspace::open_tab_config, so the params modal and worktree branch generation flows are reused unchanged.

Gated on the existing FeatureFlag::TabConfigs.

Why

Lets users (and external tools / scripts / browser bookmarks) jump straight into a configured pane layout without going through the + menu. Mirrors the long-standing warp://launch/... deeplink for launch configs.

How

  • New UriHost::TabConfig variant in app/src/uri/mod.rs, parsed from tabconfig host string and listed in validate_custom_uri's allowlist.
  • New handler handle_tab_config_uri that resolves the config and either reuses the active window's workspace or opens a new window (via open_new_window_get_handles), then calls workspace.open_tab_config(...).
  • Workspace::open_tab_config promoted from private to pub(crate) so it can be invoked from the URI handler.
  • Added a wasm-side stub for load_tab_configs so the cross-platform pub(crate) use imp::load_tab_configs; in user_config/mod.rs matches the pattern already used by load_launch_configs (no cfg gate needed).

Testing

Manual:

  • open "warposs://tabconfig/<name>" opens the config as a new tab in the focused window.
  • open "warposs://tabconfig/<name>?new_window=true" opens it in a new window.
  • Tab config with params triggers the existing params modal.
  • Worktree-style tab configs still get an autogenerated branch name.
  • Unknown <name> logs a warning and is a no-op.

cargo fmt and cargo clippy --workspace --all-targets --all-features --tests -- -D warnings both pass locally. Full ./script/presubmit will run on CI.

Server API dependencies

No server changes.

Agent Mode

  • Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Changelog Entries for Stable

CHANGELOG-IMPROVEMENT: Added a warp://tabconfig/<name> deeplink that opens a saved tab config in the active window (or a new one with ?new_window=true).

Mirrors the existing warp://launch flow: resolves <name> against the
user's tab configs (case-insensitive on the config name, falling back
to the file stem) and dispatches to Workspace::open_tab_config, which
already handles the params modal / worktree branch generation.

By default the tab config opens as a new tab in the active window; pass
?new_window=true (or have no Warp window open) to open in a brand-new
window instead.

Gated on the existing FeatureFlag::TabConfigs.
@cla-bot
Copy link
Copy Markdown

cla-bot Bot commented Apr 29, 2026

Thank you for your pull request and welcome to our community. We require contributors to sign our Contributor License Agreement, and we don't seem to have the users @haha1903 on file. In order for us to review and merge your code, each contributor must visit https://cla.warp.dev to read and agree to our CLA. Once you have done so, please comment @cla-bot check to trigger another check.

@haha1903
Copy link
Copy Markdown
Author

@cla-bot check

@cla-bot cla-bot Bot added the cla-signed label Apr 29, 2026
@cla-bot
Copy link
Copy Markdown

cla-bot Bot commented Apr 29, 2026

The cla-bot has been summoned, and re-checked this pull request!

@haha1903 haha1903 marked this pull request as ready for review April 29, 2026 12:15
@oz-for-oss
Copy link
Copy Markdown

oz-for-oss Bot commented Apr 29, 2026

@haha1903

I'm starting a first review of this pull request.

You can view the conversation on Warp.

I requested changes on this pull request and posted feedback.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Copy link
Copy Markdown

@oz-for-oss oz-for-oss Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds a warp://tabconfig/<name> handler that resolves local tab configs by display name or source file stem and opens them in an existing or new workspace.

Concerns

  • The URI window-behavior hint can create a fallback window before the tabconfig handler sees ?new_window=true, which can violate the documented default/new-window behavior on platforms that cannot activate the existing window.
  • Security pass: no additional security findings beyond the window-selection behavior noted inline.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread app/src/uri/mod.rs
// Linear deeplink opens a new tab with agent view
Self::Linear => W::default(),
// Tab config deeplink prefers existing window unless ?new_window=true.
Self::TabConfig => W::default(),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [IMPORTANT] window_behavior_hint() is resolved before handle_tab_config_uri can inspect ?new_window=true; on Linux/Wayland this W::default() fallback can create a window up front, so no-query links may ignore the existing window and new_window=true can produce an extra empty window before the tab config opens. Move the new/reuse decision into the handler or use a hint that cannot pre-create a window.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant