Skip to main content
hitspec studio opens an interactive, keyboard-first workspace for your .http files without leaving the terminal. It is the fastest way to explore an API: edit a request, run it, inspect the tabbed response, and copy it out as curl or code — all from one screen.
ui is an alias for studio, so hitspec ui does the same thing. The older hitspec serve command still opens studio for backward compatibility, but hitspec studio is the dedicated command. Use hitspec serve --api-only when you want the REST/WebSocket API server instead of the UI.

What you get

  • Inline editing — a syntax-highlighted source pane you can edit and save (ctrl+s).
  • Run + tabbed response viewer — body, headers, assertions, timing, and captures.
  • Nine screens — workspace, stress, mock, contract, record, history, import, cookies, and settings.
  • Command palette (ctrl+p) — every action, searchable.
  • Copy/export — copy a request as curl, HTTPie, Python, JS fetch, Go, Ruby, or wget, including method, URL, headers, and body.
  • Environment + theme switchers — change the active environment (ctrl+e) or color theme (ctrl+t) live.
  • Workspace search (ctrl+f) and file watching — the file list and runs update as files change on disk.

Layout

The workspace screen is split into panes you cycle through with tab / shift+tab: A top bar shows the active environment and version; a bottom navigation strip and status line show the current screen, contextual key hints, and toasts. The layout adapts to the terminal. From 120 columns the source and response sit side by side; below that they share one panel, and studio switches that panel to the response when a run finishes (tab brings the source back). On a short terminal (under 30 rows) the headers and assertions row is dropped so the request list and the main panel keep their room. The headers and assertions panels follow the request highlighted in the list: what the file declares for it, or what it returned on its last run.

Screens

Press a number key (or use the palette) to switch screens:

Keyboard shortcuts

Press ? at any time for the in-app keyboard reference.

Screens

Workspace

r and R run what is in the editor, including edits you have not saved yet; the file on disk is not touched. A run takes the whole terminal’s attention: a second r while one is running is ignored, and x (or ctrl+c) cancels it — requests that had not started are skipped. After a file run, < and > step through every request’s response; the run opens on its first failing request.

Unsaved edits

Studio never drops your edits silently. Opening another file (enter in the file list, search), creating one, importing, renaming or duplicating, generating a sample, and quitting (q or ctrl+c) all ask first when the editor has unsaved changes. ctrl+s also checks the file on disk: if it was modified outside studio since you opened it, studio asks before overwriting it. If the open file is deleted outside studio while you have unsaved edits, studio keeps them, warns that the file was deleted on disk, and ctrl+s recreates the file from the editor.

Forms (stress, mock, contract, record, import, cookies, settings)

The screens that start something show a form with empty fields; the placeholder is the value used when a field is left blank. Nothing starts until you ask: enter never submits a form, so a stray key cannot start a load test.

Stress profiles

The last field of the stress form is profile. Type the name of a stress profile saved in hitspec.yaml and start the test: the profile’s duration, rate, VUs and thresholds apply. With a profile named, a blank duration, rate, vus or max vus keeps the profile’s value, and a value you type wins over it. Without a profile, blank fields use the defaults shown (30s at 5 RPS). The idle stress screen lists the saved profile names; an unknown name shows an error and starts nothing.

Global

Command palette

Press ctrl+p to open the command palette — a searchable list of every action. Type / then a short, unique query to filter, then enter to run the highlighted command. The palette covers everything in the keymap plus actions that have no dedicated key, including:
  • Run the active request or whole file, save, edit, refresh.
  • File operations — new, rename, duplicate, delete, and generate a sample project.
  • Copy/export the selected request as curl, HTTPie, Python, JS fetch, or Go, and copy the last response body.
  • Quick request (ad-hoc) — run a one-off request by URL without saving a file.
  • Stress / mock / record — start and stop the load test, mock server, and recording proxy; export or clear recordings.
  • History / cookies / settings — open those screens, or clear run history.
  • Go to <screen> — jump to any of the nine screens by name.

Copy a request as code

Select a request and use the palette (ctrl+p) to copy it in the format you need: Each snippet includes the request’s method, URL, headers, and body, so it is a runnable copy you can paste and tweak. It is the request highlighted in the list (named or not) as it is in the editor, and {{variables}} are filled in from the file and the active environment, the same values a run would use.
Every format includes query parameters and renders @auth bearer, basic, apiKey and apiKeyQuery as the matching header or query parameter; other @auth types get a comment asking you to add the credentials. The curl export is the most complete: the other formats skip requests with multipart or file bodies and show a SKIPPED comment in their place.

Ad-hoc requests

Use Quick request (ad-hoc) from the palette to fire a one-off request by URL and view the response without creating a file — handy for a quick probe while you work.

Environments

Press ctrl+e to open the environment switcher and pick the active environment. The default environment is the defaultEnvironment from hitspec.yaml, else dev; override it at launch with --env (and point at a specific config file with --config):
Requests, stress runs, the mock server and contract verification all resolve {{variables}} such as {{baseUrl}} from the active environment. The top bar always shows which environment is active, and the Settings screen (9) lets you view and edit environment variables. See Environments for how environments are defined. The Settings screen also edits hitspec.yaml values such as timeout, proxy, headers, validateSSL and followRedirects. Studio uses them for every request it sends — single requests, file runs, ad-hoc requests, stress runs and contract checks — exactly as hitspec run does, and a change you save applies to the next run. The HITSPEC_TIMEOUT, HITSPEC_PROXY, HITSPEC_INSECURE, HITSPEC_PARALLEL, HITSPEC_CONCURRENCY and HITSPEC_BAIL environment variables take precedence over hitspec.yaml (the environment itself is chosen with --env). See the configuration reference for the full list.

Themes

Press ctrl+t to open the theme picker, or set a theme at launch with --theme:
Built-in themes:
  • Nord
  • Catppuccin Mocha
  • Dracula
  • Tokyo Night
  • Gruvbox Dark

File watching

Studio watches the workspace by default (--watch, on by default) and refreshes the file list and live execution progress as files change on disk. Disable it with --watch=false if you prefer a static view.

Flags

Studio does not capture the mouse by default, so your terminal can select and copy text as usual. Pass --mouse if you want the wheel to scroll the response pane; the terminal’s own selection then needs a modifier key (usually shift).
Shell commands and database assertions are disabled by default. Pass --allow-shell and/or --allow-db to enable them in studio, the same as with hitspec run.

Read-only mode

--read-only protects the workspace and hitspec.yaml: saving, creating, renaming and deleting files and editing settings or cookies are refused. Running requests, stress, mock, record and contract verification still work, and read-only runs do not save cookies. Use it to browse or demo a workspace without risking changes:

Next steps

Quickstart

Write and run your first test, then open it in studio.

Editor Setup

Syntax highlighting and completions in VS Code, Neovim, and more.

Stress Testing

Drive a load test from the stress screen.

API Client Manager

How studio and serve share one in-process manager.
Last modified on October 19, 2026