Open-source session recording and replay platform — and a learning project. See what your users actually do — clicks, scrolls, navigation — without video. Lightweight DOM mutation tracking powered by rrweb. Free for everyone, forever.
Built under the Kharko brand, inspired by Kharkiv, Ukraine.
📚 Documentation: kharko-dozor.vercel.app/documentation — full SDK reference, dashboard guide, self-host recipe, architecture deep-dives.
| Package | Description | README | Docs |
|---|---|---|---|
@kharko/dozor |
Framework-agnostic session recording SDK (npm) | dozor/README.md | SDK → @kharko/dozor |
@kharko/dozor-react |
React Context + hook for @kharko/dozor (npm) |
dozor-react/README.md | SDK → @kharko/dozor-react |
The web dashboard (Next.js app) lives in a separate repo: kharko-dozor-dashboard. Use the public demo to evaluate, then self-host your own.
Modular event-driven SDK with clear separation of concerns:
dozor/src/
├── index.ts # Public exports
├── types.ts # Public types
└── recorder/ # All implementation
├── index.ts # Dozor — thin Facade/Mediator
├── transport.ts # Network (retry, gzip, keepalive)
├── core/ # Infrastructure
│ ├── emitter.ts # Typed event bus (Observer)
│ └── state-machine.ts # FSM with transition table (State)
├── pipeline/ # Event flow
│ ├── event-buffer.ts # Storage + drain (Pipeline)
│ └── flush-scheduler.ts # Timer + batch flush (Strategy)
├── markers/ # rrweb custom-event markers
│ └── url-tracker.ts # SPA navigation → `dozor:url` marker + FullSnapshot
└── browser/ # Browser API integration
├── visibility-manager.ts
├── session.ts
└── metadata.ts
Modules communicate via typed Emitter — no direct dependencies between them. The Dozor facade wires everything together.
TypeScript · rrweb · tsup · pnpm workspaces
git clone https://github.com/kolia-zamnius/kharko-dozor-packages.git
cd kharko-dozor-packages
pnpm install
pnpm buildRequires Node.js 20+ and pnpm 10+.
Per-package scripts and contribution conventions: CONTRIBUTING.md.