Maintenance in progress
This section is currently being expanded and updated. Some content may not yet be available or may be incomplete. For urgent questions, please reach out at info@scailabs.ai.
This section is currently being expanded and updated. Some content may not yet be available or may be incomplete. For urgent questions, please reach out at info@scailabs.ai.
Desktop editors, terminal clients, and native apps you can install directly. Not SDKs.
No releases yet — teams publish here via their docs API key's downloads:write:<product> scope.
Latest releases for each ScaiLabs product. Updated automatically by each team's publishing pipeline.
**ScaiVault certificate agent v1.0.0** — renews ScaiVault-managed TLS certificates on a host and reloads the service that uses them. Install with pip
Download .whlOfficial .NET client for ScaiVault. Idiomatic C# over HttpClient, async-only, with System.Text.Json source-generated converters. Targets net8.0. Authenticates with ScaiKey JWTs or ScaiVault API keys (X-API-Key, auto-detected on key_ prefix). Covers all 127 endpoints across secrets, policies, rotation, PKI, ACME, dynamic credentials, federation, subscriptions, webhooks, identity, audit, and batch. Use ScaiVaultClient via AddSingleton for ASP.NET Core. MIT.
Download .nupkgOfficial TypeScript and JavaScript client for ScaiVault. Promise-based, full type inference, ships ESM and CommonJS bundles. Node 18+ with zero runtime dependencies via native fetch. Authenticates with ScaiKey JWTs or ScaiVault API keys (X-API-Key, auto-detected on key_ prefix). Covers all 127 endpoints across secrets, policies, rotation, PKI, ACME, dynamic credentials, federation, subscriptions, webhooks, identity, audit, and batch. MIT.
Download .tgzOfficial Python client for ScaiVault. Async-first with a sync wrapper, typed Pydantic models, and connection-pooled httpx under the hood. Python 3.10+. Authenticates with ScaiKey JWTs or ScaiVault API keys (X-API-Key, auto-detected on key_ prefix). Covers all 127 endpoints across secrets, policies, rotation, PKI, ACME, dynamic credentials, federation, subscriptions, webhooks, identity, audit, and batch. MIT.
Download .whl@scailabs/scaikey **v1.0.3** — adds group membership enumeration. Purely additive. ### Added The `GroupsClient` had only `list()` — no way to read a group's members, which Python and .NET have both had since 1.0.0. Anything driving group-derived permissions from TypeScript had to drop to raw HTTP. - **`groups.listMembers(groupId)`** — a group's direct members. - **`groups.listEffectiveMembers(groupId)`** — direct members plus those inherited from nested (child) groups. - **`groups.addMember(groupId, userId)`** / **`groups.removeMember(...)`** - **`groups.listNestedGroups(groupId)`** — groups nested inside this one. - **`groups.listParentGroups(groupId)`** — groups containing this one. - **`GroupMember`** and **`NestedGroup`** types. `GroupMember` models what the endpoints actually return — the *user* projection, `{id, email, display_name, status}` — not a membership row, so there is no `group_id` or `added_at`. (The Python SDK declared those as required and failed on every call until 1.1.5; this ships pinned to the real shape from the start, and is verified against a live server.) ### Also Contract tests now cover the new methods, so the shape is checked against a real ScaiKey rather than a fixture. Run with `SCAIKEY_CONTRACT_URL` and `SCAIKEY_CONTRACT_TOKEN` set; skipped otherwise. ### In 1.0.2 Fixed OIDC discovery for GLOBAL applications — the platform document sits under an extra `/oauth` segment, so `getOidcConfiguration()` 404'd for every cross-tenant app. ### In 1.0.1 One base URL now serves every client: pass the origin and each client builds its own prefix. Base URLs carrying an API prefix are reduced to the origin, so existing configurations keep working.
Download .tgz**v1.0.2** — fixes OIDC discovery for GLOBAL applications, and IdP payload parsing. Backward compatible. ### Fixed - **`getOidcConfiguration()` / `GetOidcConfigurationAsync()` 404'd for every GLOBAL application.** It built `/api/v1/platform/.well-known/openid-configuration`; the real document sits under an extra segment — `/api/v1/platform/`**`oauth`**`/.well-known/openid-configuration`. The two flavours are genuinely asymmetric on the server: | | discovery path | |---|---| | tenant | `/api/v1/auth/tenants/<slug>/.well-known/openid-configuration` | | platform | `/api/v1/platform/`**`oauth`**`/.well-known/openid-configuration` | A trap for anyone tempted to simplify this: platform **jwks** is at `/api/v1/platform/.well-known/jwks.json` — *without* the `oauth` segment. A blanket rule fixes discovery and breaks jwks. Both shapes are modelled explicitly and pinned by tests, including one guarding the jwks path. Reported against the Python SDK by the Storey team; the same construction existed here. ### Fixed (.NET only) - **`IdentityProvider.ProviderType` silently kept its default value.** The model bound only `provider_type`, but the admin list sends `type` and the tenant-scoped list sends `protocol`. Neither populated the property, so it deserialized to the first enum value — a wrong answer rather than an error. Enablement is likewise sent as a `status` string ("ACTIVE"/"INACTIVE") by the admin list. All spellings are now accepted. ### Upgrading No code changes required. ### In 1.0.1 One base URL now serves every client: pass the origin (`https://scaikey.scailabs.ai`) and each client builds its own prefix. Base URLs that already carry an API prefix are reduced to the origin, so existing configurations keep working. Tenant OAuth previously omitted the `/auth` segment and had never resolved.
Download .nupkgScaiKey Python SDK **v1.1.6** — makes the package PEP 561 typed and fixes OIDC discovery for GLOBAL applications. Both reported by the Storey team. ### Fixed - **`get_oidc_configuration()` 404'd for every GLOBAL application.** It built `/api/v1/platform/.well-known/openid-configuration`; the real path carries an extra segment — `/api/v1/platform/**oauth**/.well-known/openid-configuration`. The two flavours are genuinely asymmetric on the server and the SDK applied the tenant rule to both: | | discovery path | |---|---| | tenant | `/api/v1/auth/tenants/<slug>/.well-known/openid-configuration` | | platform | `/api/v1/platform/`**`oauth`**`/.well-known/openid-configuration` | Note the trap for anyone tempted to "simplify" this: platform **jwks** lives at `/api/v1/platform/.well-known/jwks.json` — *without* the `oauth` segment. A blanket rule fixes discovery and breaks jwks. Both shapes are now modelled explicitly and pinned by tests, including one that guards the jwks path. ### Added - **`py.typed` marker (PEP 561).** The package shipped with full annotations but no marker, so type checkers ignored them and consumers needed a scoped `mypy` override. Type checking now works out of the box — you can drop the override. - **Live contract coverage for discovery.** Both discovery forms are now exercised against a real server, alongside the twelve model checks added in 1.1.5. This is the gap that let the discovery bug ship: the contract suite covered every *model*, but not the OAuth helper. ### Upgrading No code changes required. ### Earlier in this line 1.1.5 fixed the remaining model-vs-endpoint mismatches (`GroupMember`, `IdentitySource`, `IdentityProvider`) and added the live contract suite; 1.1.4 fixed URL construction; 1.1.3 fixed pagination and added `applications.get_effective_users()`; 1.1.2 fixed a form-encoding bug that broke every authenticated call; 1.1.1 declared the missing `email-validator` dependency. Nothing has been removed across 1.0.0 → 1.1.6. The only breaking change in the line remains `OAuthClient.decode_id_token` becoming async in 1.1.0.
Download .whlScaiScribe SDK — v0.1.1 alpha. See https://www.scailabs.ai/docs/scaiscribe/changelog
Download .tgzScaiScribe SDK — v0.1.1 alpha. See https://www.scailabs.ai/docs/scaiscribe/changelog
Download .nupkgScaiScribe SDK — v0.1.1 alpha. See https://www.scailabs.ai/docs/scaiscribe/changelog
Download .whlPagination & filter alignment with the ScaiAtlas API. - List/search now send `page_size` (was `per_page`) and parse the server's `{data, page, page_size, total, total_pages}` envelope, so paginated calls return results instead of empty pages. - `search.models` uses a single `tag` filter and `sort`/`order` (`updated|created|name|downloads` × `asc|desc`); removed the unused `status` filter from `versions.list`. - The Python surface (`per_page` kwarg, `.items`, `.pagination`) is unchanged. Builds on 0.1.1 (schema/field alignment).
Download .gzPagination & filter alignment with the ScaiAtlas API. - List/search now send `page_size` (was `per_page`) and parse the server's `{data, page, page_size, total, total_pages}` envelope, so paginated calls return results instead of empty pages. - `search.models` uses a single `tag` filter and `sort`/`order` (`updated|created|name|downloads` × `asc|desc`); removed the unused `status` filter from `versions.list`. - The Python surface (`per_page` kwarg, `.items`, `.pagination`) is unchanged. Builds on 0.1.1 (schema/field alignment).
Download .whlInitial release of the ScaiLog Go SDK source archive (go get github.com/scailabs/scailog-go).
Download .gzInitial release of the ScaiLog .NET SDK (ScaiLabs.ScaiLog, net8.0).
Download .nupkgInitial release of the ScaiLog TypeScript SDK (@scailabs/scailog)
Download .tgzInitial release of the ScaiLog Python SDK (reference SDK
Download .whlOfficial .NET client for ScaiGrid, targeting .NET 8 LTS. 0.2.0 adds the ScaiEcho sub-client — client.ScaiEcho.AnalyzeAsync for batch pyannote analysis and client.ScaiEcho.DiarizeStreamAsync for standalone real-time diarization. Streaming via IAsyncEnumerable of DiarizeSegment using the built-in System.Net.WebSockets.ClientWebSocket, no extra dependencies. Both bearer-header and bearer-subprotocol WebSocket auth. Backfills Transcribe and Speakers CRUD. MIT.
Download .nupkgOfficial TypeScript and JavaScript client for ScaiGrid. 0.2.0 adds the ScaiEcho sub-client — client.scaiecho.analyze() for batch pyannote analysis and client.scaiecho.diarizeStream() for standalone real-time diarization. Streaming uses the platform WebSocket — native on Node 22+ and all browsers, install ws on older Node. Both bearer-header and bearer-subprotocol auth modes. Backfills transcribe and speakers CRUD. ESM and CommonJS bundles, MIT.
Download .tgzOfficial Python client for ScaiGrid. 0.2.0 adds first-class ScaiEcho support — client.scaiecho.analyze() for batch pyannote analysis and client.scaiecho.diarize_stream() for standalone real-time diarization. Sync and async clients sharing one surface. Streaming uses the optional websockets library, install with pip install scailabs-scaigrid[ws]. Both bearer-header and bearer-subprotocol WebSocket auth modes. Backfills transcribe and speakers CRUD. Python 3.10+, MIT.
Download .whlOfficial Python client for ScaiDrive. Async-first (httpx) with a sync wrapper sharing the same surface. Resumable uploads with streaming sha256, Range downloads with local hash verification. 95 methods across 9 resources, Python 3.10+.
Download .whlOfficial TypeScript and JavaScript client for ScaiDrive. Async, fetch-based, ESM + CJS bundles with .d.ts, Node 18+. Resumable uploads with content_sha256 verification, Range-aware streaming downloads, X-Content-SHA256 + ETag integrity. 95 methods across 9 resources (files, folders, shares, external links, permissions, quotas, search, sync, users).
Download .tgzOfficial .NET client for ScaiDrive targeting .NET 8 LTS. Async-first throughout with CancellationToken on every method. Resumable uploads with content_sha256, Range downloads with X-Content-SHA256 integrity. Constructor overloads for owned-HttpClient and IHttpClientFactory injection. 95 methods across 9 resources.
Download .nupkg**ScaiDNS SDK v0.1.0** — first published release. Resource coverage (all three SDKs at parity): - Domains, Records, Reverse Zones, DNSSEC, Templates - Import / Export (incl. multipart file upload) - API Keys, Access Grants, Roles - Users, Groups, Admin (platform config, tenants, audit logs, stats, sync status) - Me / auth context See the API reference at https://scailabs.ai/docs/scaidns/reference for the full endpoint inventory.
Download .whl**ScaiDNS SDK v0.1.0** — first published release. Resource coverage (all three SDKs at parity): - Domains, Records, Reverse Zones, DNSSEC, Templates - Import / Export (incl. multipart file upload) - API Keys, Access Grants, Roles - Users, Groups, Admin (platform config, tenants, audit logs, stats, sync status) - Me / auth context See the API reference at https://scailabs.ai/docs/scaidns/reference for the full endpoint inventory.
Download .tgz**ScaiDNS SDK v0.1.0** — first published release. Resource coverage (all three SDKs at parity): - Domains, Records, Reverse Zones, DNSSEC, Templates - Import / Export (incl. multipart file upload) - API Keys, Access Grants, Roles - Users, Groups, Admin (platform config, tenants, audit logs, stats, sync status) - Me / auth context See the API reference at https://scailabs.ai/docs/scaidns/reference for the full endpoint inventory.
Download .nupkgInitial public release of the ScaiSend SDK. - All 19 endpoints covered: mail send, full template CRUD with versions, bounce / spam / global / group suppression management. - Built-in retry on 429 and 5xx with exponential backoff + jitter
Download .tgzInitial public release of the ScaiSend SDK. - All 19 endpoints covered: mail send, full template CRUD with versions, bounce / spam / global / group suppression management. - Built-in retry on 429 and 5xx with exponential backoff + jitter
Download .whlInitial public release of the ScaiSend SDK. - All 19 endpoints covered: mail send, full template CRUD with versions, bounce / spam / global / group suppression management. - Built-in retry on 429 and 5xx with exponential backoff + jitter
Download .nupkgOfficial Python SDK 1.0 — full backend coverage. Sync + async clients. Typed errors. CLI.
Download .whlOfficial TypeScript/JavaScript SDK 1.0 — works in Node 18+ and modern browsers. ESM + CJS builds, full type definitions, fetch-based.
Download .tgzOfficial .NET SDK 1.0 — targets .NET 8. HttpClient-based, thread-safe, System.Text.Json with records.
Download .nupkgScaiLabs software is dual-licensed. Pick the option that fits your situation.
Which license applies to your use case, and how the dual licensing works. View · Download .md
Default free-use license. Source-available with copyleft-style obligations for derivative works and services. View · Download .md
For organisations that need to ship ScaiLabs software in closed-source products or as part of a commercial service. View · Download .md
Questions about which license applies to your situation? Reach out at licensing@scailabs.ai.
Can’t find what you’re looking for? Our team can help with custom integrations, deployment guidance, and technical support.
Get in Touch →