[Paneflow 0.8.0](https://github.com/arthjean/paneflow/releases/tag/v0.8.0) now uses `libghostty-vt` for every new terminal session in standard Linux builds. With `terminal.backend` left on `auto`, Linux x86_64 and ARM64 builds select Ghostty by default.

This changes the engine that interprets VT data and maintains terminal state, not the workspace around it. Paneflow still owns the PTY, process lifecycle, GPUI renderer, panes, sessions, agent state, diffs, and persistence. macOS and Windows continue to use Alacritty.

<figure className="my-8 w-full">
  <img
    src="/images/libghostty-linux.webp"
    alt="Ghostty and Paneflow app icons standing together in a blue and lavender landscape"
    width={1920}
    height={1080}
    className="h-auto w-full rounded-lg border border-surface-border"
  />
</figure>

## Ghostty joins Paneflow at the VT engine layer

Until Paneflow 0.7.x, terminal sessions were built around the Rust crate `alacritty_terminal` 0.26. That engine handled escape sequences, the grid, scrollback, input modes, search, and part of the rendering model.

The new Linux path uses [`libghostty-vt`](https://github.com/ghostty-org/ghostty/blob/ae52f97dcac558735cfa916ea3965f247e5c6e9e/README.md#cross-platform-libghostty-for-embeddable-terminals), Ghostty's embeddable terminal engine. It parses VT sequences, tracks cursor and screen state, handles graphemes, wrapping and reflow, encodes keyboard and mouse input, and exposes incremental render state to a host application.

Paneflow does not embed the Ghostty app, its GTK interface, or its renderer. Ghostty provides the terminal core. Paneflow turns that state into owned Rust snapshots and paints them through its existing GPUI renderer, so the product interface and multi-agent workflow stay under Paneflow's control.

## A Paneflow boundary now separates the engine from the product

Replacing the parser was only part of the work. Alacritty types had reached into the PTY loop, rendering, search, selection, hyperlinks, scrollback restoration, and session lifecycle. Swapping one dependency for another without first removing that coupling would have moved the same problem to a new engine.

Paneflow now exposes its own terminal-session boundary. Both Alacritty and Ghostty produce the same Paneflow commands, events, modes, search results, and render snapshots. The renderer no longer needs to know which engine created a cell.

That boundary is the durable part of the migration. Linux can move first without changing macOS or Windows, and a future engine upgrade no longer requires the rest of the app to adopt its internal types.

## The unstable C API stays inside a small Rust wrapper

Ghostty describes `libghostty-vt` as functionally mature while its API signatures are still changing. Paneflow therefore pins the exact Ghostty commit [`ae52f97d`](https://github.com/ghostty-org/ghostty/tree/ae52f97dcac558735cfa916ea3965f247e5c6e9e), its C header, generated bindings, Zig version, build configuration, and archive checksum.

The raw C ABI is isolated in one `-sys` crate. A second safe wrapper owns every native handle, validates the API version and C layouts before creating a terminal, catches callback panics, and releases Ghostty allocations with the matching allocator.

The ownership rule matters most during rendering. `libghostty-vt` exposes borrowed rows and cells that a later terminal mutation can invalidate. Paneflow copies the required data while the terminal is locked, then gives GPUI an owned Rust snapshot. No C pointer or borrowed slice survives the lock or a frame boundary.

This costs more maintenance than following an unpinned dependency: every Ghostty upgrade must regenerate and review the header, bindings, static archives, checksums, symbols, and licenses for both Linux architectures. That cost is explicit and contained instead of being paid as runtime uncertainty.

## Alacritty remains the differential reference and rollback

The intended user-visible result is continuity. Shells, coding agents, full-screen TUIs, search, selection, clipboard operations, scrollback, OSC events, resize, reflow, and process shutdown still need to behave as they did before the engine changed.

Paneflow feeds the same deterministic VT streams to Alacritty and Ghostty in several chunk sizes, then compares their normalized snapshots and ordered events. Separate fuzz targets exercise malformed and truncated sequences, input encoding, resize and reflow, and boundaries where a sequence arrives across multiple PTY reads. Package checks also reject a Linux artifact if it links to a runtime `libghostty.so`, carries the wrong build identity, or omits the reviewed native notices.

Alacritty has not been removed. To use it for newly created Linux sessions, set the backend in `paneflow.json`:

```json
{
  "terminal": {
    "backend": "alacritty"
  }
}
```

An active session never changes engine in memory. Close it and open a new pane after changing the setting. `auto` selects Ghostty in standard Linux builds and Alacritty on macOS, Windows, or Linux builds compiled with `--no-default-features`.

## Static linkage, with no Ghostty installation required

The official Linux packages contain a pinned static `libghostty-vt` archive for x86_64 or ARM64. Users do not need Ghostty, Zig, or a shared library installed on the machine. A normal `cargo build` from a clean Paneflow checkout also uses the verified bundled archive and never downloads native source during `build.rs`.

Linux is the first platform for this backend. Extending it to Windows or macOS, and eventually removing Alacritty, are separate decisions. Paneflow 0.8.0 keeps the blast radius smaller: one new default, two supported engines, and an immediate rollback for new sessions.

Update to Paneflow 0.8.0, open a fresh pane, and run the shell, TUI, or coding agent you normally use. If a terminal behavior regresses, switch new sessions back to Alacritty and report the command, Linux distribution, and whether the session ran under Wayland or X11.