Skip to content

v0.0.5

Choose a tag to compare

@poluruprvn poluruprvn released this 03 Aug 08:31
· 187 commits to main since this release
90c9821

Cookieless identity

Visitors who decline cookies are now countable — without anyone being persistently identified.

When a visitor rejects consent, the client stores nothing on the device and sends no identity at all. The server instead derives an ephemeral id from transport facts the request already carries:

cookieless-<base64url(HMAC-SHA256(salt_of_the_day, project ‖ ip ‖ user_agent))>

IP and user agent are hash inputs only — never stored, never returned by any API. The salt rotates daily and is held only in memory with a TTL; once it expires, that day's hashes are unlinkable to any IP or user agent by anyone, including us. Sessions are stitched server-side on a 30-minute inactivity window.

What this changes in your analytics

Cookieless ids rotate at midnight, so counting them as people would inflate your numbers. InsightQuerySpec gains an include_cookieless toggle, default off:

Cookieless traffic
Unique users, per-user average excluded by default
Funnel, retention, user flow, top-K by user excluded by default
Total event counts always counted
All session metrics always counted
Sum / avg / min / max aggregations always counted

Flip the toggle on when you want the full picture and accept that a returning visitor counts once per day. Both toggle states are served from the pre-aggregated rollup, so neither is the slow path.

Migration

ClickHouse migration 011 adds a rollup key column. No backfill — it applies to an existing table in place and runs as an ArgoCD PreSync hook ahead of the rollout.

Also in this release

  • Invite controls — resends are capped at 10 per rolling 24h window (counting the original), and admins can now revoke a pending invitation. Revoking hard-deletes the record and invalidates any link already sitting in the invitee's inbox, which makes it the way to fix a typo'd address or a wrong role. (#59)
  • Email idempotency — dispatch is keyed per send, so a retried delivery can no longer double-send, and provider-side idempotency conflicts are acknowledged rather than dead-lettered. (#59)
  • Pie chart tiles — a new dashboard tile view mode. (#60)
  • Ingestion observability — batches now report dropped events with a per-reason breakdown, so a partial failure is visible and actionable instead of silent.
  • Dependency updates across Go modules and CI actions. (#53, #54, #56, #57, #58, #62)

Compatibility

No client upgrade is required. Existing SDKs keep working unchanged — the wire changes are additive, and every SDK uses the Connect binary codec, which ignores fields it doesn't know. Cookieless mode itself needs a forthcoming SDK release to opt into; until then this release is a no-op for existing traffic.

One thing to know if you mint your own identifiers: distinct_id and external_id may no longer begin with cookieless-, which is now a reserved server-owned prefix. A batch containing such an id is rejected.

New contributors

Full Changelog: v0.0.4...v0.0.5