How notch traversal works on MacBooks
Blog

How notch traversal works on MacBooks

Kevin Purdy
2026.04.04
·Web·by 이호민/AI
#developer#macOS#notch#Tailscale#UI

Key Points

  • 1Tailscale encountered user confusion on macOS where its menu bar icon would disappear behind the MacBook notch, as Apple provides no native way to manage menu bar item visibility.
  • 2A temporary workaround involved using `occlusionState` to trigger a pop-up warning, notifying users when the icon was obscured, despite occasional false positives.
  • 3The primary fix is a new, full-featured windowed macOS application, now generally available, that offers enhanced functionality and reduces reliance on the problematic menu bar icon's visibility.

The provided text details Tailscale's journey to resolve visibility issues with its macOS menu bar icon, particularly on MacBook models featuring a display notch, and introduces a comprehensive new windowed application interface.

The core problem stemmed from Apple's design decision for the menu bar on 2021 MacBook Pro models and newer, which include a physical notch. When numerous application icons populate the menu bar, icons to the right of the notch are obscured, effectively disappearing without any notification, overflow mechanism, or user/developer control over their arrangement. This led to user confusion and bug reports, as users perceived the Tailscale application as having crashed or not started when its icon was hidden by the notch.

Tailscale initially implemented a "quirky" workaround to address this invisibility. The methodology leveraged the NSWindow.didChangeOcclusionStateNotification observer to monitor the visibility status of the statusItemButton.window, which contains the menu bar icon. Specifically, the Swift code snippet shows the use of NotificationCenter.default.addObserver to listen for this notification. Within the observer's closure, the statusItem.button?.window?.occlusionState property is checked. If occlusionState.contains(.visible) returns false, it indicates that the icon is occluded (i.e., not fully visible). Upon detection of occlusion, Tailscale would trigger a pop-up message to the user, such as "I am hidden but I can still speak," informing them of the icon's hidden status. While this provided a temporary solution and helped triage user issues, it was imperfect as it could be inadvertently triggered by other display events like opening/closing the MacBook lid or connecting/disconnecting external monitors.

The "actual fix" is the introduction of a new, persistent windowed macOS application interface, which runs alongside the existing menu bar app rather than replacing it. This windowed client, generally available starting with version 1.96.2, significantly enhances user accessibility and control. It can be launched directly from the Dock or via Spotlight search, providing a more robust and visible presence. The features of this new interface include:

  • A searchable list of tailnet devices, displaying their connection status.
  • Functionality to easily ping devices, copy their IP addresses, and send files via Taildrop.
  • Convenient access to exit nodes, including a searchable interface and recommendations based on latency, performance, and location.
  • A critical error indicator displayed as a red dot on the Dock icon.
  • A "mini player" mode that minimizes the application to essential controls.
  • An integrated product tour upon initial installation or update.

This new windowed interface largely renders the occlusionState-based workaround unnecessary, except in specific scenarios where users opt to hide the Dock icon. Tailscale plans to develop a comparable user interface for Windows devices and emphasizes its commitment to combining functionality with user experience.