Skip to content

macOS: changing the split tree makes scrollbars disappear #9444

@mitchellh

Description

@mitchellh

Discussed in #9442

Originally posted by danielwe November 1, 2025

Issue Description

On macOS, adding or removing splits sometimes causes the scrollbar to disappear. The reason is that the SurfaceScrollView instance is not persistent, it's replaced every time the split tree is rebuilt, so the scroll view state is lost (unless the split reconfiguration caused a resize that triggered a scrollbar update from the core).

I took a brief look at making the SurfaceScrollView the persistent, observed view instead of the SurfaceView, but I concluded this is better left to someone who knows SwiftUI better than me.

Screen.Recording.2025-11-01.at.11.15.24.mov

Expected Behavior

Keep the scrollbar.

Actual Behavior

Lose the scrollbar.

Reproduction Steps

  1. Open System Settings and set Appearance -> Show scroll bars -> Always (not strictly necessary, but makes the issue easier to observe)
  2. Open Ghostty
  3. Create a split
  4. Fill one of the surfaces with enough content to create a scrollbar
  5. Move to the other surface, and create another split within it
    • The point here is to change the split tree in a way that does not resize the surface with the scrollbar

Ghostty Logs

Timestamp                       Thread     Type        Activity             PID    TTL
2025-11-01 11:21:05.506932-0700 0x56258df  Info        0x0                  3504   0    ghostty: [com.mitchellh.ghostty:ghostty] known but unimplemented action action=38
2025-11-01 11:21:05.508825-0700 0x56258df  Info        0x0                  3504   0    ghostty: [com.mitchellh.ghostty:io_exec] found Ghostty resources dir: /Applications/Ghostty.app/Contents/Resources/ghostty
2025-11-01 11:21:05.508897-0700 0x56258df  Info        0x0                  3504   0    ghostty: [com.mitchellh.ghostty:io_exec] shell integration automatically injected shell=.zsh
2025-11-01 11:21:05.509089-0700 0x56258df  Info        0x0                  3504   0    ghostty: [com.mitchellh.ghostty:ghostty] known but unimplemented action action=20
2025-11-01 11:21:05.515243-0700 0x5626646  Info        0x0                  3504   0    ghostty: [com.mitchellh.ghostty:io_exec] started subcommand path=/usr/bin/login pid=3713

Ghostty Version

Ghostty 1.3.0-main+765ee6842

Version
  - version: 1.3.0-main+765ee6842
  - channel: tip
Build Config
  - Zig version   : 0.15.2
  - build mode    : .ReleaseFast
  - app runtime   : .none
  - font engine   : .coretext
  - renderer      : renderer.generic.Renderer(renderer.Metal)
  - libxev        : kqueue

OS Version Information

macOS 26.0.1 (Tahoe)

(Linux only) Display Server

None

(Linux only) Desktop Environment/Window Manager

No response

Minimal Ghostty Configuration

# no config needed

Additional Relevant Configuration

No response

I acknowledge that:

  • I have reviewed the FAQ and confirm that my issue is NOT among them.
  • I have searched the Ghostty repository (both open and closed Discussions and Issues) and confirm this is not a duplicate of an existing issue or discussion.
  • I have checked the "Preview" tab on all text fields to ensure that everything looks right, and have wrapped all configuration and code in code blocks with a group of three backticks (```) on separate lines.

Metadata

Metadata

Assignees

No one assigned

    Labels

    guiGUI or app issue regardless of platform (i.e. Swift, GTK)os/macos

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions