v0.19.0
April 20, 2026
Custom Event Pipeline, Tag Manager Bridge & SDK Hardening
- newDataLayer Bridge plugin: auto-captures GTM dataLayer.push() events as Gurulu tracking — zero GTM config needed
- newGTM templates: client-side and server-side tag templates ready for Community Template Gallery submission
- newPer-tenant custom event mapping: event-name-mapper now supports site-specific mappings with L1/L2/L3 cache
- newCLI goals and funnels CRUD: gurulu goals list/create/update/delete and gurulu funnels list/create/update/delete
- newSourcemap upload API: POST /api/tracker-config/sourcemaps enables error deobfuscation via CLI or CI/CD
- newServerApiKey management: new endpoint for creating/listing/revoking server-side API keys
- newNode SDK identify(): server-side identity resolution with direct send + retry
- newCAPI DLQ retry worker: failed conversion events automatically retried with exponential backoff (max 3x)
- newMeta CAPI batch sending: up to 1000 events per request (was 1-by-1)
- newFlutter & React Native: 13 canonical event helpers (purchase, subscribe, addToCart, etc.) now exposed
- improvedWeb SDK pre-load buffer: events fired before t.js loads are queued and replayed automatically
- improvedAI setup auto-mapping: preSeedIntentProposal now creates EventNameMapping rows for proposed events
- improvedGoal cache invalidation: goals activate immediately after creation (was 5-min stale window)
- improvedCLI add-server: correct Gurulu class import, real ServerApiKey creation, working identify() example
- improvedNode SDK timeout enforcement: AbortController with configurable timeout on all HTTP calls
- improvedServer ingest rate limiting: per-tenant plan-based rate limit added (was IP-only)
- fixediOS & Android consent: track() now respects consent=rejected (was only blocking identify)
- fixedAndroid consent persistence: consent level persisted to SharedPreferences, survives app restart
- fixedEnd-to-end integration tests: 17 tests covering custom event mapping → goal evaluation pipeline