Skip to main content

Getting Started

Choose an option below to see framework specific guides on how to set up Palette.

1

Install Palette

npm install @palette.dev/browser
2

Initialize Palette

Import palette before all other imports in your app's entrypoint file.

Get your client key at https://palette.dev/[your-username]/[your-project]/settings

instrumentation-client.ts
import {
init,
events,
markers,
network,
vitals,
profiler,
paint,
} from "@palette.dev/browser";

init({
key: process.env.NEXT_PUBLIC_PALETTE_CLIENT_KEY!,
plugins: [
events(),
network(),
vitals(),
markers(),
profiler(),
paint({ componentPaint: true }),
],
});

// Start profiler on user interactions
profiler.on(
[
"paint.click",
"paint.keydown",
"paint.scroll",
"paint.mousemove",
"markers.measure",
"events.load",
"events.dcl",
],
{
sampleInterval: 1,
maxBufferSize: 100_000,
}
);
components/palette-provider.tsx
"use client";
import { useRouter } from 'next/router';

const PaletteProvider = () => {
const useSyncRouterLocation = () => {
const { pathname, query } = useRouter();

useEffect(() => {
tag("palette.location", pathname);
Object.entries(query).forEach(([key, value]) => {
tag(`router.query.${key}`, Array.isArray(value) ? value.join(",") : (value ?? ""));
});
}, [pathname, query]);

return null;
};
app/layout.tsx
import PaletteProvider from "@/components/palette-provider";

export default function RootLayout({ children }: Readonly<{ children: React.ReactNode; }>) {
return (
<html>
<body>
/* Initialize Palette */
<PaletteProvider/>
{children}
</body>
</html>
);
}
3

Upload source maps

Configure your bundler to upload source maps during build time.

This step is required if you are using a framework or a bundler (like Next.js, Webpack, Vite, or Parcel).

npm install @palette.dev/webpack-plugin --save-dev
next.config.js
import { withPalette } from "@palette.dev/webpack-plugin/next";

const withPalettePlugin = withPalette({
key: process.env.PALETTE_ASSET_KEY,
});

export default withPalettePlugin({
// your next config...
});

Set asset key

In your CI, set an env variable named PALETTE_ASSET_KEY to your asset key. This is necessary since source maps are only uploaded in CI.

Get your asset key at https://palette.dev/[your-username]/[your-project]/settings.

npx vercel env add
4

Add headers

To enable profiling, you need to add the "Document-Policy": "js-profiling" to your server responses.

You can skip this step, this was handled by the withPalette util in step 3.