SQLite · MySQL · PostgreSQL — all in one ~10 MB app that opens before you let go of the mouse.
No Electron. No JVM. No Python. Just pure SwiftUI + AppKit.
Install · Features · Why Querly · Roadmap · Contributing
brew install --cask quietkit/querly/querly⚡️ Stable. Querly is actively developed and dogfooded daily on real production databases. As with any database client, prefer read-only credentials for production and review the SQL preview before committing writes — that's exactly what Safe Mode is built for. See Production Readiness for the full, honest breakdown.
| Querly | TablePlus | DBeaver | DataGrip | |
|---|---|---|---|---|
| Price | Free, OSS (MIT) | $99 | Free / paid Pro | $99/yr |
| Native macOS | ✅ SwiftUI + AppKit | ✅ AppKit | ❌ Eclipse RCP | ❌ JetBrains/Java |
| Startup time | ~0.5 s | ~0.5 s | 4–8 s | 6–12 s |
| Bundle size | ~10 MB | ~15 MB | ~250 MB | ~700 MB |
| Open source | ✅ MIT | ❌ | ✅ (CE, Apache 2.0) | ❌ |
| Free for commercial use | ✅ | ❌ | ✅ | ❌ |
| No tab / connection limits | ✅ | ❌ (free tier capped) | ✅ | ❌ |
| Audit & fork the source | ✅ | ❌ | ✅ | ❌ |
| Single binary, no runtime / JVM | ✅ | ✅ | ❌ | ❌ |
| Zero telemetry · works fully offline | ✅ | ❌ | partial | ❌ |
| No account / sign-in required | ✅ | ✅ | ✅ | ❌ |
| Credentials stored locally (encrypted) | ✅ AES-256-GCM | ✅ | ✅ | ✅ |
| SQLite | ✅ | ✅ | ✅ | ✅ |
| MySQL | ✅ (libmysqlclient) | ✅ | ✅ | ✅ |
| PostgreSQL | ✅ (pure-Swift wire protocol) | ✅ | ✅ | ✅ |
| Inline cell editing | ✅ | ✅ | ✅ | ✅ |
| Unified pending-changes preview | ✅ | ✅ | partial | ✅ |
| SQL editor with autocomplete | ✅ | ✅ | ✅ | ✅ |
| Tabs persist per connection / database | ✅ | ✅ | partial | ✅ |
| SSH tunnel | ✅ | ✅ | ✅ | ✅ |
| Visual pending-changes staging | ✅ (native grid UI) | partial | partial | partial |
Note: Performance metrics (Startup time, Bundle size) are benchmarked on a baseline macOS environment using production release builds. Competitor figures are approximate, independently observed on the same baseline machine, and may vary by version/configuration. Actual sizes and cold-start latencies may vary depending on system hardware configuration, architecture, and disk I/O throughput.
Trademarks: TablePlus, DBeaver, and DataGrip are trademarks of their respective owners. This comparison is independent and unaffiliated.
The wedge: The free, open-source pick most developers reach for is DBeaver — genuinely powerful and cross-platform, built on the JVM/Eclipse for maximum reach across every OS. Querly makes the opposite bet: one platform, done right. Because it's native SwiftUI + AppKit, it cold-starts in ~0.5s, ships as a ~10 MB binary with no runtime to warm up, and behaves like the Mac apps you already love — keyboard-first, instant, and at home in macOS. TablePlus delivers that same native polish but is paid & closed; DataGrip is neither free nor native. Querly is the only one that's native and free and open-source and unlimited — the free-and-open experience, built exclusively for your Mac.
- SQLite via the system
SQLite3framework - MySQL via bundled
libmysqlclient - PostgreSQL via a from-scratch pure-Swift wire protocol — TLS, MD5 + SCRAM auth, no
libpq
- Unified pending-changes drawer — inserts, updates, deletes & duplicates stage in one place. Green tint = insert, red strikethrough = delete, orange = edit. Preview the combined SQL, then
⌘Scommits the whole batch atomically. - Inline cell editing with auto-opening calendar pickers for date/time columns and a JSON tree / hex viewer for complex values.
- Row inspector (
Space) — a full-height, editable view of every column with per-field copy buttons and a Save / Preview footer. - 🛡️ Safe Mode — previews every mutation as SQL before it touches the server. Per-connection toggle, built for staging & production.
- Command palettes — fuzzy-jump to any table (
⌘P), database (⌘⇧K), recent table (⌘E), or column (⌘⇧J). - Full SQL editor — syntax highlighting, schema-aware autocomplete (tables, columns,
JOINqualifiers),⌘↩to run,⇧⌥Fto format,EXPLAIN, and ⏹ to stop a running query. - Filter chips — stack AND-conditions, save named filter sets per table, or drop into raw-SQL
WHEREmode.
- Per-connection tabs that survive everything — switch databases, switch connections, quit, come back tomorrow. Your tabs and their order are exactly where you left them.
- Bulk operations — bulk edit, bulk delete, duplicate, and INSERT-statement export.
- Per-connection accent color + environment badge (Local / Staging / Production) so prod windows are visually unmistakable.
- Tasteful theming — System / Light / Dark / WebStorm, adjustable font size, configurable
⌘Crow format (TSV / CSV / INSERT / JSON), and rebindable shortcuts.
- Zero telemetry, no phone-home, no account. Querly works fully offline and never sends your usage, schemas, or queries anywhere.
- Credentials never leave your Mac — stored in an AES-256-GCM encrypted file under
~/Library/Application Support, with a compiler-gated path to the system Keychain once the app is signed.
| Action | Shortcut | Action | Shortcut | |
|---|---|---|---|---|
| Jump to table | ⌘P |
Run statement | ⌘↩ |
|
| Jump to database | ⌘⇧K |
Format SQL | ⇧⌥F |
|
| Recent tables | ⌘E |
Find / replace | ⌘F |
|
| Jump to column | ⌘⇧J |
Commit pending changes | ⌘S |
|
| Row inspector | Space |
Preview pending SQL | ⌘⇧P |
|
| Show Table Data | ⌃⌘[ |
Show Table Structure | ⌃⌘] |
|
| Previous / Next tab | ⌥⌘← / ⌥⌘→ |
Increase / decrease font | ⌘+ / ⌘- |
- macOS 14 (Sonoma) or later
- Xcode 15 or later (to build)
No external package manager, no internet at build time, no Homebrew dependencies beyond the bundled libmysqlclient.21.dylib.
brew install --cask quietkit/querly/querlyGrab the latest Querly-x.y.z.zip from Releases, unzip it, and drag Querly.app to /Applications.
First launch: the app is ad-hoc signed (not yet notarised), so macOS Gatekeeper will block it. On macOS Sequoia (15+) the old "right-click → Open" trick no longer works. Clear the quarantine flag once, then launch normally:
xattr -dr com.apple.quarantine /Applications/Querly.app(See Production Readiness for context. Homebrew users get this command printed automatically on install.)
git clone https://github.com/quietkit/Querly.git
cd Querly
open Querly.xcodeproj # then ⌘R in XcodeOr the headless install script:
./scripts/install.sh # builds Debug + copies to /Applications
./scripts/install.sh -v # verboseThe pure-logic core (SQL string builders + fuzzy scorer) is covered by an XCTest suite runnable via Swift Package Manager:
swift testTest Suite 'All tests' passed
Executed 31 tests, with 0 failures
The UI layer (SwiftUI views, NSTableView grid, drivers) isn't unit-tested yet — see Contributing for what would help most.
Querly/
├── Sources/
│ ├── QuerlyApp.swift # @main, scenes, menu commands
│ ├── ContentView.swift # NavigationSplitView root
│ ├── SidebarView.swift # Connection list + table list
│ ├── MainAreaView.swift # Tab strip + tab content router
│ ├── TableDataView.swift # Data grid + pending changes
│ ├── QueryEditorView.swift # SQL editor + result grid
│ ├── ConnectionStore.swift # @ObservableObject app state
│ ├── Models.swift # All shared structs / enums
│ ├── SQLBuilders.swift # ⭐ Pure SQL string builders (tested)
│ ├── FuzzyScore.swift # ⭐ Subsequence scorer (tested)
│ ├── SQLiteDriver.swift # SQLite3 C API wrapper
│ ├── MySQLDriver.swift # libmysqlclient wrapper
│ ├── PostgresDriver.swift # From-scratch PG wire protocol
│ ├── NativeDataTable.swift # NSTableView wrapper for results
│ └── … # ~25 more view / helper files
├── Tests/QuerlyCoreTests/ # XCTest cases for the pure core
├── Package.swift # SPM manifest (test target only)
├── Querly.xcodeproj/ # The actual app build
└── scripts/install.sh # One-shot build + /Applications copy
The app target is an Xcode project (it links AppKit, SwiftUI, libmysqlclient, and uses asset catalogs). Package.swift is intentionally a subset — it builds only the Foundation-only files so swift test works from the command line without dragging the whole UI in.
Pull requests welcome on any of these:
- Ship Sparkle updater — first-class auto-update channel
- DuckDB driver — there's a clean column-store gap in OSS Mac tools
- MS SQL Server / MSSQL driver — pure-Swift TDS, à la the PG driver
- Schema diff — two-connection structural diff with migration SQL
- ER diagram view — auto-layout from foreign keys
- Test coverage on the drivers — integration tests against Docker DBs
These unlock a friction-free install once Querly reaches initial community adoption:
- Apple Developer signing — transition from ad-hoc to a real Developer ID certificate
- Full app notarisation — submit to Apple's notary service to drop the Gatekeeper "unverified developer" warning on first launch
- Re-enable system Keychain — once the app is stably signed, route credential storage through the native macOS Keychain (the
RELEASE_KEYCHAINbackend already exists, gated behind signing) - Submit to Homebrew core — once we hit the notability bar (sustained user base / stars) and ship notarised builds, submit the cask to the official
homebrew/caskcatalog so users can install with a barebrew install --cask querly
Honest assessment from the maintainer:
| Use case | Recommendation |
|---|---|
| Personal projects, side projects, local dev | ✅ Great fit — that's exactly what it's built for |
| Reading production databases | ✅ Safe — Safe Mode + SQL preview protects against accidents |
| Mutating production databases | |
| Mission-critical workflows where data loss = lawsuit | ❌ Not yet — use a paid tool until the test coverage and notarisation story are stronger |
What's missing for a 1.0 paid-product release:
- Code signing + notarisation — the app is currently ad-hoc signed. Triggers Gatekeeper warnings. Means the system Keychain can't be trusted for credential storage, so credentials live in an AES-GCM-encrypted file at
~/Library/Application Support/Querly/credentials.datkeyed by a per-install UserDefaults key. Adequate for OSS / personal use; weaker than a properly-signed app's Keychain. - Driver integration tests — the SQL builders and fuzzy scorer are unit-tested. The MySQL / Postgres / SQLite wire-level paths are not. Real-world matrix testing (MySQL 5.7 / 8.0, PG 12–16, RDS, PlanetScale, Cloud SQL, weird collations, BLOB edge cases) is still needed.
- Crash analytics — no Sentry / Crashlytics wired in. Bugs surface only when you tell me about them.
The codebase is clean, well-commented, and the dangerous paths (write mutations) all flow through a single auditable Safe-Mode preview gate. But "clean and reviewable" is not the same as "battle-tested" — please calibrate accordingly.
We welcome community contributions! Please read CONTRIBUTING.md to understand our Open Core model and development scope.
High-impact contributions (in rough order):
- Driver integration tests — smoke tests for CREATE / INSERT / SELECT / UPDATE / DELETE across MySQL, Postgres, SQLite via Docker
- Bug reports with reproducible schemas — attach DDL + screenshot
- UX feedback — if something feels off, open an issue
- New driver implementations — MSSQL and DuckDB are the most-requested
- Notarisation + code signing — help ship a properly-signed release
Before opening a large PR, please open an issue first to align on the approach.
Querly is designed, built, and maintained by Gamal Anwar — creator and lead developer. 🐙 @GamalAnwar
Published under Quietkit, an indie studio crafting fast, private, native Mac apps.
Querly Community Edition is free and open-source. You are free to use, modify, and distribute this code — commercially or otherwise — with minimal restrictions. See the LICENSE file for details.