ezTerm v0.18.1
First tagged release since v0.15. Rolls up three rounds of work:
- Splash screen (v0.18) — native logo splash on startup
- Per-session fonts + Ctrl+wheel polish (v0.17)
- VcXsrv bundling, in-app VcXsrv installer, intra-folder DnD
reordering, cargo majors, Node 24 CI (v0.16 backlog)
What's new
Splash screen
A borderless, centered 500 × 500 window with the ezTerm logo appears
the instant the app launches — no blank webview while Next.js
hydrates. A new ui_ready Tauri command closes the splash and shows
the main window once React has painted, with a 2 s visible floor so
the logo registers on fast hardware.
Per-session terminal fonts
- Session dialog → Terminal tab gains a Font family picker with
OS-aware presets:
- Windows: Cascadia Mono / Code, Consolas, Courier New, Lucida
Console, Fira Code, JetBrains Mono, MS Gothic
- macOS: SF Mono, Menlo, Monaco, Andale Mono, Courier New, Fira
Code, JetBrains Mono
- Linux: DejaVu Sans Mono, Liberation Mono, Ubuntu Mono, Noto
Sans Mono, Source Code Pro, Courier 10 Pitch, Fira Code, JetBrains
Mono
- "(default)" = a cross-OS stack (
ui-monospace → native system
mono per platform, with Cascadia / Menlo / DejaVu as fallbacks).
- Custom… switches to a free-text input for any CSS stack.
- Font size field still present (8 – 48 pt).
- Right-click the terminal → Font… opens a compact popover:
family dropdown, −/+ size stepper + numeric input, "Save as session
default" checkbox.
Ctrl + mouse wheel zoom, without the scroll conflict
Previously the terminal viewport scrolled a line or two per wheel
notch before the font update landed, because xterm's internal
handler ran first. Now the wheel listener registers in the capture
phase and, when Ctrl/Cmd is held, fully swallows the event
(preventDefault + stopImmediatePropagation) — no scroll, no
browser zoom, just the font change. Plain scrolling (no Ctrl) is
untouched. Deltas accumulate against a 40 px threshold so trackpads
don't overshoot.
VcXsrv bundled in MSI + NSIS installers
MSI and NSIS now ship VcXsrv at <install>\resources\vcxsrv\ via a
Tauri resource declaration in the new tauri.windows.conf.json. CI
stages the tree from Chocolatey's cache into src-tauri/vcxsrv/
before cargo tauri build runs. The portable .tar.xz mirrors the
same layout next to ezterm.exe.
In-app "Install VcXsrv" flow + missing-VcXsrv dialog
When a session has X11 forwarding on but no VcXsrv is present, the
connect failure now surfaces a dedicated dialog with three actions:
- Install VcXsrv — downloads 1.20.14.0 via
reqwest and
silent-installs to %APPDATA%\zerosandones\ezterm\data\vcxsrv\.
No admin required. On success the connect retries automatically.
- Continue without X11 — reconnects with a new
disable_x11
one-shot override plumbed through ssh_connect. The session's
forward_x11 flag is left alone, so next connect asks for X11
again.
- Cancel — closes the tab.
The Rust side returns a dedicated XServerMissing error code
("xserver_missing"), so the frontend routes it cleanly without
string-sniffing error messages.
Intra-folder drag-and-drop reordering
The sessions sidebar finally supports reordering siblings by drag:
- Session rows split 50 / 50 — top half drops above, bottom half
below. A 2 px accent line renders at the edge that'll receive
the drop.
- Folder rows split 25 / 50 / 25 — top / bottom bands reorder the
folder among its siblings; middle 50 % keeps the existing "drop
INTO this folder" behaviour.
- Cross-folder drops work in one gesture: dropping on a sibling in a
different folder both moves and positions it.
- New backend commands
session_reorder / folder_reorder renumber
sort = index * 10 atomically in one transaction.
Uninstaller cleanup for per-user VcXsrv
- New NSIS
PREUNINSTALL hook (src-tauri/installer-hooks.nsh) and
a WiX custom action fragment (src-tauri/wix-remove-user-vcxsrv.wxs,
using the WiX v3 schema Tauri v2 expects) remove the per-user
VcXsrv dir on uninstall.
- Bundled
<install>\resources\vcxsrv is cleaned by the standard
uninstaller automatically.
- User data (sessions DB, vault, settings, known_hosts) is
deliberately left alone — explicit user action, not a silent
uninstall side effect.
Cargo patch-level majors
thiserror 1 → 2
rand 0.8 → 0.10 (OsRng / RngCore → SysRng /
TryRng::try_fill_bytes)
directories 5 → 6
sha2 0.10 → 0.11
portable-pty 0.8 → 0.9
GitHub Actions bumps
actions/checkout / setup-node / upload-artifact /
download-artifact → v5
- Node 20 → 24
Fixes
- WSL autodetect filters out internal distros (
docker-desktop,
rancher-desktop, podman-machine-default, …) so they don't show
up as shell tabs.
- MSI uninstall fragment now parses under WiX v3 — local
cargo tauri build produces both MSI and NSIS installers cleanly.
Under the hood
New files:
ui/lib/fonts.ts (OS detection + per-OS presets)
ui/components/font-picker-popover.tsx
ui/components/xserver-missing-dialog.tsx
ui/public/splash.html, ui/public/ezterm.png
src-tauri/src/commands/splash.rs
src-tauri/tauri.windows.conf.json
src-tauri/installer-hooks.nsh
src-tauri/wix-remove-user-vcxsrv.wxs
migrations/20260422120000_session_font_family.sql
New dependency: reqwest (already transitive via
tauri-plugin-updater) pinned with default-features = false, features = ["rustls-tls"] — no OpenSSL system dep on Windows.
Session / SessionInput grow font_family: String threaded
through create / update / duplicate, MobaXterm import, and
backup restore. error.rs grows a dedicated XServerMissing
variant with code "xserver_missing".
Download
Same matrix as v0.15: portable .tar.xz per platform, plus MSI +
NSIS (Windows) and AppImage + deb (Linux) installers with minisign
signatures. Auto-update picks this up for anyone on v0.14+ via MSI /
AppImage.
Verify
sha256sum -c SHA256SUMS
Licence
GPL v3 (version 3 only). See LICENSE.
What's next (v0.19+)
- macOS code signing + notarisation so the auto-updater works there
too.
- SFTP drag-out (#28).
- russh 0.45 → 0.60 SSH client rewrite.