Skip to content

vlx

The Varlink explorer for your terminal

Every Varlink API on your machine, one keystroke away.

vlx finds the Varlink sockets systemd and friends serve, shows what each one does in plain language, and calls any method with a form that already knows its schema. It is read-only until you say otherwise.

Get started Tour the explorer

$go install github.com/rossedman/vlx/cmd/vlx@latest $vlx demo

Linux, macOS · amd64, arm64 · vlx demo runs anywhere, no systemd needed.

A vlx method page: a parameter form for GetGreeting, its JSON result, earlier calls, and the same call on the command line underneath

Type it, or click through it

One line names any call

Arrow through the pages, or type on the command line that sits under every page. The form and the line stay in sync, and the same line works after vlx call in a script.

  • A few letters jump to any service, method, type or error.
  • ⇥ completes. Once a method is named, its parameters are listed as you type.
  • ⏎ opens the page, or sends the call if you gave parameters.

The home page: services grouped by what they are for, each described in plain language

Every socket vlx finds, grouped by what it is for — System, Network, Users & login, Machines, Storage — with a sentence on what each does. Your recent calls are listed first.

A service page: interfaces with their methods, types and errors, each with a safety class

Interfaces, methods, types and errors, each with the first line of its documentation and, for methods, whether it is safe to call.

A method page: a form built from the IDL, the result and the command line

A form built from the IDL — pickers for enums, inline docs, checks as you type — and the result underneath. Streams arrive live; esc stops them.

Searching from the command line: matches across every service as you type

Start typing anywhere. Matches come from every service on the machine, read in the background with read-only introspection.

Finds everything

Sockets under /run/systemd, /run/varlink/registry, /run/udev and your session. No flags, no config.

Reads the docs to you

Doc comments from the IDL next to every method, parameter, type and error. Raw IDL is a keystroke away.

Knows the schema

Parameters are checked against the IDL as you type. vlx will not send a call the service would reject.

Streams live

Methods that stream show each reply as it arrives, with typed errors and their documentation when things fail.

Scripts cleanly

vlx call … -o json, NDJSON streams and stable exit codes. Every screen can copy its call as a command.

Teaches varlinkctl

Every call shows the equivalent varlinkctl command, so what you learn in vlx carries over.

Safe by default

Browse as root without breaking anything

Every method is classified before it is sent. vlx starts read-only, so you can open any service and prepare any call while only reads go out.

How the safety model works

READ

Always allowed. No side effects: Describe, List…, Resolve….

WRITE

Needs --allow-writes and a y for each call. Unknown methods land here.

DANGER

Needs --allow-writes and the method's name typed back: Reboot, Remove….

Script it

The line you type is the command you run

Whatever you call in the explorer, ctrl+y copies as a command. Pipe the JSON into jq, or let the exit code drive your script.

Scripting with vlx

$ vlx call demo GetGreeting name=Ada language=german -o json \
    | jq -r .greeting
Hallo, Ada!

$ vlx call demo SetDefaultLanguage language=german
vlx: io.vlx.demo.Greeter.SetDefaultLanguage is a WRITE method and vlx is
read-only; rerun with --allow-writes to enable it
$ echo $?
4

How it works

A safety gate in front of a pure-Go Varlink client

vlx architecture: the TUI and CLI call through a safety gate and sdvarlink to Unix sockets

vlx is built on sdvarlink, a pure-Go Varlink library with an IDL parser, and on Charm's Bubble Tea, Bubbles and Lip Gloss, with Cobra and Viper for the command line.

Two minutes to your first call

The QuickStart runs against the built-in demo service, so it works on any machine.

Open the QuickStart View on GitHub