Skip to content

Releases: Shopify/hydrogen

@shopify/mini-oxygen@3.0.0

11 Apr 18:47
705ad50
Compare
Choose a tag to compare

Major Changes

  • The default runtime exported from @shopify/mini-oxygen is now based on workerd. (#1891) by @frandiox

    The previous Node.js sandbox runtime has been moved to the @shopify/mini-oxygen/node export.

    Example usage:

    import {createMiniOxygen} from '@shopify/mini-oxygen';
    
    const miniOxygen = createMiniOxygen({
      workers: [
        {
          name: 'main',
          modules: true,
          script: `export default {
            async fetch() {
              const response = await fetch("https://hydrogen.shopify.dev");
              return response;
            }
          }`,
        },
      ],
    });
    
    const response = await miniOxygen.dispatchFetch('http://placeholder');
    console.log(await response.text());
    
    await miniOxygen.dispose();

Minor Changes

  • Export new Vite plugin from @shopify/mini-oxygen/vite. It integrates Vite with MiniOxygen by running the application code within a worker. (#1935) by @frandiox

@shopify/hydrogen@2024.4.0

11 Apr 18:47
705ad50
Compare
Choose a tag to compare

Minor Changes

  • Change storefrontRedirect to ignore query parameters when matching redirects. For example, a redirect in the admin from /snowboards to /collections/snowboards will now match on the URL /snowboards?utm_campaign=buffer and redirect the user to /collections/snowboards?utm_campaign=buffer. (#1900) by @blittle

    This is a breaking change. If you want to retain the legacy functionality that is query parameter sensitive, pass matchQueryParams to storefrontRedirect():

    storefrontRedirect({
      request,
      response,
      storefront,
      matchQueryParams: true,
    });

Patch Changes

  • Make StorefrontRedirect case insensitive when querying redirect URLs from the Storefront API. (#1941) by @blittle

  • Fix bug where storefrontRedirect would return an error on soft page navigations. (#1880) by @blittle

  • Fix a bug where cart could be null, even though a new cart was created by adding a line item. (#1865) by @blittle

    This allows calling the cart .get() method right after creating a new cart with
    one of the mutation methods: create(), addLines(), updateDiscountCodes(), updateBuyerIdentity(), updateNote(), updateAttributes(), setMetafields().

    import {
      createCartHandler,
      cartGetIdDefault,
      cartSetIdDefault,
    } from '@shopify/hydrogen';
    
    const cartHandler = createCartHandler({
      storefront,
      getCartId: cartGetIdDefault(request.headers),
      setCartId: cartSetIdDefault(),
      cartQueryFragment: CART_QUERY_FRAGMENT,
      cartMutateFragment: CART_MUTATE_FRAGMENT,
    });
    
    await cartHandler.addLines([{merchandiseId: '...'}]);
    // .get() now returns the cart as expected
    const cart = await cartHandler.get();
  • Add postLogoutRedirectUri option to the Customer Account API client's logout method. (#1871) by @michenly

  • Introducing <UNSTABLE_Analytics.Provider> that also includes Shopify analytics, Customer Privacy API and Privacy banner (#1789) by @wizardlyhel

  • Export new Hydrogen Vite plugin from @shopify/hydrogen/vite. (#1935) by @frandiox

  • Add the customer-account push command to the Hydrogen CLI. This allows you to push the current --dev-origin URL to the Shopify admin to enable secure connection to the Customer Account API for local development. (#1804) by @michenly

  • Fix default content security policy directive for frameAncestors. (#1883) by @blittle

  • Fall back to "mock.shop" when no value is passed in storeDomain to createStorefrontClient in development. (#1971) by @frandiox

  • Allow ui_locale to be passed to the customer account login page. (#1842) by @wizardlyhel

  • Deprecate the <Seo /> component in favor of directly using Remix meta route exports. Add the getSeoMeta to make migration easier. (#1875) by @blittle

    Migration steps:

    1. Remove the <Seo /> component from root.jsx:

     export default function App() {
       const nonce = useNonce();
       const data = useLoaderData<typeof loader>();
    
       return (
         <html lang="en">
           <head>
             <meta charSet="utf-8" />
             <meta name="viewport" content="width=device-width,initial-scale=1" />
    -        <Seo />
             <Meta />
             <Links />
           </head>
           <body>
             <Layout {...data}>
               <Outlet />
             </Layout>
             <ScrollRestoration nonce={nonce} />
             <Scripts nonce={nonce} />
             <LiveReload nonce={nonce} />
           </body>
         </html>
       );
     }
    

    2. Add a Remix meta export to each route that returns an seo property from a loader or handle:

    +import {getSeoMeta} from '@shopify/hydrogen';
    
     export async function loader({context}) {
       const {shop} = await context.storefront.query(`
         query layout {
           shop {
             name
             description
           }
         }
       `);
    
       return {
         seo: {
           title: shop.title,
           description: shop.description,
         },
       };
     }
    
    +export const meta = ({data}) => {
    +   return getSeoMeta(data.seo);
    +};

    3. Merge root route meta data

    If your root route loader also returns an seo property, make sure to merge that data:

    export const meta = ({data, matches}) => {
      return getSeoMeta(
        matches[0].data.seo,
        // the current route seo data overrides the root route data
        data.seo,
      );
    };

    Or more simply:

    export const meta = ({data, matches}) => {
      return getSeoMeta(...matches.map((match) => match.data.seo));
    };

    4. Override meta

    Sometimes getSeoMeta might produce a property in a way you'd like to change. Map over the resulting array to change it. For example, Hydrogen removes query parameters from canonical URLs, add them back:

    export const meta = ({data, location}) => {
      return getSeoMeta(data.seo).map((meta) => {
        if (meta.rel === 'canonical') {
          return {
            ...meta,
            href: meta.href + location.search,
          };
        }
    
        return meta;
      });
    };
  • Updated dependencies [f4d6e5b0, a209019f, e50f4349]:

    • @shopify/hydrogen-react@2024.4.0

@shopify/hydrogen-react@2024.4.0

11 Apr 18:47
705ad50
Compare
Choose a tag to compare

Patch Changes

  • Introducing <UNSTABLE_Analytics.Provider> that also includes Shopify analytics, Customer Privacy API and Privacy banner (#1789) by @wizardlyhel

  • Fall back to "mock.shop" when no value is passed in storeDomain to createStorefrontClient in development. (#1971) by @frandiox

  • Expose cartReady state from the cart context. (#1885) by @celsowhite

@shopify/hydrogen-codegen@0.3.0

11 Apr 18:47
705ad50
Compare
Choose a tag to compare

Minor Changes

  • Remove deprecated schema export. Use getSchema('storefront') instead. (#1962) by @frandiox

@shopify/create-hydrogen@4.3.6

11 Apr 18:47
705ad50
Compare
Choose a tag to compare

Patch Changes

@shopify/cli-hydrogen@8.0.0

11 Apr 18:47
705ad50
Compare
Choose a tag to compare

Major Changes

  • Hydrogen CLI now requires @shopify/mini-oxygen to be installed separately as a dev dependency. It is still used automatically under the hood so there is no need to change your application code aside from installing the dependency. (#1891) by @frandiox

    Also, if a port provided via --port or --inspector-port flags is already in use, the CLI will now exit with an error message instead of finding a new open port. When the flags are not provided, the CLI will still find an open port.

Minor Changes

  • Move the Hydrogen CLI's env push command to stable. (#1946) by @aswamy

  • Deprecate the --env-branch flag, in favor of --env. (#1841) by @aswamy

    • --env accepts the environment's handle, instead of the environment's associated branch name
      • Run env list to display all environments and their handles
    • Any CLI commands that accepted the --env-branch flag now accept the --env flag.
  • Support scaffolding projects from external repositories using the --template flag. (#1867) by @frandiox

    The following examples are equivalent:

    npm create @shopify/hydrogen -- --template shopify/hydrogen-demo-store
    npm create @shopify/hydrogen -- --template github.com/shopify/hydrogen-demo-store
    npm create @shopify/hydrogen -- --template https://github.com/shopify/hydrogen-demo-store
  • Add the customer-account push command to the Hydrogen CLI. This allows you to push the current --dev-origin URL to the Shopify admin to enable secure connection to the Customer Account API for local development. (#1804) by @michenly

  • Remove the @shopify/cli-hydrogen/experimental-vite import path in favor of @shopify/hydrogen/vite and @shopify/mini-oxygen/vite. (#1935) by @frandiox

Patch Changes

  • Avoid throwing error in h2 dev --codegen when the Customer Account schema is not found. (#1962) by @frandiox

  • Bump internal workerd dependency to fix a bug when running on Node 21. (#1866) by @frandiox

  • Support Node's NODE_TLS_REJECT_UNAUTHORIZED and NODE_EXTRA_CA_CERTS environment variables in the worker environment. (#1882) by @frandiox

    Use this at your own risk to disable certificate validation or provide additional CA certificates when making HTTPS requests from the worker:

    # Disable certificate validation
    NODE_TLS_REJECT_UNAUTHORIZED=0 npm run dev
    
    # Provide additional CA certificates
    NODE_EXTRA_CA_CERTS=/usr/.../ca-certificates/my-file.crt npm run dev
  • Add --quickstart flag option to init/create command. (#1822) by @gfscott

  • Add a newline after the h2 alias created in ZSH/Bash profiles. (#1950) by @madmath

  • Fix the --markets flag when using npm create @shopify/hydrogen. (#1916) by @frandiox

  • Handle duplicate storefront names when running link command. (#1860) by @gfscott

  • List uncommitted files in the deploy command's "uncommitted changes" error message. (#1944) by @graygilmore

  • Improve h2 setup vite command to cover more migration steps (e.g. vanilla-extract, css-modules, etc.) and keep Remix future flags. (#1915) by @frandiox

  • Add --verbose flag to h2 dev and h2 preview commands to enable verbose logging. (#1928) by @frandiox

    Only CLI logs become verbose by default. If you also want to see verbose logs from Vite as well, use DEBUG=* h2 dev instead.

  • Updated dependencies [646b78d4, 140e4768, ebaf5529]:

    • @shopify/hydrogen-codegen@0.3.0
    • @shopify/mini-oxygen@3.0.0

@shopify/hydrogen@2023.7.15

26 Mar 14:06
a8b6ee1
Compare
Choose a tag to compare

Patch Changes

  • Make sure 400-500 sub-requests are not cached (#1907) by @blittle

@shopify/hydrogen@2023.10.6

26 Mar 13:57
efda06a
Compare
Choose a tag to compare

Patch Changes

  • Make sure 400-500 sub-requests are not cached (#1906) by @blittle

@shopify/hydrogen@2024.1.6

25 Mar 22:11
8f42609
Compare
Choose a tag to compare

Patch Changes

  • Make sure 400-500 sub-requests are not cached (#1903) by @blittle

@shopify/hydrogen@2024.1.5

22 Mar 14:57
e382e72
Compare
Choose a tag to compare

Patch Changes

  • Fix bug where storefrontRedirect would return an error on soft page navigations. Also change the redirect status code from 301 to 302. (#1888) by @blittle