# Helix releases

> Every Helix release in date order, newest first. @trayai/helix-cli and @trayai/helix-sdk are released together and share a version; install matching versions. Each release lists its changes in three tiers: headline changes that affect how you build, other changes, and maintenance.

Current version: 1.0.0 (General availability).

## 1.0.0: General availability

Page: https://helix.tray.ai/documentation/releases/100/

> The Helix CLI and SDK leave preview and reach general availability, ready for production workloads.

- Released: 18 Sept 2026 (2026-09-18)
- Packages: @trayai/helix-cli@1.0.0, @trayai/helix-sdk@1.0.0

### Headline changes

#### Changed: `@trayai/helix-cli` is now generally available

Both the CLI and SDK are now generally available. This marks the end of the preview period - you can rely on stable APIs, semantic versioning, and production-grade support going forward.

Docs: https://helix.tray.ai/documentation/getting-started/

### Other changes

#### Changed

- `@trayai/helix-sdk` is now generally available

## 0.115.0: Multi-region support

Page: https://helix.tray.ai/documentation/releases/01150/

> Deploy to EU1, AP1, and AP2 regions alongside the existing US1 region, with updated CLI commands and configuration to match.

- Released: 17 Sept 2026 (2026-09-17)
- Packages: @trayai/helix-cli@0.115.0, @trayai/helix-sdk@0.115.0

### Headline changes

#### Added: EU1, AP1, and AP2 regions

You can now deploy projects to three new regions - EU1, AP1, and AP2 - in addition to the existing US1 region. Use the `--region` flag or `helix region set <region>` to target a specific region. In `helix.config.ts`, the `env` field has been renamed to `region`, and the default value is now `"us1"` instead of `"production"`. If you previously used `helix env set`, switch to `helix region set`.

Docs: https://helix.tray.ai/documentation/reference/configuration/

### Other changes

#### Added

- `--region <region>` flag
- `helix region set <region>`

#### Changed

- Breaking: `helix env set` is renamed to `helix region set`
- `helix.config.ts`'s `env` field is renamed to `region`
- The default region's field value is `"us1"`, not `"production"`
- `helix.config.ts`'s `env` field is renamed to `region`
- The default region's field value is `"us1"`, not `"production"`

## 0.114.0: AI gateway and usage tracking

Page: https://helix.tray.ai/documentation/releases/01140/

> Call AI models from your functions with `ctx.ai`, and track spend per workspace with `helix ai usage`.

- Released: 11 Sept 2026 (2026-09-11)
- Packages: @trayai/helix-cli@0.114.0, @trayai/helix-sdk@0.114.0

### Headline changes

#### Added: AI gateway - `ctx.ai`

You can now call large-language and image-generation models directly from your Helix functions using the new `ctx.ai` namespace. Configure one or more AI providers in your project config, then call methods like `ctx.ai.generateText` or `ctx.ai.generateImage` without managing API keys per function. The gateway handles authentication, routing to the right provider, and cost tracking automatically.

Docs: https://helix.tray.ai/documentation/reference/context/

### Other changes

#### Added

- `helix ai usage`
- The top-level `ctx.ai.*` functions now reject a model instance that wasn't obtained from…
- An `aiProviders` entry's `baseUrl` must be `https:`; this is now validated when your config loads…
- `generateImage`'s `result.helix.cost` now reflects the provider's reported token usage (previously…

## 0.113.0: Dependency age checks on deploy

Page: https://helix.tray.ai/documentation/releases/01130/

> New projects and deployments now verify dependency freshness, and Node.js 24.19.0 or newer is required.

- Released: 8 Sept 2026 (2026-09-08)
- Packages: @trayai/helix-cli@0.113.0, @trayai/helix-sdk@0.113.0

### Headline changes

#### Added: New projects only install dependencies older than 7 days

When you create a new project, only dependencies published at least 7 days ago are installed. Combined with the new pre-upload check in `helix deploy`, this reduces the risk of pulling in compromised or unstable packages that were published moments ago. If a dependency is too new, the deploy will warn you before anything is uploaded.

Docs: https://helix.tray.ai/documentation/reference/cli/deploy/

### Other changes

#### Added

- `helix deploy` checks dependency ages before uploading (docs: https://helix.tray.ai/documentation/reference/cli/deploy/)

#### Changed

- Node.js 24.19.0 or newer is now required
- Node.js 24.19.0 or newer is now required (docs: https://helix.tray.ai/documentation/getting-started/environment-setup/)

## 0.112.1: Clearer logout confirmation

Page: https://helix.tray.ai/documentation/releases/01121/

> `helix logout` now tells you which account was signed out, so you can confirm the right session ended.

- Released: 7 Sept 2026 (2026-09-07)
- Packages: @trayai/helix-cli@0.112.1

### Headline changes

#### Changed: `helix logout` now names the account it signed out - for example `✓ Logged out (you@example.com)`…

When you run `helix logout`, the confirmation message now includes the email address of the account that was signed out - for example `✓ Logged out (you@example.com)`. This makes it easier to verify you ended the correct session, especially if you work with multiple accounts.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

## 0.112.0: Async function calls

Page: https://helix.tray.ai/documentation/releases/01120/

> Call other Helix functions asynchronously from within a function, and trace the chain with `ctx.parentExecutionId`.

- Released: 4 Sept 2026 (2026-09-04)
- Packages: @trayai/helix-cli@0.112.0, @trayai/helix-sdk@0.112.0

### Headline changes

#### Added: Async function calls

You can now invoke other functions in your project asynchronously, letting you split long-running work into smaller steps that execute independently. This is useful when one function needs to fan out to several others or when you want to offload a slow task without blocking the caller's response.

Docs: https://helix.tray.ai/documentation/guides/functions-and-routing/

### Other changes

#### Added

- Scaffolded AI docs now cover async function calls
- `ctx.parentExecutionId`

## 0.109.0: CLI proxy and TLS support

Page: https://helix.tray.ai/documentation/releases/01090/

> The CLI now works correctly on networks that route traffic through an HTTP proxy or perform TLS inspection.

- Released: 21 Aug 2026 (2026-08-21)
- Packages: @trayai/helix-cli@0.109.0

### Headline changes

#### Fixed: The CLI now works on corporate networks that send traffic through an HTTP proxy or inspect HTTPS

If your network routes outbound traffic through an HTTP proxy or uses TLS inspection (common in corporate environments), the CLI previously failed to connect. It now respects standard proxy environment variables (`HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY`) and accepts custom CA certificates, so you can deploy and develop without connectivity errors behind a corporate firewall.

Docs: https://helix.tray.ai/documentation/reference/cli/

## 0.108.0: Windows init fix

Page: https://helix.tray.ai/documentation/releases/01080/

> You can now run `helix init` on Windows without administrator rights or Developer Mode enabled.

- Released: 21 Aug 2026 (2026-08-21)
- Packages: @trayai/helix-cli@0.108.0

### Headline changes

#### Fixed: `helix init` no longer requires administrator rights (or enabling Developer Mode) on Windows to…

`helix init` on Windows previously required administrator privileges or Developer Mode to be turned on. This is fixed - you can now scaffold a new project with standard user permissions, removing a common friction point when getting started on Windows.

Docs: https://helix.tray.ai/documentation/getting-started/quickstart/

## 0.107.0: KV store TTL option refined

Page: https://helix.tray.ai/documentation/releases/01070/

> The `ttl` option on `ctx.kv().setItem` now supports three distinct states, giving you finer control over expiration behavior.

- Released: 20 Aug 2026 (2026-08-20)
- Packages: @trayai/helix-sdk@0.107.0

### Headline changes

#### Changed: `ctx.kv().setItem`'s `ttl` option is now three-state

The `ttl` option on `ctx.kv().setItem` now accepts three states instead of two. You can set a positive duration to expire the key after that time, pass `null` to explicitly remove any previously set TTL (making the key persistent), or omit the option entirely to leave the existing TTL unchanged. This lets you update a value without accidentally clearing or overwriting its expiration.

Docs: https://helix.tray.ai/documentation/reference/context/kv/

## 0.106.0: CLI install warning resolved

Page: https://helix.tray.ai/documentation/releases/01060/

> Installing the CLI no longer shows a dependency deprecation warning, giving you a cleaner setup experience.

- Released: 20 Aug 2026 (2026-08-20)
- Packages: @trayai/helix-cli@0.106.0

### Headline changes

#### Fixed: Installing the CLI no longer prints an npm deprecation warning for `glob@10.5.0`

Previously, installing the CLI could print an npm deprecation warning related to an internal dependency. This has been fixed - you now get a clean install with no spurious warnings.

Docs: https://helix.tray.ai/documentation/reference/cli/

## 0.105.0: Stricter auth checks in CLI

Page: https://helix.tray.ai/documentation/releases/01050/

> Commands that require authentication now verify your session more thoroughly before proceeding.

- Released: 19 Aug 2026 (2026-08-19)
- Packages: @trayai/helix-cli@0.105.0

### Headline changes

#### Changed: `helix login` - and the commands it gates (`helix init`, `helix dev`, `helix deploy`) - now check…

`helix login` - and the commands it gates (`helix init`, `helix dev`, `helix deploy`) - now perform additional session validation before allowing you to proceed. If your credentials are stale or incomplete, you will be prompted to re-authenticate sooner rather than encountering confusing errors later in the workflow.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

## 0.104.0: Login required for core commands

Page: https://helix.tray.ai/documentation/releases/01040/

> Running `helix init`, `helix dev`, and `helix deploy` now requires authentication, automatically prompting login when needed.

- Released: 18 Aug 2026 (2026-08-18)
- Packages: @trayai/helix-cli@0.104.0

### Headline changes

#### Changed: `helix init`, `helix dev`, and `helix deploy` now require you to be logged in - they start the…

You no longer need to run `helix login` separately before starting work. If you run `helix init`, `helix dev`, or `helix deploy` without an active session, the CLI automatically starts the login flow for you. This means fewer steps to get going, but also means these commands will not run in unauthenticated contexts - keep this in mind for CI scripts that previously skipped login.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

### Other changes

#### Added

- The CLI now collects usage analytics for the `init`, `login`, `dev`, and `deploy` commands to help…

## 0.103.0: Signed URLs with s3Sign

Page: https://helix.tray.ai/documentation/releases/01030/

> `s3Sign()` on an authed AWS credential returns a signed, time-limited object URL, so browsers and services upload or download directly. A matching MCP tool mints one from chat.

- Released: 18 Aug 2026 (2026-08-18)
- Packages: @trayai/helix-cli@0.103.0, @trayai/helix-sdk@0.103.0

### Headline changes

#### Added: Signed object URLs with `s3Sign`

`ctx.http.authed(alias).s3Sign(url, options?)` returns a presigned S3 URL for an AWS S3 credential: a time-limited URL that grants access to one object with no credentials attached, so uploads and downloads go directly to S3 rather than through your function. Sign `GET` for downloads (the default) or `PUT` for uploads, with a configurable `expiresIn` (default 15 minutes, maximum one week). The result is `{ url, method, expiresAt }`, and the URL only works with the method it was signed for.

Docs: https://helix.tray.ai/documentation/reference/context/http/

### Other changes

#### Added

- `tray_s3_sign` MCP tool
  The CLI's MCP server gains `tray_s3_sign`, which mints a presigned S3 URL from chat using your local Helix login, with no dev server running. Pass a credential alias, the object URL, and optionally a method and `expiresIn`.

## Project URLs in the dashboard

Page: https://helix.tray.ai/documentation/releases/project-urls/

> Give a deployed project a readable address from the dashboard. An org admin sets one namespace, each project takes an alias, and the app answers at a name instead of its project ID.

- Released: 17 Aug 2026 (2026-08-17)
- Product area: Dashboard

### Headline changes

#### Added: Set a readable address for a project

An org admin sets one namespace for the organization, and each project takes an alias from its Settings tab. The app then answers at both its project ID address and the readable alias address, and both stay behind login. The project ID address never changes, so anything automated keeps pointing there.

Docs: https://helix.tray.ai/documentation/guides/project-urls/

### Other changes

#### Changed

- Change or release an alias without redeploying (docs: https://helix.tray.ai/documentation/guides/project-urls/)
  The namespace and the alias are dashboard settings rather than project code, so changing either takes effect without a new deployment.

## 0.93.0: Scheduled functions

Page: https://helix.tray.ai/documentation/releases/0930/

> Functions under `functions/_scheduled/` can run on a cron schedule instead of an HTTP route. Schedules fire on the deployed platform, not in local dev.

- Released: 10 Aug 2026 (2026-08-10)
- Packages: @trayai/helix-cli@0.93.0, @trayai/helix-sdk@0.93.0

### Headline changes

#### Added: Run a function on a cron schedule

A file under `functions/_scheduled/` that default-exports `defineSchedule({ cron, timezone?, handler })` runs on a schedule rather than on an HTTP request. `cron` is a five-field standard expression and `timezone` is an IANA name, defaulting to UTC. HTTP was the only trigger until now, so anything periodic had to be driven from outside Helix.

Docs: https://helix.tray.ai/documentation/guides/scheduled-functions/

#### Added: Schedule handlers get a ScheduleContext

The handler receives the core `ctx` surface plus `ctx.trigger`, carrying `scheduledAt`, `firedAt`, and `isManual`. The request-derived fields are absent, because there is no request. `ScheduleContext` and `ScheduleTrigger` are both exported.

Docs: https://helix.tray.ai/documentation/guides/scheduled-functions/

### Other changes

#### Changed

- `helix deploy` registers schedules instead of refusing the deploy (docs: https://helix.tray.ai/documentation/reference/cli/deploy/)
  Projects containing `functions/_scheduled/` were previously blocked at deploy time.
- `helix dev` no longer warns about the scheduled directory (docs: https://helix.tray.ai/documentation/reference/cli/dev/)
  Schedules fire on the deployed platform, so there is nothing to run locally and nothing to warn about.
- Scaffolded projects document the `defineSchedule` pattern (docs: https://helix.tray.ai/documentation/getting-started/building-with-claude/)
  The AI context layer that `helix init` writes (`CLAUDE.md`, the skills, and the Claude Code hooks) now covers schedules, so an assistant working in a fresh project generates the right shape.

## 0.92.0: Binary request and response bodies

Page: https://helix.tray.ai/documentation/releases/0920/

> Authenticated calls carry bodies byte for byte, so binary uploads and downloads work end to end. Redirects come back to you instead of being followed.

- Released: 7 Aug 2026 (2026-08-07)
- Packages: @trayai/helix-cli@0.92.0, @trayai/helix-sdk@0.92.0

### Headline changes

#### Changed: `ctx.http.authed()` sends and returns bodies verbatim

Strings, `Uint8Array`, `ArrayBuffer`, `Blob`, `FormData`, and streams are all accepted and sent unchanged, so a string body is no longer rejected and never arrives JSON-quoted. Plain objects and arrays are still serialized as JSON. Binary uploads to a third-party API work end to end. Request bodies cap at 16 MB; use the target API's multipart or chunked flow above that.

Docs: https://helix.tray.ai/documentation/reference/context/http/

#### Changed: Response bodies are decoded by content type

JSON is parsed as before, textual types come back as a string, and anything else is returned as raw bytes, so a binary download arrives unmangled instead of corrupted by a text decode.

Docs: https://helix.tray.ai/documentation/reference/context/http/

### Other changes

#### Changed

- Redirect responses are returned to your code with their `location` header (docs: https://helix.tray.ai/documentation/reference/context/http/)
  3xx responses are no longer followed automatically, so you decide whether to follow one.
- `SdkError` from the authenticated HTTP path carries a `code` on `error.detail` (docs: https://helix.tray.ai/documentation/reference/context/http/)
- The MCP credential test tool handles binary data (docs: https://helix.tray.ai/documentation/getting-started/building-with-claude/)
  `tray_call_credential_broker` takes a `bodyBase64` argument for raw bytes, mutually exclusive with `body`, and returns binary responses inline up to 64 KiB. It accepts a raw string body, sends it verbatim, returns the upstream status and headers unchanged including 4xx and 5xx, and gives rejected calls a machine-readable `code`.

#### Removed

- `SdkError.unsupportedBodyType` is no longer thrown (docs: https://helix.tray.ai/documentation/reference/context/http/)
  The body types that used to raise it are now sent verbatim, so there is nothing left to reject.

## 0.91.0: Connect a new authentication

Page: https://helix.tray.ai/documentation/releases/0910/

> `helix auth connect --new` creates the credential in the browser and wires it into your project in one command, instead of leaving you to do both halves.

- Released: 7 Aug 2026 (2026-08-07)
- Packages: @trayai/helix-cli@0.91.0

### Headline changes

#### Added: `helix auth connect --new` creates and wires a credential in one command

It opens the Helix dashboard's connect page, waits until you have finished there, then discovers the new credential and connects it. Until now creating an authentication and wiring it into a project were two separate jobs with a context switch between them. `--no-open` prints the link instead of opening a browser, and with no terminal it prints the link and exits.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

### Other changes

#### Changed

- The create-authentication link opens the Helix dashboard, not the Tray app (docs: https://helix.tray.ai/documentation/guides/connected-services/)
  `tray_create_authentication_link` returns the new link to AI assistants.
- `helix auth connect` offers to pick a workspace instead of failing (docs: https://helix.tray.ai/documentation/reference/cli/project/)
  In a terminal, a `helix.config.ts` with no `workspaceId` now prompts you to choose one. It previously failed with a pointer to `helix workspace select`.

## 0.90.0: getContext returns PlatformContext

Page: https://helix.tray.ai/documentation/releases/0900/

> `getContext()` now returns the canonical execution context, so request-specific fields are optional and need a presence check. Handler parameters are unaffected.

- Released: 6 Aug 2026 (2026-08-06)
- Packages: @trayai/helix-cli@0.90.0, @trayai/helix-sdk@0.90.0

### Headline changes

#### Changed: `getContext()` returns `PlatformContext` instead of `TrayContext`

This is the change most likely to need an edit in your code. The members present in every execution are unchanged: `http`, `db()`, `kv()`, `files()`, `log`, `config`, `state`, `executionId`, `deploymentId`, and `traceId`. The request-specific ones are now optional, so check the field you read, for example `const ctx = getContext(); if (ctx.method !== undefined) { ctx.method; }`. That covers `input`, `method`, `path`, `headers`, `request`, `status()`, `error()`, `userId`, and `identity`. Handler parameters are untouched: a `defineFunction` handler still receives the exact `TrayContext`. Scheduled functions, added in 0.93.0, are the first trigger to depend on this: they run without a request, so the request-derived fields are absent.

Docs: https://helix.tray.ai/documentation/reference/functions/

### Other changes

#### Changed

- `runWithContext` mocks mirror production for optional fields (docs: https://helix.tray.ai/documentation/reference/context/index/)
  Reading an unset optional `PlatformContext` field in a mock returns `undefined`, so presence-guard code is testable. Unset always-present fields still throw the descriptive error.
- Clearer error when `getContext()` is called outside an execution (docs: https://helix.tray.ai/documentation/reference/context/index/)

## 0.89.0: The schedule retry flag is gone

Page: https://helix.tray.ai/documentation/releases/0890/

> `ctx.trigger.isRetry` has been removed rather than kept as a value the platform cannot populate honestly. Schedule handlers must be idempotent.

- Released: 5 Aug 2026 (2026-08-05)
- Packages: @trayai/helix-sdk@0.89.0

### Headline changes

#### Removed: `ctx.trigger.isRetry` for scheduled functions

The flag was reserved and always `false`. Nothing in the payload marks an execution as a retry, so rather than promise a boolean that cannot be populated honestly, the contract now states retry-once semantics and requires idempotent handlers. The field is still accepted and ignored, so anything built against an older version keeps working.

Docs: https://helix.tray.ai/documentation/guides/scheduled-functions/

## 0.88.0: Auth alias writes are atomic

Page: https://helix.tray.ai/documentation/releases/0880/

> Two auth aliases written at once could silently lose one of them. Writes are now serialized, and an alias may match a key used elsewhere in the config.

- Released: 5 Aug 2026 (2026-08-05)
- Packages: @trayai/helix-cli@0.88.0

### Headline changes

#### Fixed: Concurrent auth alias writes no longer drop an alias

Two writes racing could silently lose one of them, leaving a project missing a credential it appeared to have connected. Writes are now serialized and atomic.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

### Other changes

#### Fixed

- `helix auth add` accepts an alias that matches a key elsewhere in `helix.config.ts` (docs: https://helix.tray.ai/documentation/reference/cli/auth/)
  An alias colliding with a key under `config:` was rejected, even though the two live in different parts of the file.

## 0.86.0: The platform enforces auth limits

Page: https://helix.tray.ai/documentation/releases/0860/

> `helix deploy` no longer refuses a project with more than 100 authentications before uploading. The platform decides, and says so if it rejects one.

- Released: 4 Aug 2026 (2026-08-04)
- Packages: @trayai/helix-cli@0.86.0

### Headline changes

#### Changed: `helix deploy` no longer enforces an authentication count limit locally

Declaring more than 100 authentications in `helix.config.ts` previously failed in the CLI before anything was uploaded, which meant a local rule could disagree with what the platform would actually accept. The platform is now the only enforcer and returns a rejection if a deployment's authentication count is not accepted.

Docs: https://helix.tray.ai/documentation/reference/cli/deploy/

## 0.85.0: Browser sign-in by default

Page: https://helix.tray.ai/documentation/releases/0850/

> `helix login` signs you in through your browser unless you ask for something else. The Chrome-session and pasted-token flow is still there behind a flag.

- Released: 3 Aug 2026 (2026-08-03)
- Packages: @trayai/helix-cli@0.85.0

### Headline changes

#### Changed: `helix login` signs you in through your browser by default

Browser sign-in arrived in 0.80.0 behind `--method oauth`; it is now what you get by running `helix login` with no flags. Nothing is copied by hand, so a token never passes through your clipboard or your shell history. The previous flow remains available as `helix login --method chrome`.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

## 0.83.0: Dashboard moves to app.helix.tray.ai

Page: https://helix.tray.ai/documentation/releases/0830/

> The dashboard link printed after `helix deploy` now points at app.helix.tray.ai. No public API changed in either package.

- Released: 3 Aug 2026 (2026-08-03)
- Packages: @trayai/helix-cli@0.83.0, @trayai/helix-sdk@0.83.0

### Headline changes

#### Changed: The post-deploy dashboard link points at `app.helix.tray.ai`

If you have the old host bookmarked or written into a runbook, this is the release that moved it. The SDK change is an internal configuration update behind the same link; its public API is unchanged.

Docs: https://helix.tray.ai/documentation/governance/dashboard/

## 0.82.0: Logout revokes browser tokens

Page: https://helix.tray.ai/documentation/releases/0820/

> `helix logout` now revokes a browser sign-in server side, not just on your machine. Chrome-session tokens are still removed locally only, as before.

- Released: 31 Jul 2026 (2026-07-31)
- Packages: @trayai/helix-cli@0.82.0

### Headline changes

#### Changed: `helix logout` revokes tokens obtained through browser sign-in

A token from `helix login --method oauth` used to be deleted from your machine while staying valid server side, so logging out did not end the session. It is now revoked as well. Tokens read from your Chrome session are unaffected server side and are removed locally, as before.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

## 0.80.0: Browser sign-in arrives

Page: https://helix.tray.ai/documentation/releases/0800/

> `helix login --method oauth` signs you in through your browser using OAuth 2.0 with PKCE. The default login method is unchanged in this release.

- Released: 29 Jul 2026 (2026-07-29)
- Packages: @trayai/helix-cli@0.80.0, @trayai/helix-sdk@0.80.0

### Headline changes

#### Added: `helix login --method oauth` signs you in through your browser

OAuth 2.0 with PKCE, so no token is pasted by hand. The default is unchanged here and still uses your Chrome session or a pasted token; browser sign-in became the default in 0.85.0. Browser sign-ins currently expire after about an hour.

Docs: https://helix.tray.ai/documentation/reference/cli/auth/

### Maintenance

- SDK configuration additions supporting the new sign-in, with no public API change

## 0.72.0: Full payloads on traces

Page: https://helix.tray.ai/documentation/releases/0720/

> Spans now carry the whole operation payload rather than summary fields, so a trace shows what was actually sent and returned. Sensitive headers are redacted.

- Released: 23 Jul 2026 (2026-07-23)
- Packages: @trayai/helix-sdk@0.72.0

### Headline changes

#### Added: Spans carry full request and response payloads

A function span now records its request headers and body, its response, and its input and output. Outbound HTTP spans carry their request and response, and database spans carry the query result. Spans previously held only summary fields such as method, route, and status, which told you that something failed without showing you what went into it. Payloads are size-capped and sensitive request headers are redacted.

Docs: https://helix.tray.ai/documentation/guides/observability/

## 0.70.0: One frontend scaffold

Page: https://helix.tray.ai/documentation/releases/0700/

> `helix init --with-app` now scaffolds a bare Vite and React frontend with plain CSS. The `--raw-ui` and `--no-ui` flags are gone.

- Released: 22 Jul 2026 (2026-07-22)
- Packages: @trayai/helix-cli@0.70.0, @trayai/helix-sdk@0.70.0

### Headline changes

#### Removed: `helix init`'s `--raw-ui` and `--no-ui` flags

Scripts passing either flag need updating. `--with-app` now scaffolds a bare Vite and React frontend with plain CSS, and no UI framework is bundled either way, so the choice the two flags existed to make no longer exists.

Docs: https://helix.tray.ai/documentation/guides/frontend/

### Other changes

#### Added

- `helix init` scaffolds a `.nvmrc` pinning Node 24.18.0 (docs: https://helix.tray.ai/documentation/getting-started/environment-setup/)

## 0.69.2: Favicon in scaffolded apps

Page: https://helix.tray.ai/documentation/releases/0692/

> `helix init --with-app` scaffolds a default favicon, so a generated project no longer logs a repeated 404 for the icon on every page load.

- Released: 22 Jul 2026 (2026-07-22)
- Packages: @trayai/helix-cli@0.69.2

### Headline changes

#### Fixed: `helix init --with-app` scaffolds a default favicon

Generated projects had no favicon, so browsers logged a repeated 404 for `GET /favicon.ico` and the first thing you saw in a new project was an error that was not yours. The scaffold now writes `app/public/favicon.svg` and links it from `app/index.html`.

Docs: https://helix.tray.ai/documentation/guides/frontend/

## 0.63.0: First early-access release

Page: https://helix.tray.ai/documentation/releases/0630/

> The first early-access release of the Helix CLI and SDK: scaffold a project, run it locally, deploy it with one command, and build with an AI assistant.

- Released: 17 Jul 2026 (2026-07-17)
- Packages: @trayai/helix-cli@0.63.0, @trayai/helix-sdk@0.63.0

### Headline changes

#### Added: Scaffold, run, and deploy a project from the CLI

`helix init` writes a complete project: `helix.config.ts`, `functions/` with a sample route, `package.json` and `tsconfig.json`, and MCP registration for Claude Code and Cursor. `helix dev` runs it locally with file-system routing (`functions/{path}.{method}.ts`), hot reload, live config reload, and an optional same-port frontend. `helix deploy` uploads the source, provisions the project on first run, records the new `projectId`, and returns a deployment ID you can inspect with `helix deployment get <id>`.

Docs: https://helix.tray.ai/documentation/getting-started/quickstart/

#### Added: An AI context layer in every scaffolded project

`helix init` writes `CLAUDE.md`, five domain skills covering auth, context, debug, frontend, and functions, and Claude Code session hooks, so an assistant generates correct Helix code without being taught the platform first. `helix mcp` runs an MCP server that lets an assistant inspect the project, create functions, discover and wire workspace authentications, edit config, test endpoints, and check deployment status.

Docs: https://helix.tray.ai/documentation/getting-started/building-with-claude/

#### Added: Credentials by alias, never in your code

`ctx.http.authed(alias)` calls a third-party API by credential alias and the platform supplies the secret, so the same code runs locally and when deployed and no key is ever committed. Upstream non-2xx comes back as a value rather than a thrown error. Plain `ctx.http` handles unauthenticated calls.

Docs: https://helix.tray.ai/documentation/guides/connected-services/

### Other changes

#### Added

- `defineFunction`, the core handler primitive (docs: https://helix.tray.ai/documentation/reference/functions/)
  Merges and validates input from query, body, and path params, validates output, and maps return values to HTTP responses: `null` or `undefined` to 204, a `Response` passes through, anything else is validated and sent as JSON. Thrown errors map to statuses.
- `getContext()` reaches the active context without prop drilling (docs: https://helix.tray.ai/documentation/reference/context/index/)
- Key-value store: `getItem`, `setItem`, `removeItem`, `hasItem` (docs: https://helix.tray.ai/documentation/reference/context/kv/)
- Structured logging with `ctx.log.info`, `warn`, `error`, and `debug` (docs: https://helix.tray.ai/documentation/reference/context/log/)
  `helix dev` prints human-readable logs locally by default.
- `ctx.identity` exposes the requesting user id where available (docs: https://helix.tray.ai/documentation/reference/context/identity/)
- Login, logout, and `helix whoami` (docs: https://helix.tray.ai/documentation/reference/cli/auth/)
  Sign in by reading your Chrome session or pasting a token. It is validated before it is saved and never printed.
- Auth aliases: `helix auth connect`, `auth add`, and `auth list` (docs: https://helix.tray.ai/documentation/reference/cli/auth/)
  `helix auth connect [service]` discovers workspace authentications interactively.
- Workspace and project config from the CLI (docs: https://helix.tray.ai/documentation/reference/configuration/)
  `helix workspace set`, `helix workspace select`, and `helix project set` write the values into `helix.config.ts`.
- Typed config loading with `defineConfig` and `loadConfig()` (docs: https://helix.tray.ai/documentation/reference/configuration/)
  `loadConfig()` returns a typed discriminated union covering the provisioned and unprovisioned cases, with `requireWorkspaceId()` and a coded `WorkspaceIdRequiredError`, plus `createConfigService()` with hot reload for long-lived processes.
- A testing entry point at `@trayai/helix-sdk/testing` (docs: https://helix.tray.ai/documentation/reference/functions/)
  `runWithContext` unit-tests handlers and shared helpers with a mock context that throws on unset fields.

### Maintenance

- Update notices when a newer CLI is published

---

Canonical: https://helix.tray.ai/documentation/releases/
This file: https://helix.tray.ai/documentation/releases.md
Each release is also available on its own at /documentation/releases/<version>.md
