Skip to content

quietkit/Querly

Repository files navigation

⚡️ Querly

The lightning-fast, native macOS database client.

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.


Latest Release License: MIT Platform Stars

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.


✨ Why Querly

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.


🎯 Features

🗄️ Three drivers, one tiny binary

  • SQLite via the system SQLite3 framework
  • MySQL via bundled libmysqlclient
  • PostgreSQL via a from-scratch pure-Swift wire protocol — TLS, MD5 + SCRAM auth, no libpq

✏️ Editing that doesn't bite back

  • 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 ⌘S commits 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.

⌨️ Built for keyboard-first speed

  • 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, JOIN qualifiers), ⌘↩ to run, ⇧⌥F to format, EXPLAIN, and ⏹ to stop a running query.
  • Filter chips — stack AND-conditions, save named filter sets per table, or drop into raw-SQL WHERE mode.

🧠 Remembers everything, surprises nothing

  • 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 ⌘C row format (TSV / CSV / INSERT / JSON), and rebindable shortcuts.

🔒 Private by default

  • 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.

⌨️ Keyboard Shortcuts

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 ⌘+ / ⌘-

Requirements

  • 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.


📦 Install

Homebrew (recommended)

brew install --cask quietkit/querly/querly

Pre-built binary

Grab 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.)

Build from source

git clone https://github.com/quietkit/Querly.git
cd Querly
open Querly.xcodeproj      # then ⌘R in Xcode

Or the headless install script:

./scripts/install.sh           # builds Debug + copies to /Applications
./scripts/install.sh -v        # verbose

🧪 Tests

The pure-logic core (SQL string builders + fuzzy scorer) is covered by an XCTest suite runnable via Swift Package Manager:

swift test
Test 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.


🏗️ Architecture

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.


🗺️ Roadmap

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

Distribution & Signing Milestones

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_KEYCHAIN backend 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/cask catalog so users can install with a bare brew install --cask querly

🔬 Production Readiness

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 ⚠️ Use cautiously — review the SQL preview, prefer staging first
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:

  1. 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.dat keyed by a per-install UserDefaults key. Adequate for OSS / personal use; weaker than a properly-signed app's Keychain.
  2. 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.
  3. 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.


🤝 Contributing

We welcome community contributions! Please read CONTRIBUTING.md to understand our Open Core model and development scope.

High-impact contributions (in rough order):

  1. Driver integration tests — smoke tests for CREATE / INSERT / SELECT / UPDATE / DELETE across MySQL, Postgres, SQLite via Docker
  2. Bug reports with reproducible schemas — attach DDL + screenshot
  3. UX feedback — if something feels off, open an issue
  4. New driver implementations — MSSQL and DuckDB are the most-requested
  5. Notarisation + code signing — help ship a properly-signed release

Before opening a large PR, please open an issue first to align on the approach.


💛 Credits

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.


📄 License

MIT License.

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.

About

⚡️ The lightning-fast, native macOS database client for SQLite, MySQL & PostgreSQL. No Electron, no JVM — pure SwiftUI + AppKit. Free & open source (MIT).

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages