Skip to content

Desktop app

The desktop app works on the same files as the CLI. It does not import or store a collection — it opens your project folder.

Click Open project and choose your repository (or the api/ folder). Outry finds env.toml the same way the CLI does. If the folder has no env.toml, the app offers to create api/env.toml with example environments.

The app remembers the last project and reopens it on start.

  • The left panel shows every .outry and .http file in the project; + next to Requests creates a new one (users/create becomes users/create.outry; type .http at the end for the old format). A file with only flows is marked FLOW.
  • Right-click a request or a folder to open, duplicate, rename or delete it. Rename / Move… takes a path, so users/create → admin/users/create moves the file to another folder. Deleting a folder removes only the request files in it; other files stay.
  • The editor highlights the syntax and checks the file as you type, like outry check: a wrong name of a called request, an unknown argument or shape is underlined, and the message is shown below the editor.
  • In .outry the editor suggests fields at the start of a line, names of requests and flows of the project (with their parameters), built-in functions, variables of the current environment and, after ., methods like .contains(); after matches — types and shapes.
  • In .http, after {{ the editor suggests variables (from env.toml, > save, the secrets list and dynamic variables); on > lines it suggests directives, paths and operators.
  • The switcher under the project name selects an environment from env.toml.
  • Add secret at the bottom left stores a value in the system keychain for the current environment.
Shortcut Action
Ctrl/⌘ + Enter Send the request; in .outry — run the request or flow at the cursor
Ctrl/⌘ + S Save the file
Ctrl + Space Show suggestions
Ctrl/⌘ + F Search in the file

The editor’s current text is sent, even if it is not saved yet — handy for quick experiments.

A .outry file may hold several requests and flows. Run (or Ctrl + Enter) runs the one at the cursor; the ▶ next to each request and flow line runs that one.

Requests called from the one you run (Login() in a header) are sent once and then reused, as in outry run; cookies are kept the same way. This run lasts until you switch the environment or click New run on the Variables tab. A request with confirm: true asks before it is sent.

A request’s response gets a trace tab listing the requests it called, with their status, timing and whether the response came from the cache. A flow shows its checks, the step it stopped at, saved values and the same trace.

While a request is in flight, Send turns into Cancel. You can switch to another request and send it in the meantime: requests run in parallel, and each file keeps its own last response.

Click env.toml under the environment switcher to open the project’s env.toml in the editor. The app checks the TOML as you type and won’t save a file with an error. After saving, new environments appear in the switcher and new values are used by the next request. Keep tokens and passwords out of this file — use Add secret instead.

The right panel has four tabs: Response, History, Variables and Routes. The response itself has these views:

  • body — pretty-printed and highlighted JSON, HTML or XML; the search button (or Ctrl/⌘ + F inside the body) finds text in it;
  • preview — for images and HTML pages; HTML is rendered without running its scripts;
  • headers — response headers;
  • tests — the result of every check (expect, > assert) and save, with the reason for a failed one;
  • trace — .outry only: the requests it called;
  • request — the request exactly as it was sent, after variable substitution.

The download button saves the body to a file, byte for byte.

History lists the last 100 responses of the project — for the open request or for all of them. Click one to view it again. History is kept in memory until the app is closed; turn on Keep response history on disk in the menu (☰ in the title bar) to keep it between launches. It is stored outside the repository, next to saved values, and responses may contain tokens — Clear removes it.

Variables shows every variable of the selected environment, its final value and where it comes from — env.toml, saved, OUTRY_* or keychain — like outry vars. Secrets are masked. Secrets listed in secrets but not set anywhere are marked missing, with a button to add them. Clear saved forgets the values captured by save in this environment; New run forgets the responses of called requests and the cookies of .outry runs.

Routes compares the routes of your Go service with the project’s requests, like outry import go: new routes, routes that already have a request, and requests whose route is gone from the code. Create files writes .outry requests for the new ones and shapes for new response types. A request that differs from its handler gets a changed badge and the list of differences: Diff shows what a fix changes, Apply writes it, Fix N in the toolbar applies all of them, and Remove N files deletes files whose routes are all gone. The sync button next to Requests opens the tab and rescans. The Go folder defaults to the one above api/; click its path to choose another.

Edit files in VS Code, switch branches, pull changes — the file list and the open request update immediately. If you have unsaved changes in the app, the open file is not overwritten.

On start the app checks for a new version. When one is available, a button in the sidebar downloads it, installs it and restarts the app. Updates are signed and verified before installing.

The menu (☰ in the title bar) has Check for updates and Install updates automatically: with the latter on, a new version is downloaded and installed in the background and used after the next restart.