The Launcher
Double-click, choose GUI, Terminal, or Vellum Despana, then click Launch — with your password in the OS credential store instead of your shell history.
What it’s for
You play more than one character, and you would rather not retype an eAccess account, a game world, and a port every time. The Launcher keeps each of those as a named connection you click once. Passwords go into Windows Credential Manager, the macOS Keychain, or the Linux secret service — never into a file, never onto a command line where every process on the machine can read it. Each Launch starts a separate session process, so running four characters at once is four clicks. The Launcher is a normal native window, not a system-tray application; running the binary with no arguments opens it whenever you need it.
Set it up
The Launcher is a desktop window, so this is a frontend split: it belongs to the desktop GUI, and the terminal and mobile tabs say what you use instead.
- Start
vellum-fewith no arguments — double-clicking does exactly this — or runvellum-fe --launcherif you want it from a terminal. - Click ➕ New connection. The form is headed New connection.
- Fill in Name (this is also what
--launch-profiletakes), then choose Connection: Direct to reach the game through eAccess with no Lich, or Lich to attach to a detachable-client Lich you are already running.- Direct shows Account, Password, Save password, Game, and Character.
- Lich shows Host, Port, and Character.
- Tick Save password if you want it remembered. Leave it unticked and the Launcher asks each time.
- Click Save.
- Back in the list, click Launch on the row you just made.
→ Expected result: the row appears with your name in bold and a summary
beneath it — Nisugi @ GemStone IV for direct, or
Nisugi via Lich @ 127.0.0.1:8000 for Lich. Clicking Launch opens the
selected presentation: a native window for GUI, a console for Terminal, or an
automatically paired browser tab for Vellum Despana. The status line at the
bottom reads Launched <name>.
While that session is active, its row says Open and reopens the existing presentation instead of starting a duplicate. If the process is still alive after its game connection has ended, the row says Restart: Vellum stops that dormant runtime, waits for it to release its session registry entry, and then performs a normal launch. Stop removes the dormant runtime without relaunching it.
Common setups
One account, several characters, all at once
Make a connection per character, all pointing at the same Account:
- ➕ New connection → Name
Nisugi, Direct, AccountMYACCT, Password once, Save password ticked, Game GemStone IV, CharacterNisugi. Save. - ➕ New connection → Name
Alt, same AccountMYACCT, leave Password blank, Save password still ticked, CharacterAlt. Save. - Click Launch on both rows.
The saved password is keyed by account, not by connection, so the second one reuses the first’s stored password without you typing it again. Because each Launch spawns its own process, both characters run side by side with independent layouts.
→ Two session windows are open, each showing its own character, and the Launcher’s status line shows Launched Alt from the last click.
A connection that starts in the terminal instead
The Launcher defaults everything to the desktop GUI. To make one connection open the text interface:
- Edit the connection.
- Open the Advanced fold.
- Set Frontend to Terminal.
- While you are there, set Color mode to
directfor true-color terminals, and tick Palette ▸ Set up on startup if you useslotmode on a 256-color terminal. These two rows only appear when Frontend is Terminal. - Save, then Launch.
→ A console window titled VellumFE opens running the terminal frontend, and it remembers its size and position the next time you launch that connection.
A connection that opens in Vellum Despana
Vellum Despana presents Vellum’s headless core and login system through a desktop browser workspace. It does not create a second login or bypass the saved connection:
- Edit the saved connection you want to use. For Lich scripts, confirm it is a Lich connection with the expected host, detachable-client port, and character.
- Open Advanced and set Frontend to Vellum Despana.
- Save, then click Launch on that row.
Vellum applies the selected profile once, starts its WebUI, and opens the
authoritative paired /despana URL after the server has actually bound. There
is no second profile click in the browser and no token to copy. If the preferred
Web dashboard port is occupied and not pinned, the server may choose a nearby
port; the automatically opened URL already contains the correct port.
→ The default browser opens Vellum Despana already connecting to the saved
character. The native Launcher remains available for starting another
character. Closing the browser tab does not stop its independent session
process: enter .exit in Despana when you mean to close it completely (.quit
disconnects and returns Despana to its Launcher handoff). See
Vellum Despana for workspace, map, and
troubleshooting details.
Serve this session to your phone
In the connection’s Advanced fold:
- Tick Web dashboard ▸ Enable on port and leave
8484. - Set Bind address to
0.0.0.0— the hint beside it reads 0.0.0.0 = allow LAN devices. Leaving it at127.0.0.1restricts the server to the machine it runs on. - Save, Launch, then browse to
http://<your-pc-ip>:8484/playon the phone.
→ The phone shows the live session, driven by the same core the desktop window is rendering.
Tips & gotchas
⚠️ The Launcher defaults to the GUI; a hand-typed command line defaults to the TUI. A new connection is created with Frontend: GUI, but
vellum-feinvoked with flags uses--frontend tuiunless you say otherwise. The same character launched two ways can land in different interfaces. Set GUI, Terminal, or Vellum Despana explicitly under Advanced ▸ Frontend. The CLI’s--frontend headlessruns a browser-only session directly; selecting Vellum Despana in the Launcher is the convenient saved-connection path to that desktop presentation.
⚠️ Deleting a connection can delete the saved password with it. The confirmation window Delete profile? says so: the keyring entry is removed unless another connection still uses the same account. Deleting your only
MYACCTconnection means the next one has to re-enter the password.
- “Password was NOT stored” in red means the credential store refused the write — common on headless Linux, inside WSL, or under a bare window manager with no secret service running. The connection still saves and still launches; you are asked for the password each time. Install a secret service (GNOME Keyring, KWallet) to fix it.
- A red line about
launcher.tomlon startup means the file could not be parsed. The Launcher deliberately shows the error rather than starting with an empty list, because saving from an empty list would overwrite your connections. Fix the file before saving anything. - Connection names cannot contain
"or%. The Launcher rejects them at save time, because a terminal session’s name travels through a Windowscmdcommand line where neither can be passed safely. - Renaming a connection does not duplicate it. The edit form tracks the name you started with and replaces that entry.
- The account name is not shown in the list. Each row’s summary is
<character> @ <game>on purpose — the list is on screen constantly, and in screenshots. The account stays inside the edit form. - Nothing in the list? “No saved connections yet” with Create one to get started is the empty state, not an error.
The other launcher: cold-starting Lich over SSH
There is a second, separate feature with a confusingly similar name. The SSH Launcher does not manage connections — it starts a headless Lich on your home PC from wherever you are, over an existing WireGuard or Tailscale tunnel, then attaches to it. Use it when the machine that runs Lich is not the machine you are sitting at.
It lives inside a running session, not in the Launcher window:
- Type
.launcher(or bare.launch) in the command input to open the SSH Launcher panel. - Fill in Host (tunnel address), User, SSH port, Remote OS,
optionally Attach host, and the Launch command template — where
{character},{game}and{port}are substituted per character. - Click Generate new key, then Copy public key and paste that one line
into
~/.ssh/authorized_keyson the home PC. The private half goes to your OS secure store; the indicator changes to ✓ key stored. Expand Harden it (recommended) to see therestrict,command="…"prefix that limits a leaked key to launching the game and nothing else. - Add each character under Characters with its game token and its own detachable-client Port, then Save.
- Run it with
.launch <character>.
If a Lich is already listening on that port, the flow skips the SSH step entirely and attaches straight away. If not, it SSHes in, spawns Lich detached so it survives the SSH channel closing, then polls the port. The open port — not the spawn’s exit code — is what counts as success, so a message like “Launched Lich but 100.64.0.5:8001 never opened” means the command template or the character name is wrong, and the spawner’s own output is appended to tell you which. On a first connection the host key’s fingerprint is pinned; if a pinned key ever changes, the launch is refused outright rather than prompting.
→ .launch Nisugi reports progress in the session and ends attached to the
freshly started Lich.
See also
- Installing VellumFE — getting the binary in the first place
- First Launch — connecting with flags instead of connections
- Desktop GUI · Terminal (TUI) · Vellum Despana
- Put VellumFE on your phone — the web dashboard
Config reference (TOML)
~/.vellum-fe/launcher.toml — the Launcher’s connections
Written by the Launcher as [[profiles]] entries. No passwords are ever
written here.
| Field | Type | Default | What it does |
|---|---|---|---|
name | string | (required) | Display name and the key --launch-profile takes. Cannot contain " or %. |
mode | "direct" | "lich" | (required) | eAccess login, or attach to a running Lich. |
account | string | "" | play.net account (direct only). Keys the saved password. |
game | string | "prime" | One of prime, platinum, shattered, test, dr, drplatinum, drfallen, drtest. |
password_saved | bool | false | True when a password for account is in the OS credential store. |
character | string | "" | Character to log in as; also selects that character’s settings and layout. |
frontend | "gui" | "tui" | "gui" | Native fallback surface. Despana deliberately stores "gui" here so older Vellum builds can still read and launch the profile. |
web_client | "despana" | unset | Selects Vellum Despana as the browser presentation. This additive field is ignored by older Vellum builds. |
host | string | "127.0.0.1" | Lich host (lich mode). |
port | u16 | 8000 | Lich detachable-client port (lich mode). |
custom_launch | string | unset | Full Lich launch line; when present, connecting probes the port and SSH-launches Lich if it is down. |
web_port | u16 | unset | Enables the embedded web server on this port. |
web_bind | string | unset (= 127.0.0.1) | 0.0.0.0 lets other devices on your network connect. |
nosound | bool | false | Skip audio device initialization entirely. |
settings_profile | string | unset | Use this settings folder instead of the character name, so several characters can share one setup. |
data_dir | string | unset (= ~/.vellum-fe) | Per-connection override of the base directory. |
color_mode | "direct" | "slot" | unset | Terminal color rendering (terminal frontend only). |
setup_palette | bool | false | Run .setpalette at startup (pairs with slot). |
Passwords are stored through the keyring crate under the service id
vellum-fe, keyed by the lowercased account name. A just-typed password handed
to a spawned session travels in the private VELLUM_FE_PASSWORD environment
variable, which the session consumes and removes immediately — never on a
command line.
~/.vellum-fe/ssh-launcher.toml — the SSH Launcher
Written by the SSH Launcher panel. No key material is ever written here.
| Field | Type | Default | What it does |
|---|---|---|---|
ssh.host | string | "" | Tunnel address of the home PC. |
ssh.user | string | "" | SSH user on the home PC. |
ssh.port | u16 | 22 | SSH port. |
ssh.remote_os | "windows" | "unix" | "windows" | Chooses the detach mechanism for the spawned process. |
ssh.lich_command | string | "" | Launch template. {character}, {game} and {port} are substituted; quoted paths are split correctly. |
ssh.attach_host | string | "" | Where to attach after launch. Empty falls back to ssh.host. |
ssh.key_saved | bool | false | True when the ed25519 private key is in the OS secure store. |
characters.<Name>.game | string | (required) | Game token substituted into {game} — gemstone for GS4. |
characters.<Name>.port | u16 | (required) | That character’s detachable-client port. Give each character its own. |
The private key is stored under the same vellum-fe keyring service with the
account prefix ssh-launcher-key:, so it can never collide with a play.net
password. Host keys are pinned on first use to
~/.vellum-fe/ssh-launcher-known-hosts, which is separate from your personal
~/.ssh/known_hosts — VellumFE never touches your own SSH state.