A native macOS database client built with SwiftUI and Swift 6.
Connect to SQLite, PostgreSQL, MySQL/MariaDB, and DuckDB. Browse tables, run SQL, inspect schema — without paying $99/year for TablePlus.
Status: Work in progress. Core features work; App Store submission in progress.
![]() |
![]() |
![]() |
![]() |
- Four databases: SQLite · PostgreSQL · MySQL / MariaDB · DuckDB
- Table browser — virtualised grid, column sorting, filter bar, resizable columns
- SQL editor — Tree-sitter syntax highlighting, ⌘Return to run, multi-statement support, Safe Mode confirmation before DML
- Schema inspector — tables, views, routines, triggers, sequences, types, extensions
- DDL viewer — generated CREATE statement for any object
- Export — CSV, JSON, SQL INSERT
- Row editing — INSERT / UPDATE / DELETE with Safe Mode confirmation
- SSL/TLS — disable / prefer / require per connection (PostgreSQL + MySQL)
- Keychain storage — passwords never touch disk or SwiftData
- Dark mode — semantic colors throughout, no hardcoded values
- macOS 14 Sonoma or later
- Xcode 16+ (Swift 6)
Clone and open in Xcode:
git clone https://github.com/btctcn/SQLumen.git
open SQLumen.xcodeprojThe project bundles pre-built static libraries for all C dependencies — no Homebrew or system libraries required:
| Package | Contents |
|---|---|
CPostgres |
libpq 17 + OpenSSL 3 + libcurl + nghttp2/3 + ngtcp2 + libssh2 + brotli (arm64) |
CMysql |
libmysqlclient 9.6 (arm64) |
CDuckDB |
libduckdb dylib (arm64) |
TreeSitterSQL |
tree-sitter-sql grammar (local package) |
Swift packages resolve automatically via SPM:
- SwiftTreeSitter — incremental parsing
- StoreKit 2 (system framework)
Apple Silicon only. Universal Binary (x86_64) is not planned for v1.
Three-layer architecture — UI → Core → Drivers. Each layer only imports the layer below it.
UI Layer ConnectionManagerView · WorkspaceView · SQLEditorView · SchemaTreeView
Core Layer DriverFactory · SafeModeGuard · ExportService · DDLService · IAPService
Driver Layer SQLiteDriver · PostgreSQLDriver · MySQLDriver · DuckDBDriver
All drivers conform to DatabaseDriver (an Actor protocol). Core never imports a specific driver directly. Results stream via AsyncThrowingStream — no full result sets in memory.
See CLAUDE.md for full architecture docs, code conventions, and roadmap.
MIT — see LICENSE.



