Skip to content

Remove SwiftUI from GhosttyKit - #180

Open
lawrencecchen wants to merge 15 commits into
mainfrom
feat-appkit-only
Open

Remove SwiftUI from GhosttyKit#180
lawrencecchen wants to merge 15 commits into
mainfrom
feat-appkit-only

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Aug 4, 2026

Copy link
Copy Markdown

Removes the remaining SwiftUI dependency from GhosttyKit test support and enables strict Swift 6 concurrency checking for the embedded framework.\n\nVerification: strict-concurrency macOS and iOS framework builds completed on the cmux fleet builder.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Make the macOS app AppKit-only and enforce strict Swift 6 concurrency across Apple targets. This removes SwiftUI and Shortcuts/App Intents, replaces remaining declarative views with native ones, and keeps automation via Apple events, Services, and CLI.

  • Refactors

    • macOS is now AppKit-only: terminal surfaces and container, split panes and drag handle, scroll/search/resize/secure-input/progress overlays, command palette, update UI (pill/popover/badge), About, error/configuration errors views, and window styles.
    • Removed Shortcuts/App Intents and SwiftUI transferables; kept AppleScript and Services; added AppKit drag-and-drop with UniformTypeIdentifiers; AppleScript commands bridge to the main actor with safe nonisolated overrides.
    • Enabled strict Swift 6 concurrency: project uses Swift 6 language mode (example swift-tools-version: 6.2 with .swiftLanguageMode(.v6) and upcoming features), added @MainActor/nonisolated/isolated deinits, replaced timers with tasks, used @preconcurrency imports and lightweight Sendable wrappers; README updated to reflect AppKit and automation.
    • iOS uses UIApplicationDelegate + scenes (UIKit) and builds under Swift 6.
  • Migration

    • Shortcuts support is removed. Migrate automations to AppleScript, macOS Services, or the CLI.
    • No configuration changes required.

Written for commit ea4fcc9. Summary will update on new commits.

Review in cubic

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 132 files, which is 32 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

鈿欙笍 Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 83ba8220-c02a-409f-8f9e-01ce7ba5c024

馃摜 Commits

Reviewing files that changed from the base of the PR and between 6dc6710 and ea4fcc9.

馃搾 Files selected for processing (132)
  • README.md
  • example/swift-vt-xcframework/Package.swift
  • macos/Ghostty.xcodeproj/project.pbxproj
  • macos/Sources/App/iOS/iOSApp.swift
  • macos/Sources/App/macOS/AppDelegate.swift
  • macos/Sources/App/macOS/main.swift
  • macos/Sources/Features/About/AboutController.swift
  • macos/Sources/Features/About/AboutView.swift
  • macos/Sources/Features/About/AboutViewModel.swift
  • macos/Sources/Features/About/CyclingIconView.swift
  • macos/Sources/Features/App Intents/CloseTerminalIntent.swift
  • macos/Sources/Features/App Intents/CommandPaletteIntent.swift
  • macos/Sources/Features/App Intents/Entities/CommandEntity.swift
  • macos/Sources/Features/App Intents/Entities/TerminalEntity.swift
  • macos/Sources/Features/App Intents/FocusTerminalIntent.swift
  • macos/Sources/Features/App Intents/GetTerminalDetailsIntent.swift
  • macos/Sources/Features/App Intents/GhosttyIntentError.swift
  • macos/Sources/Features/App Intents/InputIntent.swift
  • macos/Sources/Features/App Intents/IntentPermission.swift
  • macos/Sources/Features/App Intents/KeybindIntent.swift
  • macos/Sources/Features/App Intents/NewTerminalIntent.swift
  • macos/Sources/Features/App Intents/QuickTerminalIntent.swift
  • macos/Sources/Features/AppleScript/AppDelegate+AppleScript.swift
  • macos/Sources/Features/AppleScript/ScriptInputTextCommand.swift
  • macos/Sources/Features/AppleScript/ScriptKeyEventCommand.swift
  • macos/Sources/Features/AppleScript/ScriptMouseButtonCommand.swift
  • macos/Sources/Features/AppleScript/ScriptMousePosCommand.swift
  • macos/Sources/Features/AppleScript/ScriptMouseScrollCommand.swift
  • macos/Sources/Features/AppleScript/ScriptTab.swift
  • macos/Sources/Features/AppleScript/ScriptTerminal.swift
  • macos/Sources/Features/AppleScript/ScriptWindow.swift
  • macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationController.swift
  • macos/Sources/Features/ClipboardConfirmation/ClipboardConfirmationView.swift
  • macos/Sources/Features/Command Palette/CommandPalette.swift
  • macos/Sources/Features/Command Palette/TerminalCommandPalette.swift
  • macos/Sources/Features/Custom App Icon/AppIcon.swift
  • macos/Sources/Features/Custom App Icon/ColorizedGhosttyIconImage.swift
  • macos/Sources/Features/Custom App Icon/ColorizedGhosttyIconView.swift
  • macos/Sources/Features/Custom App Icon/DockTilePlugin.swift
  • macos/Sources/Features/Global Keybinds/GlobalEventTap.swift
  • macos/Sources/Features/QuickTerminal/QuickTerminalController.swift
  • macos/Sources/Features/QuickTerminal/QuickTerminalRestorableState.swift
  • macos/Sources/Features/QuickTerminal/QuickTerminalWindow.swift
  • macos/Sources/Features/Secure Input/SecureInput.swift
  • macos/Sources/Features/Secure Input/SecureInputOverlay.swift
  • macos/Sources/Features/Services/ServiceProvider.swift
  • macos/Sources/Features/Settings/ConfigurationErrorsController.swift
  • macos/Sources/Features/Settings/ConfigurationErrorsView.swift
  • macos/Sources/Features/Settings/SettingsView.swift
  • macos/Sources/Features/Splits/SplitTree.swift
  • macos/Sources/Features/Splits/SplitView.Divider.swift
  • macos/Sources/Features/Splits/SplitView.swift
  • macos/Sources/Features/Splits/TerminalSplitTreeView.swift
  • macos/Sources/Features/Terminal/BaseTerminalController.swift
  • macos/Sources/Features/Terminal/ErrorView.swift
  • macos/Sources/Features/Terminal/TerminalController.swift
  • macos/Sources/Features/Terminal/TerminalRestorable.swift
  • macos/Sources/Features/Terminal/TerminalTabColor.swift
  • macos/Sources/Features/Terminal/TerminalView.swift
  • macos/Sources/Features/Terminal/TerminalViewContainer.swift
  • macos/Sources/Features/Terminal/Window Styles/HiddenTitlebarTerminalWindow.swift
  • macos/Sources/Features/Terminal/Window Styles/TerminalWindow.swift
  • macos/Sources/Features/Terminal/Window Styles/TitlebarTabsTahoeTerminalWindow.swift
  • macos/Sources/Features/Terminal/Window Styles/TitlebarTabsVenturaTerminalWindow.swift
  • macos/Sources/Features/Terminal/Window Styles/TransparentTitlebarTerminalWindow.swift
  • macos/Sources/Features/Update/UpdateBadge.swift
  • macos/Sources/Features/Update/UpdateController.swift
  • macos/Sources/Features/Update/UpdateDelegate.swift
  • macos/Sources/Features/Update/UpdateDriver.swift
  • macos/Sources/Features/Update/UpdatePill.swift
  • macos/Sources/Features/Update/UpdatePopoverView.swift
  • macos/Sources/Features/Update/UpdateSimulator.swift
  • macos/Sources/Features/Update/UpdateViewModel.swift
  • macos/Sources/Ghostty/Ghostty.Action.swift
  • macos/Sources/Ghostty/Ghostty.App.swift
  • macos/Sources/Ghostty/Ghostty.ChildExitedMessage.swift
  • macos/Sources/Ghostty/Ghostty.Config.swift
  • macos/Sources/Ghostty/Ghostty.Input.swift
  • macos/Sources/Ghostty/Ghostty.Inspector.swift
  • macos/Sources/Ghostty/Ghostty.MenuShortcutManager.swift
  • macos/Sources/Ghostty/Ghostty.Shell.swift
  • macos/Sources/Ghostty/Ghostty.Surface.swift
  • macos/Sources/Ghostty/GhosttyDelegate.swift
  • macos/Sources/Ghostty/GhosttyPackage.swift
  • macos/Sources/Ghostty/GhosttyPackageMeta.swift
  • macos/Sources/Ghostty/Surface View/ChildExitedMessageBar.swift
  • macos/Sources/Ghostty/Surface View/InspectorView.swift
  • macos/Sources/Ghostty/Surface View/OSSurfaceView.swift
  • macos/Sources/Ghostty/Surface View/SurfaceContainerView.swift
  • macos/Sources/Ghostty/Surface View/SurfaceDragSource.swift
  • macos/Sources/Ghostty/Surface View/SurfaceGrabHandle.swift
  • macos/Sources/Ghostty/Surface View/SurfaceProgressBar.swift
  • macos/Sources/Ghostty/Surface View/SurfaceScrollView.swift
  • macos/Sources/Ghostty/Surface View/SurfaceSearchOverlay.swift
  • macos/Sources/Ghostty/Surface View/SurfaceStateOverlays.swift
  • macos/Sources/Ghostty/Surface View/SurfaceView+Transferable.swift
  • macos/Sources/Ghostty/Surface View/SurfaceView.swift
  • macos/Sources/Ghostty/Surface View/SurfaceView_AppKit.swift
  • macos/Sources/Ghostty/Surface View/SurfaceView_UIKit.swift
  • macos/Sources/Helpers/AnySuspendingClock.swift
  • macos/Sources/Helpers/Backport.swift
  • macos/Sources/Helpers/CrossKit.swift
  • macos/Sources/Helpers/Cursor.swift
  • macos/Sources/Helpers/ExpiringUndoManager.swift
  • macos/Sources/Helpers/Extensions/EventModifiers+Extension.swift
  • macos/Sources/Helpers/Extensions/KeyboardShortcut+Extension.swift
  • macos/Sources/Helpers/Extensions/NSAppearance+Extension.swift
  • macos/Sources/Helpers/Extensions/NSView+Extension.swift
  • macos/Sources/Helpers/Extensions/NSWindow+Extension.swift
  • macos/Sources/Helpers/Extensions/OSColor+Extension.swift
  • macos/Sources/Helpers/Extensions/OSPasteboard+Extension.swift
  • macos/Sources/Helpers/Extensions/Transferable+Extension.swift
  • macos/Sources/Helpers/Extensions/View+Extension.swift
  • macos/Sources/Helpers/Fullscreen.swift
  • macos/Sources/Helpers/HostingWindow.swift
  • macos/Sources/Helpers/MetalView.swift
  • macos/Sources/Helpers/NonDraggableHostingView.swift
  • macos/Sources/Helpers/TabGroupCloseCoordinator.swift
  • macos/Sources/Helpers/TabTitleEditor.swift
  • macos/Sources/Helpers/URLHoverBanner.swift
  • macos/Sources/Helpers/UncheckedSendable.swift
  • macos/Tests/Ghostty/ConfigTests.swift
  • macos/Tests/Helpers/TemporaryConfig.swift
  • macos/Tests/Helpers/TransferablePasteboardTests.swift
  • macos/Tests/NSScreenTests.swift
  • macos/Tests/QuickTerminalScreenStateCacheTests.swift
  • macos/Tests/Splits/SplitTreeTests.swift
  • macos/Tests/Terminal/TerminalViewContainerTests.swift
  • macos/Tests/Update/UpdateViewModelTests.swift
  • macos/build.nu
  • src/apprt/embedded.zig
  • src/apprt/gtk/css/style.css

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

鉂わ笍 Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant