PactDOCS

FRAMEWORK / WEB COMPONENTS

Astro

A natural fit: server-render the bootstrap, then ship only Pact’s tiny client.
Same consent semantics First-party runtime GPC before tags
01

Install the packages

pnpm add @pact/web @pact/runtime
02

Install the bootstrap

This is the enforcement boundary. Keep it server-rendered and before optional code.

server document
typescript
import { renderPactBootstrap } from '@pact/web'

const pactBootstrap = renderPactBootstrap({
  siteKey: 'site_live_your_key',
  src: '/pact.js',
  apiBase: '/v1',
})

// Render pactBootstrap as trusted HTML at the start of <head>.
// It must appear before analytics, advertising, or other optional code.
03

Wire Astro

src/layouts/Base.astro
astro
---
import { renderPactBootstrap } from '@pact/web'
const bootstrap = renderPactBootstrap({ siteKey: 'site_live_your_key' })
---
<html lang="en">
  <head><Fragment set:html={bootstrap} /></head>
  <body>
    <slot />
    <pact-preferences-button>Privacy choices</pact-preferences-button>
    <script>
      import { definePactElements } from '@pact/web'
      definePactElements()
    </script>
  </body>
</html>
FINISHVerify the production installation