Last updated
Most database clients treat a Laravel database like any other: a pile of
tables. Querly notices it’s Laravel — from the migrations table, or from
the project folder you attach — and turns on the conventions your app
already relies on. For every other database these features stay off.
Connect without retyping anything
Your projects, already listed. The Welcome screen shows the Laravel
projects on your Mac, from ~/Herd, ~/Code, ~/Sites, and similar
folders. Click Import and Querly reads the project’s .env.
The .env quirks are handled:
DB_URL/DATABASE_URL, which win over the separate keys, as in Laravel- Laravel Sail:
DB_HOST=mysqlbecomes127.0.0.1on the port Sail forwards (FORWARD_DB_PORT) DB_PASSWORD=nullmeans no password, not the word “null”- Quoted values, inline comments,
#inside passwords, and Windows line endings APP_ENV=productionmarks the connection as Production and turns on Safe Mode, so every write needs a preview
You can also drop a project folder on the Welcome screen, or attach a project to a connection you made by hand.
Browse data the way your app sees it
Soft deletes. Rows with deleted_at set are hidden by default, as
Eloquent hides them. One toolbar click shows the trashed rows too.
Links Laravel apps don’t declare. Many Laravel schemas have no FOREIGN
KEY constraints. Querly links user_id to users, blog_post_id to
blog_posts, and parent_id to its own table, but only when the target
table exists. Click the arrow in a cell to open the related row.
Polymorphic relations. A commentable_type + commentable_id pair
becomes one link that opens the right table for each row, whether the type
is stored as App\Models\Post or as a morph-map alias like post.
Readable casts. With the project attached, Querly reads each model’s
$casts (or casts() method):
- Enum casts show the case name next to the stored value:
2 · Shipped encryptedcasts show 🔒 instead of ciphertextjobsandfailed_jobspayloads lead with the job class:⚙︎ App\Jobs\SendInvoice
Labels are display only. Editing, copying, filtering, and sorting still use the real stored value.
Code you can paste straight into your app
Rows → PHP array. Select rows, right-click → Copy Special → Rows as
PHP Array. You get a ready-to-paste array for a seeder or factory, with
numbers, booleans, and null typed correctly and strings safely escaped:
[
'id' => 1,
'name' => 'Ali',
'email' => '[email protected]',
'deleted_at' => null,
]
Filter → Eloquent. Build a filter in the grid, then choose Copy Query as Eloquent. Querly writes the same query in Eloquent, using the model when the table has one:
User::query()
->where('status', 'active')
->where('email', 'like', '%@example.com')
->whereBetween('id', [1, 100])
->withTrashed()
->orderBy('created_at', 'desc')
->get();
Relative date filters stay relative (today()->subDays(6)), and anything
without an Eloquent equivalent becomes whereRaw with the exact SQL the
grid ran, so the result always matches.
Project tools
- Open the Eloquent model for any table, straight from the table menu.
Models in domain folders and packages are found, not only
app/Models. - Generate a migration and model from an existing table, ready to review and save into the project.
- Pending migrations are counted in the sidebar. Preview SQL runs
php artisan migrate --pretend(or Sail’s equivalent) and shows exactly what would run, without running it.
Fast, native, and private
Querly is a native Mac app built with SwiftUI and AppKit. It opens in well under a second, works with the keyboard (⌘P runs any action), and supports MySQL, MariaDB, PostgreSQL, SQLite, SQL Server, and Redis — the databases Laravel apps use. No account and no telemetry.
Free with every database tool and Laravel support, up to 3 saved connections, 2 tabs and 2 windows. $29 once removes the limits and adds Undo for writes, Schema Diff, and AI write access.