A fast, keyboard-first PostgreSQL browser for macOS
- Native macOS app — SwiftUI + AppKit, no Electron
- Cell-level selection — click, shift-click, cmd-click, drag-select, arrow keys
- Keyboard-first — Cmd+P quick open, Cmd+Shift+F global search, Cmd+K AI query, Cmd+Shift+E SQL editor
- SQL editor — syntax highlighting, autocomplete, Cmd+Enter to execute
- Neon integration — connect to Neon databases directly via API key
- Connection string support — paste any
postgres://URI - AI-powered queries — describe what you want in natural language (Claude API)
- IDE-style tabs — preview tabs, double-click to pin, navigation history
- Column filtering — per-column ILIKE filters with debounced search
- Infinite scroll — lazy loading with automatic pagination
- Dark theme — Darker design with purple accents
| Shortcut | Action |
|---|---|
⌘P |
Quick open (fuzzy table search) |
⌘⇧F |
Global value search |
⌘K |
AI query (Claude API) |
⌘E |
SQL editor |
⌘B |
Table browser |
⌘N |
New connection |
⌘1-9 |
Open favourited/recent connection from home |
⌘⏎ |
Execute SQL |
⌘R |
Refresh current context |
⌘C |
Copy selected cells |
⌘A |
Select all loaded cells |
⌘H |
Go home |
⌘← |
Navigate back |
⌘+ / ⌘- |
Zoom in/out |
Arrow keys |
Navigate cells |
Shift+Arrows |
Extend selection |
⌘+Arrows |
Jump to edge in that direction |
⌘⇧+Arrows |
Extend selection to edge |
- macOS 14+
- Xcode 15+ (for building)
# Clone
git clone https://github.com/bendiknordeng/Drift.git
cd Drift
# Build and run
swift build
swift run Drift
# Or open in Xcode
open Package.swiftGitHub Actions builds an Apple Silicon installer package on every v* tag and from manual workflow dispatch:
git tag v0.1.0
git push origin v0.1.0The workflow signs, notarizes, staples, and publishes Drift-<version>-arm64.pkg to the GitHub Release. The package installs Drift.app into /Applications.
The release workflow requires these repository secrets:
| Secret | Description |
|---|---|
APPLE_DEVELOPER_ID_APP_CERTIFICATE_BASE64 |
Base64-encoded .p12 for the Developer ID Application certificate |
APPLE_DEVELOPER_ID_APP_CERTIFICATE_PASSWORD |
Password for the Developer ID Application .p12 |
APPLE_DEVELOPER_ID_INSTALLER_CERTIFICATE_BASE64 |
Base64-encoded .p12 for the Developer ID Installer certificate |
APPLE_DEVELOPER_ID_INSTALLER_CERTIFICATE_PASSWORD |
Password for the Developer ID Installer .p12 |
APPLE_DEVELOPER_ID_APP_IDENTITY |
Exact signing identity, e.g. Developer ID Application: Name (TEAMID) |
APPLE_DEVELOPER_ID_INSTALLER_IDENTITY |
Exact signing identity, e.g. Developer ID Installer: Name (TEAMID) |
APPLE_NOTARY_KEY_BASE64 |
Base64-encoded App Store Connect API private key .p8 |
APPLE_NOTARY_KEY_ID |
App Store Connect API key ID |
APPLE_NOTARY_ISSUER_ID |
App Store Connect issuer ID |
You can also build the package locally:
VERSION=0.1.0 BUILD_NUMBER=1 ARCH=arm64 scripts/package-macos.shThe local output is written to dist/. Without Developer ID identities, local packages are only ad-hoc signed and will trigger Gatekeeper warnings.
- Launch Drift
- Click New Connection or press
⌘N - Enter your PostgreSQL credentials, paste a connection string, or use Neon API key
- Browse your schemas and tables
Sources/
├── DriftApp.swift # App entry point
├── Theme.swift # Design tokens (colors, fonts, spacing)
├── Models/
│ └── Models.swift # Data models
├── Services/
│ ├── PostgresService.swift # PostgresNIO connection & queries
│ ├── NeonService.swift # Neon API integration
│ ├── LLMService.swift # Claude API for AI queries
│ ├── ConnectionStore.swift # UserDefaults persistence
│ └── KeyboardMonitor.swift # Global keyboard shortcuts
├── State/
│ └── AppState.swift # Observable app state
└── Views/
├── MainView.swift # Main layout + welcome screen
├── SidebarView.swift # Schema tree browser
├── DataGridView.swift # Grid container + filters
├── NSDataGridView.swift # NSTableView-based data grid
├── SQLEditorView.swift # SQL editor pane
├── SQLSyntaxEditor.swift # NSTextView with syntax highlighting
├── GlobalSearchView.swift # ⌘⇧F search overlay
├── CommandPalette.swift # ⌘P quick open
├── LLMChatView.swift # ⌘K AI chat
├── ConnectionSheet.swift # Connection dialog
├── SettingsView.swift # Settings overlay
└── StatusBarView.swift # Bottom status bar
Built with PostgresNIO for the PostgreSQL wire protocol.
MIT — see LICENSE for details.
