01
Install the packages
pnpm add @pact/react @pact/runtime02
Install the bootstrap
This is the enforcement boundary. Keep it server-rendered and before optional code.
typescript
import { PactGate, PactProvider } from '@pact/react'
export function App() {
return (
<PactProvider siteKey="site_live_your_key" src="/pact.js" apiBase="/v1">
<PactGate purpose="analytics">
<Analytics />
</PactGate>
<YourApp />
</PactProvider>
)
}03
Wire React
tsx
import { PactGate, PactProvider } from '@pact/react'
export function App() {
return (
<PactProvider siteKey="site_live_your_key" src="/pact.js" apiBase="/v1">
<PactGate purpose="analytics">
<Analytics />
</PactGate>
<YourApp />
</PactProvider>
)
}04
src/PrivacyButton.tsx
tsx
import { PactPreferencesButton, usePact } from '@pact/react'
export function PrivacyButton() {
const { gpc, purposes } = usePact()
return (
<PactPreferencesButton>
Privacy choices {gpc ? '· GPC active' : ''}
</PactPreferencesButton>
)
}