Appearance
Troubleshooting NextJS
If you're using a framework like NextJS and are running into build errors, check out some common errors below, and how to resolve them.
App router
If you are using the new app router, you may encounter issues when attempting to wrap your app with the PrivyProvider
. If so, follow the instructions below to set up your app with Privy:
1. Create a wrapper component for the PrivyProvider
Since the PrivyProvider
is a third-party React Context, it can only be used client-side, with the 'use client';
directive. Check out these docs from NextJS for more information.
First, create a new component file and add 'use client';
as the first line. Then, within this same file, create a custom component (e.g. Providers
) that accepts React children
as props, and renders these children
, wrapped by the PrivyProvider
:
tsx
// components/providers.tsx
'use client';
import {PrivyProvider} from '@privy-io/react-auth';
export default function Providers({children}: {children: React.ReactNode}) {
return <PrivyProvider appId="insert-your-privy-app-id">{children}</PrivyProvider>;
}
This wrapper component ensures that the PrivyProvider
is only ever rendered client-side, as required by NextJS.
2. Wrap your app with the providers component in your RootLayout
Next, in your app's Root Layout, wrap the layout's children
with your providers component, like so:
tsx
import Providers from '../components/providers';
export default function RootLayout({children}: {children: React.ReactNode}) {
return (
<html lang="en">
<body>
<Providers>{children}</Providers>
</body>
</html>
);
}
Within your RootLayout
, make sure you are using the wrapper component you created in step (1), not the raw PrivyProvider
exported by the SDK.
That's it! You can check out a complete example of Privy integrated into a NextJS app using the App Router here.
INFO
Still have questions? Reach out to [email protected] – we're here to help!