Block target (purchase.checkout.block.render) UI not rendered for logged-in customers
Summary
Extensions using the purchase.checkout.block.render target execute correctly but their UI is not rendered for logged-in customers. The extension code runs, hooks return correct data, and the component returns valid JSX, but nothing appears on screen. Guest checkout works fine.
Environment
- Shopify Plus store
- Checkout UI Extension API version:
2025-07 - Extension target:
purchase.checkout.block.render - Extension block placed below the “Delivery” section in checkout editor
- Store has both Shipping and Local Pickup delivery methods enabled
Steps to Reproduce
- Set up a store with both Shipping and Local Pickup delivery methods
- Add a checkout UI extension using
purchase.checkout.block.rendertarget - Place the extension block below the “Delivery” section in the checkout editor (the section that contains both Shipping and Pickup targets)
- As a guest, go to checkout, select “Pickup”, choose a location — the extension renders correctly
- Log in as a customer and go to checkout with “Pickup” selected and a location chosen
- The extension UI is not rendered — not when the section is collapsed, and not after expanding it
Expected Behavior
Per the extension targets documentation:
“Block targets always render, regardless of which checkout features are active.”
The extension should render for both guest and logged-in customers.
Actual Behavior
The extension executes correctly — hooks return accurate data and the component returns valid JSX — but the UI is not rendered for logged-in customers. Expanding the collapsed section does not help.
Console logs confirm the extension is running and returning render logs.
Workaround
Switching from the block target to the static target purchase.checkout.pickup-location-list.render-after resolves the issue. The extension renders correctly for both guest and logged-in customers.
Impact
Breaking issue for any block target extension placed below the “Delivery” section that provides critical checkout functionality. In our case, logged-in customers cannot see the required pickup time slot selector (which was created before there was a specific purchase.checkout.pickup-location-list.render-aftertarget)