Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Quickbar

The game’s own row of one-click commands, given a permanent home — look, search, inventory, attack, and whatever else the game or a script hands you, without typing any of them.

What it’s for

The game ships a set of clickable command bars: a general one, a combat one, an information one. They exist whether or not you use them, and most of the time they go to waste because there is nowhere for them to live.

A quickbar window is that home. It shows one bar at a time as a row of buttons, and clicking one sends its command. Scripts push their own bars into the same place, which is how a Lich script gives you buttons without you configuring anything.

Reach for a quickbar when you want what the game and your scripts already offer. Reach for a hotbar when you want buttons you designed yourself — see the comparison below, because the two look identical and behave nothing alike.

Quickbar or hotbar?

QuickbarHotbar
Who writes the buttonsThe game and your scripts, pushed over the wireYou, in the .hotbars editor
Where they’re storedArrive live; cached per characterhotbars.toml, global or per character
Change with your state❌ never✅ recolor, relabel, dim on conditions
Countdown overlays
Hotkeys✅ per button
Several bars at once✅ one window switches between them✅ one window per bar
In-app editor❌ — custom bars are TOML-only.hotbars

In short: the quickbar surfaces what someone else made for you. The hotbar is where you build your own. Most players eventually run one of each.

Set it up

  1. Click Windows in the top toolbar, expand Hotbars, and tick quickbar. It arrives 3 rows by 120 columns with its title bar off, sized to sit as a strip across the top or bottom of your layout. (Typed equivalent: .addwindow quickbar quickbar 0 0 120 3.)
  2. Click any button to send its command. A button whose label ends in ...roleplay…, actions… — asks the server for a menu and shows you the verbs it offers instead of firing immediately.
  3. When more than one bar exists, a dropdown appears at the left of the row. Pick a bar from it to switch the window to that bar. With only one bar there is no dropdown, because there is nothing to switch to.
📷 screenshot pending
A quickbar window showing the game's main bar — look, search, inventory — with the bar-switching dropdown open at the left listing main, combat and information.

Expected result: a row of buttons across your layout. Clicking look sends look and the room description appears in your main window.

Common setups

A command strip along the bottom of your layout

The quickbar’s shape — wide and three rows tall, borders trimmed — is meant for one job.

  1. Add quickbar from the catalog’s Hotbars group.
  2. Drag it to the bottom of your layout, above your command input, and stretch it to the full width.
  3. Turn its title bar off (it ships off already) so it reads as a strip rather than a window.
  4. Use the switcher to park it on combat before you hunt.

You’ll see: one row of buttons under your text, with attack, ambush, aim, target and fire a click away — and a switcher that puts the general bar back when you return to town.

Your own bar, alongside the game’s

Custom quickbars are defined in config.toml, and they sit in the same switcher as the game’s. This is the one part of VellumFE with no in-app editor — there is no .quickbars command.

Add this to your config.toml:

[quickbars]
default = "quick-mine"

[[quickbars.custom]]
id = "quick-mine"
title = "Mine"
entries = [
  { type = "link", label = "loot", command = "loot" },
  { type = "sep" },
  { type = "link", label = "skin", command = "skin" },
  { type = "link", label = "search", command = "search" },
]

Restart, and the switcher gains a Mine entry — selected on arrival, because default names it.

You’ll see: your own three buttons in the same strip as the game’s, switchable to and from the combat bar like any other.

⚠️ The id must be exactly quick or start with quick-. Any other id is skipped silently at load with only a warning in the log — no error, no button, no explanation on screen. id = "mine" gives you nothing; id = "quick-mine" works.

Tips & gotchas

⚠️ A quickbar is not a hotbar and cannot be made into one. Its buttons never change color, never dim during roundtime, never show a countdown, and never take a hotkey. If you want a button that reacts to your state, that is a hotbar, and it is a different widget.

⚠️ The bar switcher looks different in each frontend, and one of them hides. The terminal always shows a >> marker at the left of the row and opens a popup list. The GUI shows a dropdown — but only when two or more bars exist. On a session with a single bar, the GUI quickbar looks like it has no switcher, because it doesn’t need one.

Two kinds of button, and the difference is what happens on click. A plain button sends its command straight to the game. A button ending in ... is a menu button: clicking asks the server what verbs apply and shows you a menu to pick from. Nothing fires until you choose.

Empty is a real state and it tells you something. A quickbar window with no bars reads No quickbars configured. in the GUI. Since the game sends its bars once, at login, this normally means you attached to an already-running session and missed the burst — see the next point.

Bars are cached per character, so attaching to a running Lich still gets you buttons. VellumFE writes the bars it has seen into that character’s session cache and restores them on the next start. Where the cache is cold and the login burst was missed, it seeds the game’s three standard bars — main, combat and information — so the window is never blank on a mid-session attach.

Your active bar is remembered too. The bar you last switched to is saved alongside the bars themselves, so the window comes back on the one you were using rather than resetting to the first.

Custom bars merge with the game’s; they don’t replace them. Defining quick-mine adds a switcher entry. Defining quick replaces the game’s main bar with yours, because that id is already taken.

Entries missing required pieces are dropped one at a time. A link with no label or no command, or a menulink missing exist or noun, is skipped while the rest of the bar builds normally. A bar that came out short is usually a half-written entry, not a broken file.

Skip selection_fg and selection_bg if you see them in an old layout. Selection colors come from your theme, not from the window. Those keys do nothing.

See also

Config reference (TOML)

The window is written by the catalog and .addwindow. Custom bars are the exception in this manual: they have no in-app editor, so config.toml is the only route.

The window

[[windows]]
name = "quickbar"
widget_type = "quickbar"
row = 0
col = 0
rows = 3
cols = 120
show_border = true
show_title = false
title = "Quickbar"

widget_type = "quickbar". The type string is exactly quickbar; an unrecognized type does not error, it quietly creates a text window instead.

Widget fields: none. The content is entirely the bars the game, your scripts, and [quickbars] supply.

Catalog rowCategoryTitleSizeGame
quickbarHotbarsQuickbar3 rows x 120 cols, pinned to 3 rows, title bar offBoth

Ungated — offered to GemStone IV and DragonRealms characters alike.

Custom bars — [quickbars] in config.toml

[quickbars]
default = "quick-mine"       # which bar is active on start; must be a defined id

[[quickbars.custom]]
id = "quick-mine"            # required: exactly "quick", or starts with "quick-"
title = "Mine"               # optional; falls back to the id in the switcher
entries = [
  { type = "link", label = "loot", command = "loot", echo = "loot" },
  { type = "menulink", label = "roleplay...", exist = "qlinkrp", noun = "" },
  { type = "sep" },
]
FieldTypeDefaultWhat it does
defaultstringnoneBar active on start. Ignored with a log warning when the id is unknown or malformed
customarray of tables[]Bar definitions
custom.idstringMust be quick or start with quick-. Any other value skips the whole bar with a log warning
custom.titlestringthe idSwitcher label. Blank or whitespace falls back to the id
custom.entriesarray[]Buttons, in display order

Entry types (type is required):

typeRequiredOptionalBehavior
linklabel, commandechoSends command to the game on click
menulinklabel, exist, nounRequests the server’s verb menu for that object
sep / separatorVisual divider between buttons

An entry missing a required field is skipped; the rest of the bar still builds.

Where bars come from at runtime

SourceNotes
The gameSent once, at login, as quick… dialogs
ScriptsThe same tags; a clear flag replaces the bar’s contents, otherwise entries append
[quickbars.custom]Applied at startup
Seeded fallbackThree standard bars seeded when the cache is cold on a mid-session attach
SwitchingThe game can change your active bar on its own

Only ids that are quick or begin with quick- are treated as quickbars. Anything else on the same wire tag is a dialog panel, not a quickbar button.

Persistence

Bars, their order, and the active id are cached per character in:

~/.vellum-fe/profiles/<Character>/session_cache.toml

That is what lets a mid-session attach to a running Lich still show buttons.

Where the settings live

SettingDesktop GUITerminal (TUI)
Widget settingsnone — no widget section in the right-click menunone — .editwindow shows base fields only
Custom bar definitionsconfig.toml only — no in-app editorconfig.toml only
Keyboard focus for arrow keysn/a — the GUI drives the bar by mouseremove "quickbar" from [ui.focus] exclude
Selection colorsfrom the active themefrom the active theme

Standard window keys — row, col, rows, cols, show_border, border_style, border_sides, title, show_title, locked — apply as they do to any window. Selection colors are theme-owned; a selection_fg or selection_bg key in a layout file is read by nothing.