Skip to content

Releases: vibecook-dev/ghosttea

Ghosttea 0.12.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 17:44
v0.12.0
a0d657d

Ghosttea is a native Ghostty-powered terminal runtime and desktop experience for Electron applications.

This release publishes 10 npm packages and 7 Rust crates under one shared version.

Added

  • Terminal frames carry link targets in a new TRF1 section 12: explicit OSC 8
    destinations, plus URLs and file or folder paths matched in the visible text,
    each with the viewport cell spans it covers, including wrapped and Unicode
    text. OSC 8 destinations take precedence over URL-looking labels.
    @vibecook/ghosttea-frame exports decodeLinkTargets with the
    TerminalLink and TerminalLinkSpan types.
  • React hosts that supply platform.openExternal(url) get modifier links:
    holding Command on macOS, or Ctrl elsewhere, underlines the link under the
    pointer, and a click opens it. A successful click is consumed before TUI
    mouse reporting; releasing the modifier, window blur, dragging, and changing
    terminal output cancel an in-progress click. The underline overlay works with
    both WebGPU and Canvas rendering. The runtime also exposes
    links(sessionHandle), openLink(uri), and a link-targets event.
  • Path matching recognizes absolute paths, ~/, ./, ../, $HOME/, and
    $PWD/ prefixes, quoted paths containing spaces, the ~/… directory in
    Codex's footer, and relative source references such as src/main.rs:42:10
    or ../shared/lib.rs#L42. A line or column suffix is highlighted but is not
    part of the opened file:// URL. Relative paths resolve against the shell's
    latest OSC 7 working directory, falling back to the session's launch
    directory, and ~ against the launch environment's HOME (or
    USERPROFILE). Embedders driving TerminalModel directly supply that
    context with TerminalModel::set_link_context.
  • Electron hosts open links through installGhostteaLinkHost from
    @vibecook/ghosttea-electron/main and createGhostteaLinkBridge from
    @vibecook/ghosttea-electron/preload. The main-process handler rejects
    subframe senders and any sender its trust callback refuses, and both sides
    validate destinations with the new terminalLinkUrl from
    @vibecook/ghosttea-protocol, which accepts only http, https, mailto,
    ftp, ftps, and absolute file:// URLs. File links open in the operating
    system's default application.
  • link-url is now applied configuration, default true. link-url = false
    turns off automatic URL and path matches while OSC 8 links stay clickable,
    an empty value restores the default, and an invalid value is diagnosed as an
    error. Clients receive it as the optional renderer.linkUrl.
  • GhostteaWorkspace accepts splitSizing. "halves", the default, splits
    the active pane in two; "equal" rebalances the row or column that receives
    the new pane so its members share it equally, counting a perpendicular
    subtree as one member that keeps its own ratios. SplitSizing is exported
    from @vibecook/ghosttea-react/workspace.
  • GhostteaWorkspacePlatform.backdropBlur accepts an optional
    GhostteaBackdropBlurBridge (load, save, subscribe), exported from
    @vibecook/ghosttea-react/workspace. When a host supplies one, Appearance
    settings shows a Background blur switch. The desktop application uses it for
    a native macOS window blur that is on by default, persisted per profile, and
    applied to every open window as soon as it changes.

Changed

  • Local sessions report their launch working directory as cwd from creation,
    instead of null until the shell reports one with OSC 7. Terminal metadata
    falls back to it the same way.

Fixed

  • Rapid cross-pane activation no longer lets a stale request move focus. A
    workspace keeps one pending animation-frame focus request, replaces it on the
    next activation, and cancels it when the workspace deactivates or unmounts.
  • A pane remounted by a split reclaims the resize seat it held. A split
    re-parents the active pane's surface under a new view id, and a local
    session's legacy control-changed frame cannot report an empty seat, so the
    split pane stopped following resizes. The runtime now clears its cached
    controller when one of its own views detaches while holding the seat, and
    offers the seat to the session's remaining views.
  • A pane hidden by a zoom resizes again when the zoom lifts. Releasing control
    no longer clears the view's control epoch: the daemon had kept the seat all
    along, and the missing epoch made the reclaim fail the
    one-claim-per-attachment guard.
  • WebGPU rendering extends edge-cell backgrounds through the canvas padding and
    any fractional trailing cell. Edges come from the committed frame's grid
    rather than the canvas size, and the original rectangle is expanded rather
    than overlaid, so translucent backgrounds are not blended twice.
  • The prebuilt ghosttead daemons build against rustls 0.23.45, which fixes
    RUSTSEC-2026-0285 (TLS 1.3 handshake messages accepted across encryption
    level boundaries) in the TLS stack under the Truffle mesh transport, and
    against chacha20 0.10.2 in place of the yanked 0.10.1. Crates.io consumers
    resolve their own versions.

Compatibility

  • This is a 0.x minor release because adding public fields to Rust structs is
    source-breaking for downstream exhaustive struct literals, the same reason
    0.10.0 was one. ghosttea_core::frame::TextSnapshot.links and
    ghosttea_config::RendererConfig.link_url are new. Update such literals to
    set them; links: None encodes a frame without link targets.
  • The wire stays compatible. Section 12 is additive and TRF1 remains version
    1: the 0.11.x decoders (TypeScript decodeFrame, the React render worker,
    and Swift RetainedTRF1State) select sections by kind and skip it.
    Configuration JSON stays compatible in both directions: link_url has a
    serde default of true when linkUrl is absent, and 0.11.x clients
    validate only the renderer fields they know.
  • Link targets need a 0.12.0 daemon. Producers without link metadata,
    including older daemons and logical replicas, omit section 12, and their
    terminals show no links.
  • platform.openExternal is optional. Without it the runtime reports no
    links, so they never surface: nothing is underlined or opened.

Packages

npm:

  • @vibecook/ghosttea
  • @vibecook/ghosttea-client
  • @vibecook/ghosttea-electron
  • @vibecook/ghosttea-frame
  • @vibecook/ghosttea-native-tabs
  • @vibecook/ghosttea-protocol
  • @vibecook/ghosttea-react
  • @vibecook/ghosttead
  • @vibecook/ghosttead-darwin-arm64
  • @vibecook/ghosttead-win32-x64

crates.io:

  • ghosttea
  • ghosttea-config
  • ghosttea-core
  • ghosttea-text
  • ghosttea-truffle
  • ghosttea-vt
  • ghosttea-vt-sys

Publish order is a dependency order rather than this one; it is recorded in PUBLISHING.md.

Requirements

Node 22+ and Rust 1.88+. Native Ghostty VT artifacts are published for aarch64-apple-darwin and x86_64-pc-windows-msvc.

GhostteaAppleNative xcframework a5fa7ef2afc2

Choose a tag to compare

CI-built and attested from f17a0ff.

Ghosttea 0.11.1

Choose a tag to compare

@github-actions github-actions released this 24 Aug 04:21
v0.11.1
b144449

Ghosttea is a native Ghostty-powered terminal runtime and desktop experience for Electron applications.

This release publishes 10 npm packages and 7 Rust crates under one shared version.

Added

  • Routed React hosts can supply getSession for the existing frame-driven
    metadata cadence. Routed frame commits now coalesce exact-summary reads at
    200 ms, prevent overlapping reads for a session, and reject stale completions
    after a newer event, registration, exit, or removal.
  • @vibecook/ghosttea-react exports RoutedSessionEvent and
    applySessionEvent for full-summary, activity, exit, and removal projection.
    Activity and exit use the same CustomEvent ordering as the port transport,
    exit events preserve every termination fact, and removal never terminates or
    invents exit evidence.
  • Routed hosts can opt into strict inbound extension messages with
    onExtensionMessage. Only unknown tagged objects received after control-leg
    authentication reach the callback, together with authenticated cell and
    connection-set identity; malformed, known-invalid, wrong-leg, binary,
    oversized, and pre-authentication messages retain their protocol close.
  • The repository includes a private Electron compositor pipeline lab for
    comparing scene/view architectures and exercising renderer scheduling under
    controlled workloads.

Compatibility

  • All new routed host members are optional. Omitting them preserves 0.11.0
    behavior, and the existing port-pair transport and Ghosttea wire contracts
    are unchanged.

Packages

npm:

  • @vibecook/ghosttea
  • @vibecook/ghosttea-client
  • @vibecook/ghosttea-electron
  • @vibecook/ghosttea-frame
  • @vibecook/ghosttea-native-tabs
  • @vibecook/ghosttea-protocol
  • @vibecook/ghosttea-react
  • @vibecook/ghosttead
  • @vibecook/ghosttead-darwin-arm64
  • @vibecook/ghosttead-win32-x64

crates.io:

  • ghosttea
  • ghosttea-config
  • ghosttea-core
  • ghosttea-text
  • ghosttea-truffle
  • ghosttea-vt
  • ghosttea-vt-sys

Publish order is a dependency order rather than this one; it is recorded in PUBLISHING.md.

Requirements

Node 22+ and Rust 1.88+. Native Ghostty VT artifacts are published for aarch64-apple-darwin and x86_64-pc-windows-msvc.

GhostteaAppleNative xcframework 3f583406767d

Choose a tag to compare

CI-built and attested from 5337bcf.

Ghosttea 0.11.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 07:58
v0.11.0
df23aff

Ghosttea is a native Ghostty-powered terminal runtime and desktop experience for Electron applications.

This release publishes 10 npm packages and 7 Rust crates under one shared version.

Added

  • ghosttea::ServiceHandle::sessions now yields a cloneable in-process
    ServiceSessions capability over the exact registry and frame hub served by
    the legacy sockets. It supports stable session snapshots and lookup,
    policy-identical spawning, and typed created/exited/removed lifecycle events.
    Session::spawn_with_private_env_prefixes is public for hosts that must
    construct a session outside the service policy path.
  • @vibecook/ghosttea-protocol exports the TPv3 routed-terminal contract:
    grants and tickets, direction-checked tagged messages, RFC 8785 canonical
    grant input, close classification, scene ordering, CRC-32C, and binary
    presentation-envelope framing. A compatibility verifier covers the complete
    published VibeField TP fixture corpus.
  • @vibecook/ghosttea-react gains an additive transport: "routed" mode.
    Main owns activation authority, the pooled control WebSockets, grant renewal,
    independent presentation/input leases, recovery, demand, and geometry CAS;
    the render worker owns pooled frames WebSockets, envelope-before-apply and
    inner-TRF identity validation, cumulative byte credits, bounded seed/catch-up
    staging, atomic swaps, and negotiated resume.
  • Terminal surfaces can remove input locally with inputPolicy="read-only" or
    readWrite={false}, apply themes per view, and read monotonic production
    rendering counters without opening a sample window or draining the GPU.
    Workspace divider drags now expose a throttled live-update/final-commit seam,
    and pane zoom preserves mounted canvases and activation identity.

Fixed

  • Focus is now scheduling state only. It cannot claim resize authority, the
    runtime refuses resize calls without an explicit controller request, and a
    controlsResize={false} surface skips observer-driven resize calls as well.

Compatibility

  • The existing UDS control/frame wire and port-pair renderer transport are
    unchanged; port-pair remains the default rollback path.
  • The published TPv3 T1 contract has no terminal-input message tag. Routed
    input therefore remains closed unless a host supplies an encoder for an
    extension negotiated with its cell, instead of Ghosttea inventing an
    incompatible wire verb.

Packages

npm:

  • @vibecook/ghosttea
  • @vibecook/ghosttea-client
  • @vibecook/ghosttea-electron
  • @vibecook/ghosttea-frame
  • @vibecook/ghosttea-native-tabs
  • @vibecook/ghosttea-protocol
  • @vibecook/ghosttea-react
  • @vibecook/ghosttead
  • @vibecook/ghosttead-darwin-arm64
  • @vibecook/ghosttead-win32-x64

crates.io:

  • ghosttea
  • ghosttea-config
  • ghosttea-core
  • ghosttea-text
  • ghosttea-truffle
  • ghosttea-vt
  • ghosttea-vt-sys

Publish order is a dependency order rather than this one; it is recorded in PUBLISHING.md.

Requirements

Node 22+ and Rust 1.88+. Native Ghostty VT artifacts are published for aarch64-apple-darwin and x86_64-pc-windows-msvc.

GhostteaAppleNative xcframework 882149c68985

Choose a tag to compare

CI-built and attested from 69fe965.

Ghosttea 0.10.1

Choose a tag to compare

@github-actions github-actions released this 18 Aug 18:14
v0.10.1
ad97fdb

Ghosttea is a native Ghostty-powered terminal runtime and desktop experience for Electron applications.

This release publishes 10 npm packages and 7 Rust crates under one shared version.

Fixed

  • Windows inherited-session environment filtering now matches the operating
    system's ASCII-case-insensitive key lookup. Case variants of Ghosttea and
    Terminald built-ins, built-in private prefixes, and host-provided private
    prefixes are removed before a ConPTY child starts; Unix environment names
    remain byte-sensitive.

Validation

  • Windows process-tree custody tests now wait on handles to the exact process
    objects instead of polling reusable numeric PIDs. The ordinary Windows
    release gate therefore proves job-object teardown without PID-reuse false
    positives; this hardening changes the witness, not runtime custody behavior.

Packages

npm:

  • @vibecook/ghosttea
  • @vibecook/ghosttea-client
  • @vibecook/ghosttea-electron
  • @vibecook/ghosttea-frame
  • @vibecook/ghosttea-native-tabs
  • @vibecook/ghosttea-protocol
  • @vibecook/ghosttea-react
  • @vibecook/ghosttead
  • @vibecook/ghosttead-darwin-arm64
  • @vibecook/ghosttead-win32-x64

crates.io:

  • ghosttea
  • ghosttea-config
  • ghosttea-core
  • ghosttea-text
  • ghosttea-truffle
  • ghosttea-vt
  • ghosttea-vt-sys

Publish order is a dependency order rather than this one; it is recorded in PUBLISHING.md.

Requirements

Node 22+ and Rust 1.88+. Native Ghostty VT artifacts are published for aarch64-apple-darwin and x86_64-pc-windows-msvc.

Ghosttea 0.10.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 11:16
v0.10.0
43361e5

Ghosttea is a native Ghostty-powered terminal runtime and desktop experience for Electron applications.

This release publishes 10 npm packages and 7 Rust crates under one shared version.

Added

  • Control protocol 1.15 adds an optional per-session scrollbackBytes cap.
    Zero disables scrollback, omission retains the daemon default, values must be
    non-negative JavaScript safe integers, and the effective local cap is echoed
    in session summaries. Clients requesting an override reject daemons older
    than 1.15 instead of pretending an unknown field was enforced.
  • Control protocol 1.16 adds stable structured request failures. Both browser
    and Node clients now reject with GhostteaRequestError, preserving the
    byte-identical legacy message while exposing stage, code, and osError
    when the daemon can classify them. PTY spawn failures carry typed operating
    system errors; portable-pty open failures honestly identify only the
    openpty stage because that dependency has already stringified its errno.
  • ghosttea-vt now exposes read-only packed-mode lookup, pending-wrap state,
    whole-screen and state-only recovery fragments, complete saved cursors per
    primary/alternate screen, sparse screen-selected row/state snapshots, and
    URI plus explicit/implicit hyperlink identity. These APIs recover inactive
    screens without activating them and preserve hyperlink groups across Ghostty
    page migrations.

Changed

  • TerminalSnapshot now carries row wrap/semantic metadata and URI hyperlink
    runs. TerminalScreenSnapshot and the new saved-cursor/state types retain
    cursor style, protection, pending wrap, charset, keyboard, prompt, viewport,
    and hyperlink state needed for lossless replacement-terminal recovery.
  • Ghostty VT artifacts are content-addressed by the pinned upstream commit,
    exact checksum-locked patch set, and build recipe. Bundles carry those source
    patches, and release tags promote the exact reviewed macOS and Windows
    candidates instead of rebuilding different non-reproducible bytes behind
    recorded checksums. macOS builds still pin Zig scheduling, target CPU, and
    the exact Xcode archive normalizer to minimize host and runner-toolchain drift.

Compatibility

  • This is a 0.x minor release because adding public fields to Rust snapshot
    structs is source-breaking for downstream exhaustive struct literals. Update
    such literals to initialize TerminalSnapshot.row_metadata and
    TerminalSnapshot.hyperlinks, or use defaults/construction helpers.
  • Older daemons remain usable when no per-session scrollback override is
    requested. Their missing session-summary field is accepted; remote replicas
    report scrollbackBytes: null. Existing error message and Error.name
    behavior is unchanged, while callers may opt into the structured metadata.

Packages

npm:

  • @vibecook/ghosttea
  • @vibecook/ghosttea-client
  • @vibecook/ghosttea-electron
  • @vibecook/ghosttea-frame
  • @vibecook/ghosttea-native-tabs
  • @vibecook/ghosttea-protocol
  • @vibecook/ghosttea-react
  • @vibecook/ghosttead
  • @vibecook/ghosttead-darwin-arm64
  • @vibecook/ghosttead-win32-x64

crates.io:

  • ghosttea
  • ghosttea-config
  • ghosttea-core
  • ghosttea-text
  • ghosttea-truffle
  • ghosttea-vt
  • ghosttea-vt-sys

Publish order is a dependency order rather than this one; it is recorded in PUBLISHING.md.

Requirements

Node 22+ and Rust 1.88+. Native Ghostty VT artifacts are published for aarch64-apple-darwin and x86_64-pc-windows-msvc.

ghostty-vt-222a4b1b224b

Choose a tag to compare

@github-actions github-actions released this 18 Aug 09:16
ghostty-vt-222a4b1b224b

GhostteaAppleNative xcframework 881e968585c0

Choose a tag to compare

CI-built and attested from 52f430a.