SDKs

Pick the package that matches your framework — they all wrap one engine.

Pivolio ships one tracking engine and several thin bindings around it. Install exactly one of them; they are not meant to be combined in a single page.

The packages

PackageInstall whenWhat it gives you
@pivolio/browserPlain JS/TS, Vue, Svelte, or a script tagThe Tracker class and the singleton API
@pivolio/reactAny React app that isn’t Next.jsThe provider and hooks
@pivolio/nextNext.js (App Router or Pages)All of React, plus <PivolioPageView />
@pivolio/shopifyA Shopify Web Pixel extensioncreateShopifyPixel(api)
@pivolio/coreNeverShared internals — private, and bundled into the others

@pivolio/core is a private package. It is bundled into every published SDK, so you never install it and never import from it. The four published packages above are the entire public surface.

@pivolio/react and @pivolio/next depend on @pivolio/browser, so installing the wrapper is enough — you don’t add the browser package alongside it. And because @pivolio/next re-exports the whole React surface, a Next app installs @pivolio/next only.

$npm install @pivolio/browser
$# or @pivolio/react · @pivolio/next · @pivolio/shopify

Versioning

Every package is released together off a single v* git tag and shares one version number. That means you never have to reason about compatibility between, say, @pivolio/next and the @pivolio/browser it wraps: matching versions are the only combination that ships.

The practical consequence is that upgrading is all-or-nothing. If you have both @pivolio/next and @pivolio/shopify in a monorepo, bump them in the same change.

What every binding shares

Whichever package you install, the behaviour underneath is identical:

  • track(name, { properties, traits }) — properties are nested under properties, never passed at the top level.
  • Batching by default — events buffer and go out via /batch. See Configuration.
  • One identity model — the same cookies, the same /id server call, the same cross-domain linker. See Identity and consent.
  • Zero runtime dependencies — nothing is pulled in beyond React itself for the React and Next bindings.

Events are tracked and reported as soon as they arrive, but delivery to ad platforms requires an active plan or trial. An unsubscribed workspace records everything and dispatches nothing.