Skip to main content
This guide covers how to install Userplane in a Remix application.

Adding the script

The fastest way to add Userplane is the CDN embed. Remix controls the full HTML document through the root route, so add these two tags to the <head> in app/root.tsx:
Replace YOUR_WORKSPACE_ID with your workspace ID. You can copy the snippet with your ID pre-filled from Workspace Settings > Domains in the Userplane dashboard.

npm SDK

Use the npm SDK when you need programmatic control — triggering recordings from a button, attaching user metadata, or reading recording state.

Installation

Initialization

Create a provider component that initializes the SDK and mount it in your root route.
Remix does not use NEXT_PUBLIC_ or VITE_ prefixes for client-side environment variables. Instead, server-side env vars are passed to the client through a root loader that serializes them to window.ENV. The dangerouslySetInnerHTML script block above is the standard Remix pattern for this.

URL parameters

Remix loaders may redirect users before the SDK reads the userplane-token and userplane-action query parameters. If your app redirects unauthenticated users to a login page, preserve userplane- prefixed parameters through the redirect:
See Installation for the full list of parameters to preserve.

Sensitive data

Add data-userplane-blur to any element you want blurred in recordings. See Sensitive Data Redaction for the full reference.

Metadata

Call set() after initialize() to attach user context to recordings:
See Metadata SDK for the full API.

SSR

@userplane/sdk is SSR-safe to import — it does not reference window or document at module evaluation time. The initialize() call must run client-side. Calling it inside useEffect guarantees it runs only in the browser.

Example app

A complete Remix example is available at github.com/userplanehq/userplane-sdk-examples/tree/main/examples/remix.