Routing
Hydrogen 2.0 is out now. These archival Hydrogen 1.0 docs are provided only to assist developers during their upgrade process. Please migrate as soon as possible.
The Hydrogen framework uses a file-based routing system. This guide provides an introduction to how routing works in your Hydrogen storefront.
How routes work
All components added to the src/routes
directory are registered as routes in App.server.jsx
. Any filenames with brackets, like [handle]
, are converted to a route parameter called :handle
.
You can navigate between routes using the Link
component or the useNavigate
hook. You can use the useRouteParams
hook to retrieve the parameters of an active route.
The following example shows how each *.server.jsx
file maps to a different route in the Hydrogen app:
└── src
├── routes
└── collections
└── [handle].server.jsx // localhost:3000/collections/<handle>
└── pages
└── [handle].server.jsx // localhost:3000/pages/<handle>
└── products
└── [handle].server.jsx // localhost:3000/products/<handle>
└── index.server.jsx // localhost:3000/
Example
You have following components in your src/routes
directory:
/routes/index.server.jsx
/routes/custom-page.server.jsx
/routes/products/[handle].server.jsx
The routes are registered in App.server.jsx
and Hydrogen converts [handle]
to :handle
:
/
/custom-page
/products/:handle
Built-in routes
Hydrogen provides the following built-in routes:
/__health
: A health check route that responds with a 200 status and no body. You can use this route within your infrastructure to verify that your app is healthy and able to respond to requests./__rsc
: An internal route used to re-render server components. It's called by the Hydrogen frontend when the route changes, or when server props change. You should never need to manually request this route./__event
: An internal route used to save client observability events. You should never need to manually request this route.
Custom routes
By default, Hydrogen uses a file-based routing system, but you can customize routes in App.server.jsx
using the following components:
Router
: Provides the context for routing in your Hydrogen storefrontFileRoutes
: Builds a set of default Hydrogen routes based on the output provided by Vite's import.meta.globEager methodRoute
: Used to set up a route in Hydrogen that's independent of the file system
API routes
API routes allow you to build your API in Hydrogen. Any server component within the src/routes
directory that exports an API function will become an API route. The following examples show some common use cases for implementing API routes.
Example
The following example shows a "Hello world" implementation of an API route:
export function api(request, {params}) {
return new Response('Hello world!');
}
{% endcodeblock%}
Learn how to work with API routes.
Props for creating custom experiences
Server components placed in the src/routes
directory receive the following special props that you can use to create custom experiences:
Prop | Type |
---|---|
request | HydrogenRequest |
response | HydrogenResponse |
Each server component receives props, which includes custom versions of request
and response
and any serverProps
that you have passed from the client.
Learn how to create custom experiences with props.
TypeScript
Hydrogen supports TypeScript out of the box. When building route components, you can use the provided TypeScript types to improve your developer experience:
import type {
HydrogenApiRoute,
HydrogenApiRouteOptions,
HydrogenRequest,
HydrogenRouteProps,
} from '@shopify/hydrogen';
export default function MyPage(props: HydrogenRouteProps) {
//
}
export const api: HydrogenApiRoute = async (request, options) => {
//
};
// Alternate version of `api`:
export async function api(
request: HydrogenRequest,
options: HydrogenApiRouteOptions
) {}
Tip: The Hello World template is available in TypeScript. You can also refer to the example implementation of TypeScript in GitHub.
Related components and hooks
Next steps
- Learn how to perform common tasks for managing routes in Hydrogen.
- Learn about Hydrogen's configuration properties and how to change the location of the configuration file.
- Learn about how Hydrogen consumes data from different sources.
- Learn how to manage cache options for Hydrogen storefronts.
- Improve your app's loading performance with streaming SSR and Suspense.
- Learn how to manage your server props during your development process.