What Helena does

Features

A full-featured API client in one small native binary - without the browser engine or the lock-in.

The Helena app showing a request and its JSON response

Request builder

Method - including QUERY, the safe, idempotent body-carrying method standardized by RFC 10008 - plus URL, query params, headers, and a body that can be JSON, XML, text, GraphQL, form-urlencoded, multipart, or a raw file. A Path tab fills the {name} placeholders in your URL’s path (e.g. /bag/{bagId}) - no hand-editing the raw URL - and the resolved preview shows the real target. JSON and XML get Validate and Format buttons, and Send doubles as Abort while a request is in flight. The response viewer shows raw, pretty JSON, XML, and HTML (auto-detected), plus headers. It is virtualized, so a multi-megabyte body stays responsive: collapsible nodes, syntax highlighting, find-in-response, and a soft-wrap toggle that remembers whether you left it on, across responses and across restarts. There is a status line like 200 OK · 1.2 KB · 87 ms, a Save response to file button that writes the full untruncated bytes, and a CORS advisory when a browser would have blocked the response - checked when your request carries an Origin header (Helena, being native, sends the request anyway).

Variables & environments

{{variable}} resolution everywhere - URL, query, headers, and body - with a live preview of the resolved URL. Variables resolve through a layered scope chain so the most specific value wins:

global → collection .env → collection → environment → folder → request → script overlay

Plus dynamic values like {{$guid}}, {{$timestamp}}, and ask-at-send {{?Name}} prompt variables.

Authentication

Nine schemes, all with {{var}} substitution and credentials kept out of the committed YAML:

Basic · Bearer · API Key · OAuth 2.0 (client-credentials and authorization-code + PKCE, with token caching) · OAuth 1.0a (HMAC-SHA1) · WSSE · AWS Signature v4 · HTTP Digest (challenge/response) · NTLM (the multi-round Windows handshake).

Full authentication guide →

Scripting, tests & assertions

Pre/post JavaScript hooks (via the pure-Go goja engine) with a curated helena.* API - environment access, interpolate, sendRequest, cookie reads, hashing, base64, uuid, date/time helpers, sleep, and headless runner control. Verify responses with a scripted test()/expect() framework or the no-code Assertions tab.

Request chaining

A request can declare other requests to run first; their results are bound as chain.<alias> for the leaf’s scripts and templates - so you can log in, then use the token, in a single Send.

Real-time - SSE & WebSocket

Stream Server-Sent Events straight into the response view, or open a WebSocket session (ws:// / wss://) with a live two-way transcript. Both protocols are hand-rolled on the Go standard library - no third-party network dependency.

Collections & the headless runner

Organize requests into workspaces, collections, and folders. Run a whole collection - or just one folder (select it and press Run, or helena run --folder <path>) - from the GUI, or headlessly from the CLI with helena run for CI: same resolution, scripts, and assertions as an interactive Send. It exits non-zero on any failure and can emit a --format json or --format junit report for CI dashboards.

Import & export

Import OpenAPI 3 / Swagger 2 / WSDL / Postman from a file or URL - OpenAPI 3.2 query operations arrive as QUERY requests, and its custom additionalOperations methods import too rather than being dropped. Export any request to cURL, wget, JavaScript fetch, Python requests, or Go net/http, or paste a cURL command to build a request.

Storage & privacy

Collections - folders, requests, and their environments - are plain Open Collection YAML on disk; diff and merge them like source code. Auth secrets and Secret-flagged variables are externalized to a store under your OS config dir (outside the repo), so a committed collection carries no cleartext credential. The session env overlay never touches disk. Structural changes save as you make them; request edits save on Mod+S, and quitting with edits still pending asks before discarding them.

Native niceties

Light / dark / system theme, a configurable request timeout and max response size, invalid-SSL and follow-redirects toggles, a cookie jar with a viewer, request history (Help → History - restore or resend a recent send; secret-scrubbed so no credential is written to disk), drag-and-drop to reorder collections, folders, and requests in the sidebar, a status bar showing your current version with an opt-in “Check for updates” (a one-shot GitHub check only when you click it - never automatic, in keeping with the no-phone-home guarantee), and keyboard shortcuts (Mod+Enter to send, Mod+S to save, …).