# StormFetch Migration Guide

## 1.15.x to 1.16.0

No existing API migration is required. This release adds `STORMFETCH_PACKAGE_INFO`, npm learning documents, branding/metadata alignment, and broader discoverability keywords. Existing imports and behavior remain compatible.

## 1.14.x to 1.15.0

No existing API migration is required.

- Existing interceptor calls remain valid. The optional second argument adds `runWhen`, `once`, and `prepend`.
- Existing string `formSerializer` modes remain valid. An options object now adds nested key styles and a depth cap.
- `query()` and `QUERY()` are additive.
- Default finite content limits now apply consistently to buffered and streamed Fetch/XHR/Node responses. Set an explicit larger finite limit for trusted large transfers; use `-1` only after evaluating memory and denial-of-service risk.
- Resolved request headers now have a null prototype. Use `Object.prototype.hasOwnProperty.call(headers, name)` instead of calling `headers.hasOwnProperty(name)`.

## 1.13.x to 1.14.0

No existing API migration is required. Root imports continue to work.

For smaller and clearer imports, consumers may move capability-specific code to focused entry points:

```ts
import { createStormFetchClient } from 'stormfetch/core';
import { createStormFetchHooks } from 'stormfetch/react';
import { createOpenTelemetryObservability } from 'stormfetch/observability';
```

Offline requests remain opt-in with `offlineQueue: true`. To survive app restarts, add `offlineStorage`. Unsafe queued methods now receive an `Idempotency-Key` unless disabled or already supplied.

Native transfer methods require an injected `nativeTransfer` adapter. StormFetch intentionally does not add a native runtime dependency.

CI environments publishing the package must allow the full `prepublishOnly` gate to run. It now includes build, runtime/security contracts, and packed-consumer verification.
