# Changelog

> Released versions of the runstate TypeScript and Python SDKs and what changed in each.

Source: https://docs.getrunstate.com/changelog/

Both SDKs are published as `runstate-sdk` (npm and PyPI), MIT licensed, and versioned together.

```bash
npm install runstate-sdk
pip install runstate-sdk
```

These docs describe version 0.2.0. It works against the current hosted API (`https://api.getrunstate.com`); 0.1.x clients keep working against it too.

## 0.2.0

- **Idle workers:** `consume()` long-polls (`waitMs` / `wait_ms`, default 20 s), so an idle worker makes a few requests a minute instead of polling every `pollMs`. `receive()` and `admit()` accept a wait too. Empty waits and lease renewals don't count toward the request rate.
- **Task groups:** `group.close()` and `expectedMembers` / `expected_members`. An `N_ACCEPTED` group stays open until it is closed, reaches its expected members, or hits its deadline, and is only judged unreachable once closed. `seal()` is deprecated in favour of `close()`.
- **Runs:** `scopes.create({ name })` and `child({ name })` store the name and return it in reads.
- **Admission:** TypeScript `TaskRequirements` accepts `budgets` and `admit()` returns `reservations`; Python exports `TaskRequirements`, `UnitsRequirement` and `BudgetRequirement` type hints. Pool units and the work-limit slot taken by `admit()` are released when the task completes, is rejected or is retried (a server change; no SDK call needed).
- **Permissions:** `ensure()` for pools, quotas, work limits and budgets returns an existing matching resource when the key may not create one, and only raises `FORBIDDEN` when the resource does not exist.

## 0.1.1

- **Python:** `MailboxRef.receive()` works. In 0.1.0 it raised `TypeError` on every call; `consume()` was not affected.
- **Both SDKs:** waiting claim and pool acquisitions (`acquire({ wait: true })`, `run()`) now also wait through `CONCURRENCY_LIMITED`, retrying about once a second.
- **Both SDKs:** `CONCURRENCY_LIMITED` and `OPERATIONS_EXHAUSTED` map to `RateLimitError`.
- **TypeScript low-level client:** error codes are no longer collapsed to `UNAVAILABLE` when the code was added to the contract after the client was written (for example `INSUFFICIENT_BUDGET`).

## 0.1.0

First public release of both SDKs: runs, claims, work queues and durable tasks, task groups, concurrency pools, shared quotas, work limits, budgets, barriers, timers, events and diagnostics; `AsyncRunstate` and the blocking `Runstate` client in Python; the low-level `createRunstateClient` in TypeScript.
