Next.js

Quick Start

Get started with BProgress for Next.js

BProgress support app and pages directory.

Import

App Directory

Import into your /app/layout(.js/.jsx/.ts/.tsx) folder.

import { AppProgressProvider as ProgressProvider } from '@bprogress/next';

Pages Directory

Import into your /pages/_app(.js/.jsx/.ts/.tsx) folder.

import { PagesProgressProvider as ProgressProvider } from '@bprogress/next';

Usage

<ProgressProvider>
  ...
</ProgressProvider>

Example

App Directory

First approach in a use client layout.

app/layout.tsx
'use client';
 
import { ProgressProvider } from '@bprogress/next/app';
 
export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body>
        <ProgressProvider 
          height="4px"
          color="#fffd00"
          options={{ showSpinner: false }}
          shallowRouting
        >
          {children}
        </ProgressProvider>
      </body>
    </html>
  );
}

Second approach wrap in a use client Providers component. (Recommended)

Create a Providers component to wrap your application with all the components requiring 'use client', such as BProgress or your different contexts...

app/providers.tsx
'use client';
 
import { ProgressProvider } from '@bprogress/next/app';
 
const Providers = ({ children }: { children: React.ReactNode }) => {
  return (
    <ProgressProvider 
      height="4px"
      color="#fffd00"
      options={{ showSpinner: false }}
      shallowRouting
    >
      {children}
    </ProgressProvider>
  );
};
 
export default Providers;

Then wrap your application with the Providers component.

app/layout.tsx
import Providers from './providers';
 
export const metadata = {
  title: 'Create Next App',
  description: 'Generated by create next app',
};
 
export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body>
        <Providers>{children}</Providers>
      </body>
    </html>
  );
}

Pages Directory

pages/_app.tsx
import type { AppProps } from 'next/app';
import { ProgressProvider } from '@bprogress/next/pages';
 
export default function App({ Component, pageProps }: AppProps) {
  return (
    <ProgressProvider
      height="4px"
      color="#fffd00"
      options={{ showSpinner: false }}
      shallowRouting
    >
      <Component {...pageProps} />
    </ProgressProvider>
  );
}

On this page