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.
- Create a workspace and copy your
project key(starts withol_pk_). - Add the tracker snippet or install the npm package below.
- 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',
});
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
| Component | Image | Resources |
|---|---|---|
| ingest | openlook/ingest | 0.5 CPU / 512MB |
| storage (ClickHouse) | openlook/ch | 1 CPU / 1.5GB |
| replay service | openlook/replay | 0.5 CPU / 768MB |
| dashboard | openlook/app | 0.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
| Method | Description |
|---|---|
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
maskAllInputs— replace input values with asterisks (default:true)maskTextSelector— CSS selector whose text is maskeddata-ol-mask— attribute to mask any elementdata-ol-ignore— attribute to exclude a subtree entirelyrespectDNT— honor Do-Not-Track (default:true)