docs Getting started
UI tour
The panes, key bindings, completions, help and response views of the TUI.
Layout
- Sidebar: unified navigator tree for files, requests, and workflows with a filter bar and tag/method chips.
→/Spaceexpand files,g+k/g+jexpand or collapse the current branch, andg+Shift+K/g+Shift+Jexpand or collapse all. A detail well beneath the list shows the selected request/workflow summary. When focused,g+hshrinks andg+lexpands the sidebar. - Editor: middle pane with modal editing (view mode by default,
ito insert,Escto return to view). Inline syntax highlighting marks metadata, headers, and bodies. - Response panes: right-hand side displays the most recent response, with optional splits for side-by-side comparisons.
- Header bar: shows workspace, active environment, current request, test summaries, the latest transport status and RTT, and the Help shortcut.
- Command bar & status: contextual hints, progress, and notifications. Long messages are shortened to preserve the file, focus, and mode sections. Errors and long warnings open a popup with the complete message; press
EscorEnterto dismiss it, orj/kto scroll. Pressg .to inspect current document warnings, or to reopen the current status message when there are none. Run summaries and confirmation prompts remain in the bar because their details or next action are available elsewhere.
Core shortcuts
| Action | Shortcut |
|---|---|
| Send active request | Ctrl+Enter / Cmd+Enter / Alt+Enter / Ctrl+J / Ctrl+M |
| Toggle help overlay | ? |
| Show diagnostics on the current line, or contextual help | K (editor normal mode) |
| Next / previous editor diagnostic | ] d / [ d (editor normal mode) |
| Toggle editor insert mode | i / Esc |
| Cycle focus (navigator -> editor -> response) | Tab / Shift+Tab |
| Focus navigator / editor / response panes | g+r / g+i / g+p |
| Open timeline tab | Ctrl+Alt+L (or g+t) |
| WebSocket commands (Stream tab) | g+w, then i/p/c/l |
| Adjust sidebar or side-by-side editor/response width | g+h / g+l (contextual) |
| Adjust stacked editor/response height, or collapse / expand current navigator branch | g+j / g+k (contextual) |
| Collapse all / expand all in navigator | g+Shift+J / g+Shift+K |
| Toggle sidebar / editor / response minimize | g+1 / g+2 / g+3 |
| Zoom focused pane / clear zoom | g+z / g+Z |
| Stack/inline response pane | g+s (stack) / g+v (inline) |
| Jump to top/bottom of focused response tab | g+g / G |
| Cycle Raw tab mode (text / hex / base64, summary for large binary) | g+b |
| Load full Raw dump (hex) | g+Shift+D |
| Save response body / open externally | g+Shift+S / g+Shift+E |
Run compare sweep (@compare or --compare targets) |
g+c |
| Start/stop workspace mock server | g+Shift+M |
| Capture focused HTTP response as a mock | g+a |
| Navigator filter | / to focus; type to search files/requests/tags; Esc clears filter and chips |
| Navigator: toggle method filter for selected request | m (repeat to switch/clear) |
| Navigator: toggle tag filters from selected item | t (repeat to toggle) |
| Navigator: jump to selected request/workflow in editor | l / r (when a request or workflow is highlighted) |
| Open environment selector | Ctrl+E |
| Save file | Ctrl+S |
| Save layout (prompt) | g+Shift+L |
| Open file/workspace popup | Ctrl+O |
| Open current/selected file in external editor | g+e |
| New scratch buffer | Ctrl+T |
| Reparse current document | Ctrl+P (also Ctrl+Alt+P) |
| Refresh workspace files | Ctrl+Shift+O |
| Split response vertically / horizontally | Alt+V / Alt+H |
| Pin or unpin response pane | Ctrl+Shift+V |
| Choose target pane for next response | Ctrl+F or Ctrl+B, then arrow keys or h / l |
| Show globals summary / clear globals and cookies | Ctrl+G / Ctrl+Shift+G (or g Shift+G) |
| Quit | Ctrl+Q (or Ctrl+D) |
The editor supports familiar Vim motions (h, j, k, l, w, b, gg, G, etc.), insert entries (i, a, I, A, o, O; I moves to the first non-blank character), visual selections with v / V, yank and delete/change operations, undo/redo (u / Ctrl+r), and a search palette (Shift+F or /, toggle regex with Ctrl+R and n moves cursor forward and p backwards).
Press : from normal mode panes to open a Vim-style command line. Supported actions include :w, :q, :q!, :wq, :x, :e [path], :help, :man, :docs, :noh, and the :mock command family. Bare :e opens the path prompt; giving it a path opens that file or workspace directly.
Finding help
Resterm keeps concise documentation inside the binary, so the first layer of help works offline and matches the installed version:
- Press
?for the searchable help index. Type/to filter shortcuts and topic contents, then useEscto clear the filter or close help. - Run
:help <topic>to open an embedded topic directly;:man <topic>is an alias. Run either command without a topic for the index. - In editor normal mode, put the cursor on an
@directive, an HTTP/protocol keyword, or inside{{ ... }}, then pressKfor the relevant topic. If no exact topic is available, Resterm leaves the editor open and shows a short recovery hint. - Press
ofrom an embedded topic, or run:docs <topic>, to open the corresponding full manual section on GitHub. Release builds use their matching Git tag; development builds usemain. Bare:docsopens this manual. If the browser cannot be started, Resterm shows the URL so it can be copied manually.
The command line suggests commands, topics, :mock subcommands, and filesystem paths where the active argument accepts one. Up / Down (or Ctrl+P / Ctrl+N) selects a suggestion, Tab completes it without running, and Enter accepts and runs an explicit selection. Tab on a directory descends into it; Enter also descends when the command requires a file. If no row has been selected, Enter runs the text currently in the prompt. Paths containing whitespace are quoted automatically.
Ctrl+O opens the same filesystem picker as a standalone “Open File or Workspace” popup. Type a relative, absolute, or ~ path; use Up / Down (or Ctrl+P / Ctrl+N) to select, Tab to complete or descend, and Enter to open the selected supported file or directory as a workspace.
The bottom command bar adapts to the focused pane, editor mode, and response tab. Its contextual keys use a flat presentation by default; themes can add keycap backgrounds through command_segments. The global Help shortcut remains visible in the header, and configured shortcuts are reflected in both contextual hints and the help overlay.
Editor completions (IntelliSense)
In insert mode, Resterm suggests completions at the caret using the open file and active environment. It makes no network calls while you type.
| Context | What completes |
|---|---|
| Start of a request line | HTTP methods plus WS / WSS / GRPC |
| Start of a request URL | Schemes: http://, https://, ws://, wss:// |
@ at the start of a line, with or without a comment marker |
Directives, option keys, and values such as booleans, OAuth grants, HTTP/TLS modes, and workflow failure modes |
| Header section (after the request line, before the blank line) | Header names, then values for well-known headers such as Content-Type |
Inside {{ ... }} |
Variables in scope (file/global/request, @const, current-environment keys) and dynamic builtins ($uuid, $timestamp, ...) |
@compare arguments |
Environment names or profiles from the selected group; baseline suggestions use the targets already chosen |
use= on @apply / @ssh / @k8s |
Matching @patch / @ssh / @k8s profile names |
using= / run= on workflow steps and branches |
Named requests from the current document |
| File paths | Files and directories for @use, descriptors, GraphQL/JSON inputs, TLS/SSH/Kubernetes options, request bodies, and script or body includes |
Press Ctrl+N to show all completions valid at the caret. If there are none, it does
nothing. In editor insert mode this key always controls completion, regardless of
the New Request binding. Outside editor insert mode, the configured New Request
shortcut applies.
In the popup, Up / Down or Ctrl+P / Ctrl+N selects an item. Right or ?
opens the details preview, Ctrl+L toggles it, and Left or Esc closes it.
Enter or Tab accepts an item. Esc dismisses the popup when the preview is
closed. Use the editor_hint_* theme keys to style the popup.
After you accept a completion, the popup shows what can follow it. For example,
@auth opens auth modes, oauth2 opens its options, and grant= opens grant values.
Headers open value suggestions, and directories open their contents. Options that
can appear only once disappear after use, along with their aliases, such as base=
and baseline=. You can repeat @apply use=, but profiles already selected are
omitted.
File suggestions use the request file's directory, or the workspace for temporary
documents. They are filtered by file type where needed: .rts for @use, GraphQL
for @query, JSON for @variables, and script files for script includes. Directory
listings are cached while browsing. In directives that split arguments on spaces,
paths with spaces are quoted. File references that use the rest of the line stay
unquoted. Only SSH and Kubernetes path options expand ~ to the home directory.
Accepting a directive typed without a comment marker adds # automatically. For
example, completing @na produces # @name . The marker is added only when you
accept a suggestion, so you can still type variables such as @name = value.
Many suggestions insert an example value, such as @setting timeout=5s or @mock latency=random(100ms,500ms). Accepting one leaves the example selected, so the next
keystroke replaces it. Press Tab to keep the example and move past the inserted
text, including any closing parenthesis. Left and Right also keep the example
and move to the start or end of the selected text.
Dynamic helpers with call examples insert the call and select only its arguments.
Variable completion adds any missing closing braces, so completing {{ho, {{ho},
and {{ho}} with host produces {{host}} in each case. Inside {{= ... }}
expressions and helper arguments, completion leaves the closing braces unchanged.
Completion does not use gRPC reflection, descriptors, or GraphQL schemas to suggest service, method, or field names.
Custom bindings
Resterm looks for ${RESTERM_CONFIG_DIR}/bindings.toml first and ${RESTERM_CONFIG_DIR}/bindings.json second (default: ~/.config/resterm). Missing files fall back to the built-in bindings. Example:
[bindings]
save_file = ["ctrl+s"]
set_main_split_horizontal = ["g s", "ctrl+alt+s"]
send_request = ["ctrl+enter", "cmd+enter"]
show_context_help = ["shift+k"]- Modifiers use
+(ctrl+shift+o), while chord steps are separated by spaces ("g s"). - Bindings can have at most two steps;
send_requestmust remain single-step so it can run inside the editor. - Unknown action IDs or duplicate bindings cause the file to be rejected (Resterm logs the error and keeps defaults).
Binding reference
| Action ID | Description | Default bindings |
|---|---|---|
cycle_focus_next |
Cycle focus forward (skips editor insert mode). | tab |
cycle_focus_prev |
Cycle focus backward. | shift+tab |
open_env_selector |
Open environment picker. | ctrl+e |
show_globals |
Show global variable summary. | ctrl+g |
clear_globals |
Clear global variables and cookies. | ctrl+shift+g, g shift+g |
save_file |
Save the current .http / .rest file. |
ctrl+s |
save_layout |
Prompt to persist current layout (splits, widths) to settings. | g shift+l |
toggle_response_split_vertical |
Toggle response inline vs vertical split. | alt+v |
toggle_response_split_horizontal |
Toggle response inline vs horizontal split. | alt+h |
toggle_pane_follow_latest |
Toggle follow-latest for the focused response pane. | ctrl+shift+v |
toggle_help |
Open/close the help overlay. | ? (aka shift+/) |
show_context_help |
Show diagnostics on the editor's current line, or open contextual documentation when there are none. | shift+k (soft default) |
next_diagnostic / previous_diagnostic |
Move between editor diagnostics, wrapping at document boundaries. | ] d, [ d (soft defaults) |
show_status_message |
Show current editor diagnostics, or the current status message when there are none. | g . (soft default) |
open_path_modal |
Open the filesystem picker for a supported file or workspace. | ctrl+o |
reload_workspace |
Rescan the workspace root(s). | ctrl+shift+o, g shift+o |
open_new_file_modal |
Launch the “New Request” modal. | ctrl+n |
open_file_in_editor |
Open the current or selected supported file in $RESTERM_EDITOR, $VISUAL, or $EDITOR. |
g e |
open_theme_selector |
Open theme selector. | ctrl+alt+t, g m, g shift+t |
open_temp_document |
Open a scratch document. | ctrl+t |
reparse_document |
Reparse the active buffer. | ctrl+p, ctrl+alt+p, ctrl+shift+t |
reload_file_from_disk |
Reload the active file from disk (discarding unsaved buffer changes). | g shift+r |
select_timeline_tab |
Focus the Timeline tab. | ctrl+alt+l, g t |
quit_app |
Quit Resterm. | ctrl+q, ctrl+d |
send_request |
Send the active request (single-step only). | ctrl+enter, cmd+enter, alt+enter, ctrl+j, ctrl+m |
explain_request |
Prepare an Explain preview for the active request without sending it. | g x |
cancel_run |
Cancel the in-flight request, compare, profile, or workflow run. | ctrl+c |
copy_response_tab |
Copy the focused Pretty/Raw/Headers response tab to the clipboard. | ctrl+shift+c, g y |
toggle_mock_server |
Start or stop the workspace mock server. | g shift+m |
capture_mock_response |
Append the focused live/pinned HTTP response as a mock block. | g a |
| Action ID | Description | Default bindings | Repeatable |
|---|---|---|---|
sidebar_width_decrease / sidebar_width_increase |
Shrink/grow sidebar width when the navigator is focused; resize editor/response width in side-by-side layout. | g h, g l |
✓ |
sidebar_height_decrease / sidebar_height_increase |
Collapse / expand the selected navigator branch; resize editor/response height in stacked layout. | g j, g k |
✓ |
workflow_height_increase / workflow_height_decrease |
Collapse all / expand all navigator branches. | g shift+j, g shift+k |
✓ |
focus_requests / focus_response / focus_editor_normal |
Jump directly to a pane. | g r, g p, g i |
✗ |
set_main_split_horizontal / set_main_split_vertical |
Stack vs side-by-side editor/response. | g s, g v |
✗ |
start_compare_run |
Trigger compare sweep for the current request. | g c |
✗ |
toggle_ws_console |
Enter WebSocket command mode (i console, p ping, c close, l clear). |
g w |
✗ |
toggle_sidebar_collapse / toggle_editor_collapse / toggle_response_collapse |
Collapse/expand panes. | g 1, g 2, g 3 |
✗ |
toggle_zoom / clear_zoom |
Zoom current region / clear zoom. | g z, g shift+z |
✗ |
send_request participates in the editor’s “send on Ctrl+Enter” logic, so keep it single-step. The show_context_help, show_status_message, next_diagnostic, and previous_diagnostic shortcuts are soft defaults: an explicit binding for another action may claim their keys, and the corresponding default is then omitted. Explicit bindings still follow the conflict rules above.
Response panes
- Pretty: formatted JSON (or best-effort formatting for other types).
- Raw: exact payload text.
- Stream: live transcript viewer for WebSocket and SSE sessions with bookmarking and console integration.
- Headers: response and request header subviews with a visible in-pane switcher. Press
EnterorSpacewhile focused on the Headers tab to switch between the response headers and the sent request headers (cookies included). - Profile / Workflow: live results for profile and workflow runs. Profile results show progress, latency statistics, a histogram, and failures. On narrow panes, the sections stack vertically. Workflow results show a summary, a step list, and details for the selected step. The tab label follows the current run type. Use
j/kor arrow keys to move between steps,EnterorSpaceto focus the selected step detail,j/korPageUp/PageDownto scroll that detail, andEsc,Enter, orSpaceto return to the step list. - Timeline: per-phase HTTP timings with budget overlays; available whenever tracing is enabled.
- Diff: compare the focused pane against the other response pane.
- History: chronological responses for the selected request (live updates). Open a full JSON preview with
por delete the focused entry withd.
When a request opens a stream, the Stream tab becomes available. Use g+w to enter WebSocket command mode, then press i to toggle the console, p to send ping, c to close the socket, or l to clear the live buffer. If the console is actively focused for typing, press Esc first so text entry is not interrupted. Inside the console, use F2 to switch payload modes (text, JSON, base64, file), Ctrl+S or Ctrl+Enter to send frames, and the arrow keys to replay recent payloads.
Use Alt+V or Alt+H to split the response pane. The secondary pane can be pinned so subsequent calls populate only the primary pane, making comparisons easy.
While the response pane is focused, Ctrl+Shift+C (or g y) copies the entire Pretty, Raw, or Headers tab directly to your clipboard, matching the rendered text (no mouse selection required).
Use g+g and G to jump to the start or end of the Pretty, Raw, or Headers tabs when the response pane is focused. The same keys jump to the first or last entry in the navigator when you are browsing files or workflows.
Binary responses show size and type hints alongside quick previews. For large binary payloads, the Raw tab starts in a summary view and defers full dumps until requested. While the response pane is focused, press g+b to rotate the Raw tab between summary, hex, and base64 views. Press g+Shift+D to load the full hex dump immediately. Press g+Shift+S to open the Save Response Body prompt, which comes prefilled with a suggested path from your last save or workspace and writes the file after you hit Enter.
Press g+Shift+E to open the body in your default app. Resterm only opens types from a fixed list: images, PDF, text, JSON, CSV, audio, video, archives, and Office files without macros. HTML, SVG, XML, and Markdown open as plain text so no scripts inside them can run. It finds the type from the Content-Type header, then the file name the server sent, then the body itself. The file extension always comes from that type, so a PDF sent as invoice.exe opens as invoice.pdf. If no type fits, Resterm shows a warning and you can save the body with g+Shift+S instead. Opened files are kept in a temporary folder that Resterm deletes when it exits.
Pane minimization & zoom
- Toggle the sidebar, editor, or response panes with
g+1,g+2, andg+3. Minimized panes collapse into thin frames that display an indicator along with a reminder of the restoring shortcut. - Status bar badges (
Sidebar:min,Editor:min,Response:min) mirror the current state so you can tell when something is hidden even if the stub scrolls out of view. - Use
g+zto zoom the currently focused pane and hide the others temporarily;g+Zclears zoom and restores the previous layout (including any manual minimize state). - Resize chords such as
g+h/g+landg+j/g+kare disabled while a related pane is hidden or zoomed, preventing accidental layout resets.
Timeline & tracing
- Add
# @tracedirectives to enable HTTP tracing on a request. Budgets usephase<=durationnotation (dns<=50ms,total<=300ms, etc.) with an optionaltolerance=applied to every phase. Supported phases map tonettrace:dns,connect,tls,request_headers,request_body,ttfb,transfer, andtotal. - When a traced response arrives, Resterm evaluates budgets, raises status bar warnings for breaches, and unlocks the Timeline tab. Use
Ctrl+Alt+Lor theg+tchord to jump straight to it from anywhere. - The Timeline view renders proportional bars, annotates overruns, and lists budget breaches. Metadata such as cached DNS results or reused sockets appears beneath each phase, followed by Connection and TLS panels (protocol, reuse, proxy/SSH, resolved IPs, cipher/ALPN, cert chain, SANs, issuer, expiry).
- Scripts can inspect traces through the
tracebinding (trace.enabled(),trace.phases(),trace.connection(),trace.tls(),trace.breaches(),trace.withinBudget(), etc.), allowing automated validations inside Goja test blocks. - See
_examples/trace.httpfor a runnable pair of requests (one within budget, one deliberately breaching) that demonstrate the timeline output and status messaging. - Configure optional OpenTelemetry export with
RESTERM_TRACE_OTEL_ENDPOINT(or--trace-otel-endpoint). Additional switches:RESTERM_TRACE_OTEL_INSECURE/--trace-otel-insecure,RESTERM_TRACE_OTEL_SERVICE/--trace-otel-service,RESTERM_TRACE_OTEL_TIMEOUT, andRESTERM_TRACE_OTEL_HEADERS. Spans are emitted only while tracing is enabled; HTTP failures and budget breaches mark the span status asError.
History and globals
- The history pane persists responses along with their request and environment metadata. Entries survive restarts (stored under the config directory; see Configuration).
Ctrl+Gshows current globals (request/file/runtime) with secrets masked.Ctrl+Shift+G(org Shift+G) clears globals and cookies for the active environment.Ctrl+Eopens the environment picker to switch betweenresterm.env.json(orrest-client.env.json) entries.