# SDK changelog

## 1.0.0-beta.1 (2026-10-26)[​](#100-beta1-2026-10-26 "Direct link to 1.0.0-beta.1 (2026-10-26)")

### Changed[​](#changed "Direct link to Changed")

* A first state that does not come in time still rejects `ready` with `TIMEOUT`, but no longer ends the client. The client keeps listening and `stateChanged` reports the first state when it comes. Commands called before that state reject with `TIMEOUT`. A rebind that gets no answer still ends the client with `CONTEXT_CHANGED`.

## 1.0.0-beta (2026-10-22)[​](#100-beta-2026-10-22 "Direct link to 1.0.0-beta (2026-10-22)")

The first beta of the SDK. The API may still change before 1.0.0.

### Added[​](#added "Direct link to Added")

* `NablaConnect.create({ iframe, url })` loads the encounter URL in the iframe, runs the handshake, and returns a `NablaConnectClient`. Render the iframe without a `src`.
* `client.ready` resolves with the first state once the handshake is done.
* Commands: `startRecording()`, `stopRecording()`, `startNoteGeneration()` and `exportNote()`. One runs at a time. A command that gets no answer within 30 seconds rejects with `TIMEOUT` and the `reason` `NO_RESULT`. It means the outcome is unknown, not that the command failed: read `getCurrentState()` or wait for `stateChanged` to learn it.
* `getCurrentState()`, `waitUntilClosable()` and `destroy()`.
* Events: `stateChanged`, `noteExported`, `patientInstructionsExported` and `error`.
* `NablaConnectError` and `NablaConnectErrorEvent`, with the error codes `INVALID_ORIGIN`, `INVALID_MESSAGE`, `BUSY`, `TIMEOUT`, `COMMAND_REJECTED`, `CONTEXT_CHANGED`, `UNSUPPORTED_VERSION`, `DESTROYED` and `UNKNOWN`. A bound client ends with `CONTEXT_CHANGED` when another document boots in its iframe, another client binds the same iframe, or the iframe moves to another origin. Create a new client to continue.
* TypeScript declarations for the client, the state, and the exported note and patient instructions.
* The package ships this changelog.
