Unexpected Server Error Error: shopify.toast can't be used in a server environment.

I am trying the shopify remix app tutorial for embedded apps but I am getting an error

Unexpected Server Error

Error: shopify.toast can't be used in a server environment. You likely need to move this code into an Effect.

I haven’t done any coding I just did init and then npm run dev

1 Like

same issue here . brand new embedded app -

2 Likes

same here

1 Like

same problem

2 Likes

Same problem here

1 Like

in app/routes/app._index.jsx or tsx

1 Like

Commenting out that line doesn’t work for me. Even after I killed and re-ran my dev server.

edit: comment out the entire useEffect hook and it should run.

All those who are facing this issue comment

// useEffect(() => {
// if (productId) {
// // shopify.toast.show(“Product created”);
// }
// }, [productId, shopify.toast]);

in app._index.jsx in routes
It started working

1 Like

Commenting out the code as a temporary workaround. However, this doesn’t address the root cause and simply postpones the problem.

It appears that the useEffect hook itself might not be triggering correctly on mobile devices. Updating state variables from within the useEffect does not work.

1 Like

The toast is not imported properly no issue with hooks since it’s boilerplate I think shopify would fix it in next update

1 Like

If you have code like this:

useEffect(() => {
  if (showMessage) {
    shopify.toast.show('message');
    setShowMessage(false);
  }
}, [setShowMessage, showMessage, shopify.toast]);

Change it to this:

useEffect(() => {
  if (showMessage) {
    shopify.toast.show('message');
    setShowMessage(false);
  }
}, [setShowMessage, showMessage, shopify]);

It’s the shopify.toast useEffect dependency that is causing the problem. The solution is to change the dependency to shopify (without the .toast).

1 Like

this should be the accepted answer @rahular

2 Likes