# AuraImage SDK v2 — Client-Side Uploads, Secret Key Rotation, and Armenian Language Support (https://auraimage.ai/blog/auraimage-sdk-v2-release)



Three months of shipping compressed into one release. Here is what changed.

## Client-side browser uploads [#client-side-browser-uploads]

The SDK (`@auraimage/sdk`) now exposes `createUploadToken` — sign an upload token server-side once, hand it to the browser, and [upload directly from the client](/docs/upload). No file touches your backend.

```ts
// Server: sign a token
import { createUploadToken } from '@auraimage/sdk/server';
const token = await createUploadToken({ projectName: 'my-app' });

// Client: upload directly
import { upload } from '@auraimage/sdk/client';
const result = await upload(file, token);
```

This removes the most common bottleneck in image-heavy apps — the upload proxy route. The token is HMAC-signed with your project's Secret Key, scoped to a 15-minute window, and verified at the CDN edge.

The drop-in UI for this is the [uploader component](/docs/uploader).

## Zero-downtime Secret Key rotation [#zero-downtime-secret-key-rotation]

Projects can now hold up to 10 active Secret Keys. Rotate keys without interrupting uploads: create a new key, deploy it, then revoke the old one. The CDN tries each active key during verification — so old and new keys work simultaneously during the rotation window.

```bash
aura keys create --name prod-v2 --project my-app
aura keys revoke sk_live_abc123... --project my-app
```

Rotation is CLI-driven, but the sessions those commands run under are revoked from the [dashboard's CLI sessions list](/docs/dashboard).

## Armenian (`hy`) is now a first-class locale [#armenian-hy-is-now-a-first-class-locale]

The dashboard and marketing site ship in Armenian alongside English and Russian. The Geist Sans type stack includes Onest as a fallback for Armenian glyph coverage.

## Client-side image compressor [#client-side-image-compressor]

A [browser-native tool at `/image-compressor`](/image-compressor) that compresses, optimizes, and converts between PNG, JPEG, WebP, AVIF, and HEIC — no upload, no server, no wait. HEIC/AVIF WASM decoders load lazily at runtime. Includes a side-by-side comparison slider and zoomable preview.

## Other changes [#other-changes]

* **Custom image names and paths** — upload tokens accept a `name` claim (e.g. `blog/hero`). The stored object key becomes `{projectName}/{name}.{ext}`.
* **Streamed uploads to R2** — CDN origin writes to R2 via multipart streaming, reducing memory pressure on large files.
* **GA4 consent is now geo-gated** — consent banner only shows in regions that require it.

Full changelog in the [docs](/docs/getting-started).
