Skip to content

The explorer

Run vlx (or vlx explore) to open the explorer. Give it a service to jump straight in:

vlx                                       # start from the list of services
vlx hostname                              # a unique part of a socket name
vlx /run/systemd/io.systemd.Hostname      # a path
vlx unix:/run/systemd/io.systemd.Manager  # varlinkctl's address form

The explorer's home page

The explorer shows one page at a time — all services, one service, one method — and a command line along the bottom that is always there. Use the arrow keys and Enter to drill down, or just start typing to jump anywhere.

The header

The top line is a breadcrumb — vlx › Services › Resolve › ResolveHostname — and two badges:

  • READ-ONLY (green) or WRITES ENABLED (amber) — the safety mode.
  • ROOT (red) when vlx runs as root, as a reminder that calls run with full privileges.

Esc (or Left) always goes up one level.

Services

The home page lists every socket vlx found, grouped — System, Network, Users & login, Machines & images, Storage, Security, Devices, Your session — with a plain-language description of what each one is for. Your most recent calls sit at the top; Enter on one brings it back with the same parameters.

Preview

As the cursor rests on a service, vlx reads its description in the background and shows how many methods it has. This uses only the read-only introspection methods every Varlink service implements, and results are cached. Prefer to connect only when you ask? Set preview: false in the config or run vlx --no-preview.

A service

A service page

A service page lists its interfaces with their methods, types and errors, each with the first line of its documentation and, for methods, its safety class. The org.varlink.service and io.systemd.service interfaces, which every service carries, start collapsed.

Enter opens a method, type or error; Space expands or collapses an interface; Ctrl+D shows documentation and the raw IDL.

The command line

Start typing on any list page — or press /, : or Ctrl+K — and the command line shows what matches across every service, interface, method, type and error:

Searching from the command line

Type a few words in any order (resolve host, user record, unit list), pick with Up / Down, and press Enter to go there, or Tab to complete the line.

Keep typing and the line becomes a call:

SERVICE [METHOD] [NAME=VALUE ...]
demo GetGreeting name=Ada language=german
resolve ResolveHostname name=example.com
hostname Describe
  • SERVICE is anything vlx call accepts: a unique part of a socket name, a socket name or a path. An interface's name works too — unit List finds io.systemd.Unit on the service manager — and so does a method name on its own when only one service has it.
  • NAME=VALUE sets a parameter. Quote values with spaces like a shell: name='Ada Lovelace'. Strings and enum values are taken as typed; numbers, booleans, arrays and structs are JSON.

As soon as the line names a method, the popup lists its parameters. Enter opens the method page and, if you gave parameters (or the method needs none), sends the call. Up and Down on an empty match list bring back earlier calls, like a shell's history.

A method

A method page

A method page has the method's documentation, a parameter form, and the result of the last call, followed by earlier calls of the same method.

The form and the command line are the same call. Edit a field and the command line updates; press Tab to move to the command line, edit it, and the form follows. Enter there sends; Ctrl+S sends from anywhere on the page.

The parameter form

Type How you edit it
string type text
int, float type a number
bool, enums Left / Right or Space to choose, or type the first letters
structs, arrays, maps a JSON value, pre-filled with a skeleton

Move between fields with Up / Down. The current field shows its documentation. Optional parameters (?T) are left out until you give them a value. vlx checks every value against the IDL as you type and will not send invalid parameters. Prefer JSON? Ctrl+J edits all the parameters as one JSON object, and back.

Under the form are two toggles and whether the parameters are valid:

  • more — ask for a stream of replies. On for methods that stream, forced on for methods that require it, unavailable for methods that cannot.
  • oneway — send without waiting for a reply. A oneway call is always treated as at least a WRITE.

The result shows every reply as colourised JSON with its number and arrival time, the error (with its IDL documentation) if the call failed, and a hint when vlx knows what to do about it. Streams arrive live; Esc stops them.

Streaming replies

Tab cycles the form → the command line → the result. With the result focused, Up / Down scroll, Y copies the replies as JSON and Shift+R reveals redacted values. Ctrl+Y copies the call as vlx call and varlinkctl call commands.

Each method keeps its parameters and last result until you quit, so you can wander off and come back.

Clipboard

vlx copies with the OSC 52 escape sequence, which most modern terminals (and tmux with set -g set-clipboard on) support, including over SSH.

Symbols

vlx never relies on colour alone: every state also has a glyph or a word.

Symbol Meaning
ƒ method with a single reply
⌁ method that streams (supports or requires more)
τ type
! error
● / ○ / ✗ service read / not read yet / failed
⊘ you lack permission to connect to this socket
READ WRITE DANGER the method's safety class

Redaction

Values under keys that look secret — password, hashedPassword, privileged, anything with token, secret or privateKey — are shown as «redacted» so they do not end up in screenshots or screen shares. Press Shift+R on the result to reveal them; configure the patterns with redact.

All the keys are listed on the Keys page.