A native macOS terminal workspace for developers with column-based layout, tmux-backed persistence, and fast project switching
Built on libghostty for GPU-accelerated terminal rendering and Niri-style tiling layout
Features • Install • Keybindings • Development • Project Structure • License
- libghostty engine — GPU-accelerated rendering via Metal, the same core that powers Ghostty
- tmux-backed shell persistence — project shells and editors can be reattached instead of restarted
- Managed tool panes — open dedicated tabs for Neovim, lazygit, Yazi, Spotify, and other project commands inside the workspace
- Drag-and-drop file support — drop files onto the terminal to paste their path
- MesloLGS Nerd Font — bundled with full icon/glyph support out of the box
- Niri-style vertical columns — each tab opens in a scrollable column layout, not a fixed grid
- Absorb and expel panes — pull a neighboring column's tab into your column, or push one out
- Overview mode — zoom out to see all columns and panes at once
- Resizable columns — cycle through width presets with
⌘]/⌘[
- Auto-discovers projects from
~/Codeon launch - Per-project workspace restore — Blink remembers your tab/column layout and reconnects shell panes on relaunch
- Sidebar with git branch tracking — see the active branch for each project at a glance
- Shell-first tooling — run
nvim,lazygit,yazi,spotify, or any other CLI in project-scoped tabs without extra wrappers
- Theme presets — switch themes on the fly with a picker overlay
- Wallpapers with opacity and blur — set a background image behind your terminal
- Dark mode by default — designed for dark environments
brew install --cask bradjenn/tap/blinkBlink is not yet notarized. After installing manually, run:
xattr -d com.apple.quarantine /Applications/Blink.appOr right-click the app and select Open on first launch.
Requires macOS Sonoma+ and Apple Silicon (M1 or later).
Persistent shell/editor reattachment and in-app Neovim reuse work best with tmux, and Blink Neovim integration assumes nvim is installed.
All shortcuts use Cmd (⌘) as the modifier.
| Shortcut | Action |
|---|---|
⌘T |
New window |
⌘W |
Close window |
⌘H |
Focus left column |
⌘L |
Focus right column |
⌘J |
Focus down pane |
⌘K |
Focus up pane |
⇧⌘H |
Move column left |
⇧⌘L |
Move column right |
⇧⌘J |
Absorb from left |
⇧⌘K |
Absorb from right |
⇧⌘E |
Expel pane |
⌘O |
Overview |
⌘B |
Toggle sidebar |
⌘G |
Open lazygit |
⌘P |
Project switcher |
⇧⌘T |
Theme picker |
⌘, |
Settings |
⌘1–⌘9 |
Jump to window N |
| Layer | Technology |
|---|---|
| UI Framework | SwiftUI |
| Terminal Rendering | Metal via libghostty (GhosttyKit) |
| Shell Persistence | tmux |
| Window Chrome | AppKit (NSWindow, NSMenu) |
| Project Config | XcodeGen (project.yml) |
| Testing | XCTest |
- macOS 14 Sonoma or later
- Xcode 16+
- Apple Silicon Mac (M1 or later)
GhosttyKit.xcframeworkinFrameworks/tmuxfor persistent shell/editor sessionsnvimfor Blink's in-app editor flow
git clone https://github.com/bradjenn/blink.git
cd blink
open Blink.xcodeprojBuild and run from Xcode (⌘R), or create a release DMG:
./scripts/build-dmg.shBlink/
├── BApp.swift # App entry point, menu commands, keybindings
├── Assets.xcassets/ # App icon, colors, images
├── Resources/ # Bundled fonts, themes, wallpapers
├── Models/
│ ├── Column.swift # Column layout model
│ ├── Project.swift # Project definition
│ ├── Tab.swift # Tab state
│ └── WallpaperPreset.swift # Wallpaper configuration
├── Store/
│ ├── AppStore.swift # Central app state, tmux integration, tab/editor actions
│ └── GitStatus.swift # Git branch monitoring
├── Terminal/
│ ├── GhosttyApp.swift # libghostty lifecycle and config
│ ├── SurfaceManager.swift # Terminal surface allocation
│ ├── TerminalSurfaceView.swift # Metal-backed terminal view
│ ├── TerminalTheme.swift # Terminal color schemes
│ └── TerminalView.swift # Terminal container with chrome
├── Theme/
│ ├── Theme.swift # Theme protocol
│ ├── ThemeManager.swift # Theme loading and switching
│ └── Color+Hex.swift # Hex color parsing
├── Views/
│ ├── Shell.swift # Main workspace layout (columns, tabs, overview)
│ ├── Sidebar.swift # Project sidebar
│ ├── TabBar.swift # Tab strip
│ ├── StatusLine.swift # Bottom status bar
│ ├── ThemePicker.swift # Theme selection overlay
│ ├── SettingsPage.swift # Settings panel
│ ├── StartScreen.swift # Welcome / project picker
│ └── Settings/ # Settings sub-pages
├── Utilities/
│ ├── Constants.swift # Layout constants, defaults
│ └── WindowTitleBarConfigurator.swift
├── Frameworks/
│ └── GhosttyKit.xcframework # Pre-built libghostty binary
├── BTests/ # Unit tests
├── scripts/ # Build and packaging scripts
└── project.yml # XcodeGen project definition
