Skip to content

Licensing

WriteTrack validates license keys locally using cryptographic signature verification. Validation requires a secure context: serve production pages over HTTPS. Localhost is treated as a secure context.

  • Capture: start(), getData(), and the event methods are available in every license state.
  • Production analysis: getAnalysis() requires a valid license key.
  • Local evaluation: analysis is available on localhost and 127.0.0.1.
Terminal window
npx writetrack init

The CLI prompts for your email and production domain, registers a free 28-day trial, and saves the key to .env:

WriteTrack — Set up a free 28-day trial
Email address: you@example.com
Production domain (e.g. example.com): example.com
Registering you@example.com for example.com...
Done — license key saved to .env
Trial expires: 3/10/2026

For CI or scripted setup, pass the values as flags (this also skips the save prompt) or pipe them on stdin — email first, then domain:

Terminal window
npx writetrack init --email you@example.com --domain example.com
# or
printf 'you@example.com\nexample.com\n' | npx writetrack init

npx writetrack --help shows usage without registering anything; unknown arguments are rejected.

Sign up at the customer portal to get a key and manage your account.

Treat the key as public client configuration bound to a domain. Expose it through your framework’s public/client environment-variable mechanism, then pass that string when initializing:

function createTracker(target: HTMLElement, licenseKey: string) {
return new WriteTrack({ target, license: licenseKey });
}

Each license key is bound to a production domain. The SDK validates that the current hostname matches the licensed domain. Subdomains are included — a key for example.com works on app.example.com, staging.example.com, etc.

Renew a trial or subscription before it expires to keep analysis available. An expired key logs a console warning; capture methods are unaffected either way.

On localhost, no key is needed. This is the easiest way to try WriteTrack:

// Full analysis on localhost — no license required
const tracker = new WriteTrack({ target: textarea });
tracker.start();
const analysis = await tracker.getAnalysis(); // works on localhost