# Releases and compatibility

Use maintained scripts or pin code and data independently.

Source: https://warcraftforever.com/developers/reference/releases/

Use `/talents/latest.js`, `/legacy/latest.js`, `/tooltips/latest.js`, `/catalog/latest.js`, or `/data/latest.js` for maintained compatible releases. They extend `window.WarcraftForever`; loading the same release again preserves existing APIs and mounts. Loading different releases of one capability on a page throws. ES modules at `latest.mjs` add no globals.

For reproducible code, use `/<capability>/releases/<version>.js` or `.mjs`, using the capability's `version` export. Headless pins use `/<capability>/releases/<version>.headless.mjs`. Matching `.d.mts` entries reference retained declaration files. Code, declarations and required static assets share a content-addressed release; changed declaration bytes also create a new release.

Latest checks for updates after five minutes. Pinned files are immutable and retained across deployments. New breaking APIs use a separate opt-in entry point.

SDK pins do not freeze channel-selected data. Read the [data manifest](https://warcraftforever.com/api/data/v1/manifest) or [catalog manifest](https://warcraftforever.com/api/catalog/v1/manifest) and supply the resource's `dataset` to pin it. Talent/Legacy headless clients accept `createClient({ dataset })`. Layout revisions remain separate from both SDK and dataset versions. Keep dataset IDs and revisions with persisted builds.
