Helena User Guide¶
Helena is a free, open-source, no-cloud API client. This guide covers the day-to-day workflow. For building from source, see the README; for the design, see AGENTS.md.
Contents¶
- Getting started
- Collections, folders, requests
- Sending a request
- Real-time (SSE & WebSocket)
- Query, headers, body
- Authentication
- Environments & variables
- Request chaining
- Scripting & assertions
- Cookies
- Request history
- Import & export
- Headless runs
- Settings
- Privacy & secrets
- Diagnostics
- Keyboard shortcuts
Getting started¶
On first launch you'll see an empty-state panel. Three ways to begin:
- Open collection… — point Helena at an existing OpenCollection folder.
- Import… — build a collection from an OpenAPI/Swagger/WSDL/Postman spec (file or URL).
- Load sample — materialize the bundled
httpbinsample and explore it without any setup.
The same actions live on the sidebar toolbar. In-app help is under the ? button (Getting started, shortcuts, History, this guide, About).
Collections, folders, requests¶
The sidebar is a tree of collections → folders → requests. Toolbar actions: new collection, open, import; the per-node actions (rename, duplicate, delete, add) appear when a node is selected. Drag a request or folder to reorder it, or drag a collection to reorder collections. Everything is stored as plain YAML on disk in the OpenCollection layout — Helena only records the folder paths in its config; the collection contents live in their own directory.
Sending a request¶
Pick a request (or just type a method + URL), then Send (Mod+Enter). The response pane shows the body (auto-detected JSON/XML/HTML, with fold + highlight + search), headers, and a status line with size and timing. The viewer's soft-wrap toggle is remembered: turn it on and long lines keep wrapping in every later response, and in the next session. A long-running send can be aborted with the same button. Failures surface in a dismissible banner above the response, so they aren't lost when the status line updates.
Real-time (SSE & WebSocket)¶
- WebSocket — enter a
ws://orwss://URL and press Send: instead of an HTTP request, Helena opens a live session with a two-way transcript — type a message and press Send to write, received messages append as they arrive. Pings are answered automatically and fragmented messages are reassembled. - SSE — on a
text/event-streamendpoint, press the dedicated Stream (SSE) toolbar button (not Send): events append to the response body live, and the button doubles as Stop while the stream is open.
See the Real-time guide for details.
Query, path, headers, body¶
- Query and the URL field are two views of one thing — edit either and the other follows. Disabled query rows (unchecked) are kept even though the URL can't express them.
- Path — fills the single-brace
{name}placeholders in the URL's path (e.g.{{base_url}}/users/{id}). The tab lists one row per placeholder, derived live from the URL, so you set a value instead of hand-editing the raw URL; the resolved preview under the URL shows the real target and flags any placeholder still unfilled. (This is distinct from{{name}}variables — double braces resolve from environments/collections, single braces are per-request path values.) - Headers — enable/disable per row.
- Body — None / raw (JSON, XML, text) with validate + format, GraphQL
(query + variables, sent as a JSON envelope), a structured form editor for
form-urlencoded/multipart/form-data, or the raw bytes of a file on disk.
Authentication¶
Per request (or inherited from the folder/collection): None, Basic, Digest,
NTLM, Bearer, API key (header or query), OAuth 1.0a, OAuth 2.0
(client-credentials and authorization-code, with PKCE), WS-Security (WSSE),
or AWS Signature v4. Every scheme's secret fields — passwords, tokens,
client/consumer secrets, the AWS secret key — are masked in the editor.
Inherit walks up the folder → collection chain. See the
Authentication guide for per-scheme details.
Environments & variables¶
{{name}} templates in URLs, headers, params, body, and auth resolve against
the active environment. Use the toolbar icon buttons next to the
environment dropdown: the gears button manages environments (create /
rename / delete / switch) and the table-list button edits the active
environment's variables — an editable key/value list (one row per variable;
the + button appends a row, the row checkbox enables/disables a variable,
the trash icon removes it). A Secret variable shows a masked, read-only
value until you tick Reveal secret values. Variables compose — a variable's
value may reference another {{var}}. A {{?Name}} prompt variable isn't
resolved from any scope: Helena asks for its value in a dialog at Send time.
Request chaining¶
A request can declare chain steps that run before it, exposing each
predecessor's parsed response as {{alias.body.field}} (and to scripts as
chain.<alias>). Helena resolves the graph recursively with per-request alias
scope and cycle detection. See the README's "Request chaining" section for
worked examples.
Scripting & assertions¶
Each request can carry a pre-request script (mutates method / URL / headers
/ params / body before the request is built) and a post-response script
(reads the parsed response, writes values into the environment overlay via
helena.env.set, and declares checks with test()/expect()). Scripts run in
a sandboxed JS runtime with a short timeout.
Prefer no code? The Assertions tab holds (source, operator, expected) rows
— e.g. res.status equals 200, or res.json.user.id exists — evaluated
after Send and reported in the Scripts console alongside the test() results.
See the Scripting & assertions guide.
Cookies¶
Helena keeps a cookie jar for the running session. When a response sends
Set-Cookie, the cookie is stored and automatically replayed on later matching
requests — so a login request followed by a call to a protected endpoint just
works, including within a chain run and across separate sends while the app is
open. Cookies match by domain, path, and the Secure flag, exactly as a browser
would.
Open the jar with the cookie button in the top bar to view, add, edit, or
delete cookies, or clear them all. A cookie you add by hand defaults to its exact
host; tick Send to subdomains to widen it to sub-domains. Cookies set
explicitly via a Cookie request header are still sent — jar cookies are added
alongside them.
The jar is in-memory only: it is never written to disk (so session tokens can't leak into a file) and is emptied when you quit Helena.
Request history¶
? → History lists past sends newest-first. Select an entry to
Restore it (reopens the request in a tab), Resend it, or Clear the
whole list. Snapshots are secret-scrubbed before they are recorded, so
history.yml never stores a credential.
Import & export¶
- Import an OpenAPI 3 (including 3.2's
queryoperations, which become first-classQUERYrequests, and customadditionalOperationsmethods, which import and send but are not offered in the method dropdown) / Swagger 2 / WSDL / Postman (v2.x) document (file or URL) into a new collection, or paste a cURL command to build a single request. - Export the current request as a ready-to-run cURL or wget command, or a JavaScript fetch, Python requests, or Go net/http snippet (read-only, copyable).
Headless runs¶
helena run <collection-dir> [--env NAME] [--format text|json|junit]
[--folder PATH] executes every request in a collection (or a single folder)
without opening the UI — chains, scripts, and assertions included — and exits
non-zero when any request errors or any check fails, so it slots straight into
CI. Flags may come before or after the directory. {{?Name}} prompt variables
can't be asked headlessly, so a request that uses one fails the run.
Settings¶
Theme (System/Light/Dark), allow-invalid-TLS (with a risk caption — it affects all requests and imports), CORS advisory, follow-redirects, request timeout, the max response size buffered into memory, and a Global variables editor (app-wide, lowest-precedence variable scope). Settings persist in your OS config directory and carry a schema version so future upgrades can migrate cleanly.
Privacy & secrets¶
Helena makes no background network requests and ships no telemetry. The only outbound traffic is what you trigger (sending a request, fetching an OAuth2 token, importing from a URL, or clicking Check for updates in the status bar). Collections are stored as plain YAML on your local disk; credential fields (auth secrets, Secret-flagged variables) are split out on save into a per-collection secrets store under your OS config directory — never into the collection folder, so a git-tracked collection can't leak them — and merged back on load. The store itself is plaintext YAML; treat it like any secrets file. Secret values are masked in the UI and redacted from logs and error messages.
Diagnostics¶
Run helena --version to print the build (tag + commit for releases). For bug
reports, run with helena --verbose and/or --log-file PATH (or set
HELENA_LOG) to capture a log — credentials are redacted, so the log is safe
to attach.
Keyboard shortcuts¶
Press F1 (or ? → Keyboard shortcuts) for the full list. Common ones: Mod+Enter send · Mod+S save · Mod+Z undo last delete · Mod+E environments · Mod+, settings.
While a text field (URL, params, headers, auth) or the body/response editor has focus, the standard editing shortcuts apply: Mod+Z undo · Mod+Y (or Mod+Shift+Z) redo · plus cut/copy/paste/select-all.