> For the complete documentation index, see [llms.txt](https://docs.keyless.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.keyless.io/web-sdk/web-sdk-changelog/changelog.md).

# Changelog

### 2.4.2

**Fixes**

* Allows browser extensions to detect the Keyless Web SDK

### 2.4.1

**Fixes**

* Fix edge case with camera permissions

### 2.4

**Highlights**

* Active Face Quality Filters running on the client

**Deprecations**

* **\[Headless]** The `getLastKeylessFrameResults` function has been replaced by `getLastKeylessServerFrameResults`&#x20;
* **\[Headless]** The `getLastKeylessFrameTriggeredBiometricFilters` function has been replaced by `getLastKeylessServerFrameTriggeredBiometricFilters`&#x20;

**Breaking Changes**

* **\[Headless]** The `CREATE_MEDIA_STREAM_ARGS_UNSET` error was added, please localize it as a generic system error
* **\[Web Components]** The localization for the `kl-camera-tip` component and the `SERVER_RECOGNITION_FAILED` error has changed structure, please check the [Localization](/web-sdk/web-sdk-reference/localization.md) documentation

**New APIs**

* **\[Headless]** The `getLastKeylessServerError` function returns the last server error tied to the attempt
* **\[Headless]** The `getLastVideoFrameQuality` function returns the quality of the last video frame from the camera stream, the quality is computed on the client
* **\[Web Components]** The `kl-auth` and `kl-enroll` elements emit a new `video-frame-quality` event

### 2.3.1

**Highlights**

* Removes client-side Lockout Policy

**Breaking Changes**

* **\[Headless]** The `DEFAULT_KEYLESS_LOCKOUT_TIME`, `DEFAULT_KEYLESS_LOCKOUT_TOLERANCE` and `DEFAULT_KEYLESS_LOCKOUT_WINDOW` constants are no longer exported
* **\[Headless]** The `KeylessLockoutAttempt` and `KeylessLockoutOptions` interfaces are no longer exported
* **\[Headless]** The `getLastKeylessLockoutAttempt`, `getLockoutExpirationDate` and `getLockoutTime` functions are no longer exported
* **\[Headless]** The `getServerLockoutExpirationDate` function was renamed to `getKeylessServerLockoutExpirationDate`&#x20;
* **\[Headless]** The `lockout` field in the `KeylessOptions` interface was removed
* **\[Web Components]** The `enable-lockout`, `lockout-time`, `lockout-tolerance` and `lockout-window` attributes are no longer available

**Fixes**

* Fix edge case with camera permissions

### 2.3

**Highlights**

* Passive Face Quality Filters running on the client
* Smaller WebAssembly binary size
* Better Remote Logging

**Deprecations**

* **\[Headless]** The `importKeylessWebAssemblyModule` function now optionally takes `url.binary` instead of `url.file` in the options argument
* **\[Web Components]** The `kl-auth` and `kl-enroll` elements now optionally take the `wasm-binary-url` attribute instead of `wasm-file-url`&#x20;

**Breaking Changes**

* The `@keyless/sdk-web` and `@keyless/sdk-web-components` packages now include a `wasm.data` file, make sure to bundle it or the SDK will not work

### 2.2.1

**Fixes**

* Fix Firefox on Android unable to grant camera permissions

### 2.2

**Highlights**

* Single-Thread by default with opt-in Multi-Thread
* COEP/COOP Security Headers are no longer required by default

### 2.1.2

**Highlights**

* Faster Camera Startup Time
* Better Camera Permission Flow

### 2.1.1

**Fixes**

* Fix Operation ID Forwarding

### 2.1

**Highlights**

* CDN Distribution
* Prettier Web Components UI
* Better Tampering Protections

### 2.0

**Highlights**

* Better Headless APIs
* Tampering Protections
