Going to production
A checklist for keys, releases, privacy, flushing and cost before you ship a Nexus integration.
Keys & environments
- A separate API key per environment (development, staging, production). A key writes only to its own environment — mixing them mixes your data.
- The production key lives in a secret store or CI secret, never in a committed file. Client apps necessarily ship their key; that key can only write telemetry and read client-facing config for its environment.
- Rotate by creating a new key, deploying it, then deleting the old one in API keys. Deleting a key takes effect immediately.
Releases & versions
- Set a release (
release,appVersion,NEXUS_RELEASE) from your build — a git SHA orapi@2026.10.4. Errors, logs and journeys carry it, so you can tell which deploy introduced a problem, and Remote Config conditions can target app versions.
Privacy
- Session replay masks text inputs by default; wrap anything else sensitive in
NexusMask(Flutter) or thenexus-block/nexus-maskclasses (web). - Telescope redacts passwords, tokens, cookies and authorization headers before they leave the process. Add your own keys under Telescope → Settings → Redaction.
- .NET's ASP.NET Core middleware excludes query strings by default; keep it that way unless you are sure they never carry secrets.
Delivery
- Short-lived processes flush before exit —
nexus.flush()(Python),await using/FlushAsync()(.NET),await nexus.flush()(JS). The framework integrations do it on shutdown for you. - Forking servers (gunicorn, uWSGI, Celery prefork, PHP-FPM) are handled — the
Python SDK restarts its worker after
fork(); PHP sends after the response.
Cost
- Turn off what you don't use, without touching code:
NEXUS_LIVE_ACTIVITIES_ENABLED=false, orNEXUS_ENABLED=falsefor everything. See Switching services off. - Set Usage limits in the console — a monthly cap per product stops ingestion instead of growing the bill.
- Decide whether you need a per-request analytics event at all (the
Python integrations send one by default —
TRACK_REQUESTS/track_requests=Falseturns it off; .NET's is off by default). Telescope already records every request.
Observability of the SDK itself
- Route SDK diagnostics somewhere you read:
logLevel(Flutter / JS),debug=True(Python),DiagnosticSinkorILogger(.NET).
