Overview
Release notes forshipdit, newest first. Upgrade steps for breaking releases are in Migration guides.
Breaking changes
endpoint and streamEndpoint were removed from createClient. The client always connects to https://edge.useshipd.com. To get realtime updates, pass stream: true, which opens a wss://ws.useshipd.com connection. Passing either removed option throws:shipdit: `endpoint` was removed…shipdit: `streamEndpoint` was removed…
identify() no longer changes evaluation context. In shipdit (server), identify() now only records an identify event. It no longer sets the user for later evaluations and no longer fetches remote traits, so one request’s identity can’t leak into another request on a shared client. Pass context to each evaluation. Server reset() is also a no-op, preserving the shared anonymous id and leaving subscribers untouched. Browser clients (shipdit/client) and React are unchanged.gt, gte, lt, lte) follow one grammar shared with the Go SDK: YYYY-MM-DD (midnight UTC), or a date-time with a required Z or ±hh:mm zone. Zone-less date-times, lenient formats such as 2026-01-02 10:00, and impossible dates such as 2026-02-30 now compare as strings instead of through Date.parse, so results no longer depend on the server’s timezone. See How values compare.Dashboard preview uses this grammar as soon as the dashboard deploys; production changes only when you upgrade the SDK or Convex component. The edge serves snapshots and does not evaluate rules. Review date-based rules before upgrading; older SDKs can disagree with preview.Added
streamoption (defaultfalse) enables realtime updates with a WebSocket implementation. Node.js 20 callers supply theWebSocketoption; Node.js 22+ provides one globally.overrides.streamEndpointreplaces the WebSocket gateway used whenstreamistrue.overrides.unsafeEndpointreplaces the edge origin. It is unsafe and meant for shipd development and test environments only, because that URL receives your SDK key.close()returns a promise that resolves after pending events are delivered, delivery fails, or the timeout passes. It includes events recorded during an in-flight send. It never rejects.close({ timeoutMs })bounds the wait (default 5 seconds) and then aborts pending sends.
Changed
- Evaluation events from server clients carry the
userIdof the context passed to each evaluation. - Event batches are capped at 100 events per request, the edge’s limit, so a backlog after an outage is delivered instead of rejected.
overrides.unsafeEndpointandoverrides.streamEndpointmust be absolute URLs without credentials, a query, or a fragment;createClientthrows otherwise and warns when an SDK key would be sent in plaintext to a non-local host.
createClient reference.