The Launcher
Double-click, click Launch, you’re in — 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.
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 a session
window and the status line at the bottom reads Launched <name>.
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.
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 two different interfaces. Set it explicitly under Advanced ▸ Frontend, or pass--frontend gui.
⚠️ 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)
- 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" | Note the default differs from the CLI’s --frontend tui. |
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.