Documentation

Everything you need to get OpenLook running — from the first snippet to a production self-hosted deployment.

Quickstart

The fastest path from zero to watching your first replay. Total time: about two minutes.

  1. Create a workspace and copy your project key (starts with ol_pk_).
  2. Add the tracker snippet or install the npm package below.
  3. Open your site, click around — the session appears in the dashboard in real time.

Installation

Script tag

<!-- before </head> -->
<script>
  window.openlook=window.openlook||function(){(openlook.q=openlook.q||[]).push(arguments)};
  openlook('init', 'ol_pk_9f3a1c');
</script>
<script async src="https://cdn.openlook.dev/v2/openlook.js"></script>

npm

# any framework
npm install @openlook/tracker

# or use the guided init
npx @openlook/init
import OpenLook from '@openlook/tracker';

OpenLook.init('ol_pk_9f3a1c', {
  maskAllInputs: true,
  performance: true,       // web vitals
  networkCapture: true,     // fetch/xhr bodies
});

Identifying users

Tie a session to a real user so support can pull up the exact replay from a ticket:

OpenLook.identify('user_8412', {
  email: 'jane@acme.com',
  plan: 'growth',
});
Tip. Identification is optional and off by default — anonymous sessions are fully supported.

Self-hosting

The Community edition ships the full platform under MIT. One compose file gets you ingest, storage, the replay service and the dashboard:

# requires docker + 4GB RAM
curl -fsSL https://get.openlook.dev | sh

cd openlook
docker compose up -d

# dashboard on http://localhost:8080
ComponentImageResources
ingestopenlook/ingest0.5 CPU / 512MB
storage (ClickHouse)openlook/ch1 CPU / 1.5GB
replay serviceopenlook/replay0.5 CPU / 768MB
dashboardopenlook/app0.3 CPU / 256MB

Production notes: put the ingest behind TLS, mount a persistent volume for ClickHouse, and set OL_RETENTION_DAYS to control disk usage.

Data regions

Cloud workspaces can be pinned to us-east or eu-central at creation time. All session data stays in-region; only account metadata is replicated. Self-hosted deployments have no external dependencies and no telemetry.

JavaScript API

MethodDescription
OpenLook.init(key, opts)Start the tracker
OpenLook.identify(id, traits)Attach user identity
OpenLook.event(name, props)Log a custom event
OpenLook.pause() / .resume()Control recording
OpenLook.getSessionURL()Deep link to live replay
OpenLook.optOut()Disable tracking + wipe buffer

Privacy controls

PII guarantee. Masking happens in the browser before serialization. Masked content is never transmitted or stored — there is nothing to un-mask server-side.