I'm trying to pass data from a Block Extension to an Action Extension when navigating between them, but haven't found a working solution

Use Case

User types a search query in a Block Extension → clicks a button → navigates to Action Extension → I want to pre-fill a form field with that search query.

What I’ve Tried

1. URL Query Parameters

// Block Extension
navigation.navigate(`extension:my-action?query=${encodeURIComponent(searchTerm)}`);

// Action Extension
const urlParams = new URLSearchParams(window.location.search);
const query = urlParams.get("query"); // Always null

2. Session/Local Storage

sessionStorage.setItem("data", JSON.stringify({ query }));
// ReferenceError: sessionStorage is not defined

3. Shopify Data Object

const { data } = shopify;
// No custom parameters found

Question

Is there an official way to pass custom data between extensions during navigation, or do I need a server-side approach (temporary metafields/database storage)?

Minimal Example

// Extension A (Block)
const handleNavigate = () => {
  const userInput = "some value";
  // How to pass userInput to Extension B?
  navigation.navigate("extension:my-action");
};

// Extension B (Action)
const Extension = () => {
  const [formValue, setFormValue] = useState("");
  // Need to pre-fill formValue with data from Extension A
};

Any guidance appreciated!


const issueId = intents?.launchUrl
? new URL(intents?.launchUrl)?.searchParams?.get(“issueId”)
: null;

No worry, found the fix here.