Skip to content

isard_

Your IsardVDI desktops, from the terminal. Log in with your Gencat account, then create, start, open and script the same virtual desktops the web portal gives you.

# macOS / Linux
$ curl -fsSL https://isard.xtec.dev/install.sh | sh

$ isard login
$ isard list
$ isard view windows

What it is

IsardVDI is the virtual-desktop platform behind the Gencat educational network. The web portal is one way in; isard is the other. It signs in exactly as the portal does — your school account, through Microsoft's login — and keeps the session, so after the first time a command is a single HTTPS call.

Desktops

create, start, stop, delete — and view, which opens one in remote-viewer over SPICE, installing the viewer first if it is missing.

SSH and the VPN

isard ssh goes through IsardVDI's bastion with your own key. isard vpn up joins the desktop network over WireGuard, for every port rather than two.

Scriptable

exec, push, pull, job: stdout is the guest's, the exit code is the guest's, and nothing prompts. A desktop becomes a test machine a script can drive.

Templates

isard build profile.yaml takes a Fedora or Ubuntu ISO to a finished, configured template — everything but the installer's own screens, which you click through in the viewer.

One binary

No runtime, no package manager. A single executable per platform, about 12 MB, verified by SHA-256 before the installer moves it into place.

Your credentials stay yours

No command takes a password as a flag. They come from GENCAT_USERNAME / GENCAT_PASSWORD, a .env, or a prompt — never your shell history.

Install

One line. The installer fetches the release manifest, downloads the binary for your platform, checks its SHA-256 and puts it on your PATH.

macOS and Linux

$ curl -fsSL https://isard.xtec.dev/install.sh | sh

Windows (PowerShell)

> irm https://isard.xtec.dev/install.ps1 | iex

isard 0.4.1 — or download the binary yourself. The Linux builds are static, so they run on any distribution.

PlatformFileSizeSHA-256
macOS · Apple siliconisard-darwin-aarch6411.1 MB170d36ebf22c1782893533405f99f9008cd18aef245bb66aea1cfcc2b5f8a737
macOS · Intelisard-darwin-x86_6411.8 MB6b6c3bd4d7d72483980e166654f7abb37cabe89e7550203b65da5127f6373a96
Linux · x86_64 (static)isard-linux-x86_6412.2 MB16f08fb2fe8f022221bf006c5b02b0d8bc762c06f6cccbae021189cf71c7b0eb
Linux · arm64 (static)isard-linux-aarch6410.9 MB2db67e9d88c29cfdccf61b8df7822b53e3617a30c3f2b9567ef97f2cd6d7cd6a
Windows · x86_64isard-windows-x86_64.exe13.0 MB4f5a1ee237cfe220de8972585bff40fed80de3f4db45193b02463886f75c6c9d

The same data, for scripts: /api/version. Set ISARD_INSTALL to choose where the binary goes, or ISARD_NO_MODIFY_PATH=1 to leave your shell's startup files alone.

It is on PyPI too, with the Python library: uv tool install isard (just the command) or pip install isard (import isard).

Get started

Log in once. The session is cached in ~/.config/isard/ and renewed by itself when it expires — with your password from the environment or a .env when there is one, from a prompt otherwise.

$ isard login                     # your @edu.gencat.cat account
$ isard list --hardware           # your desktops, with vCPUs and memory
$ isard template list
$ isard create lab -t "Ubuntu Server 24.04_isardvdi_v1"
$ isard start lab
$ isard view lab                  # the desktop's screen, over SPICE
$ isard ssh lab
$ isard stop lab

Names are matched loosely — isard view win finds “Windows 11” when nothing else is close. The full walkthrough, with what each step looks like, is the CLI page of the documentation.

Scripting a desktop

When a test needs a machine the laptop is not — Windows, x86_64, nested virtualization — a desktop can be that machine. These commands never prompt, print only the guest's output on stdout, and exit with the guest's code.

$ isard up windows                # arm the SSH key, start, wait for sshd
$ isard exec windows -- 'Get-Date'
$ isard push windows ./project --mirror   # only what changed
$ isard job windows gate.ps1 -r 'C:\work\result.json' -o result.json
$ isard pull windows 'C:\work\out.txt' -
$ isard stop windows --wait

After the first call the route to the desktop is cached, so an exec is one SSH connection — about two seconds on Windows — and touches no API at all.