MySQL and MariaDB client for Mac
Browse and edit tables with every change held until you save it, change structure with the ALTER TABLE in view, and keep production read-only until you unlock it.
Free for personal use · macOS 26 Tahoe or later · Apple silicon and Intel

Tested on MySQL 8.4 and MariaDB 11.4
Hosted MySQL connects the same way: Amazon RDS, PlanetScale and the rest.
What you can do with MySQL
Edits you review first
Changed cells, new rows and deletions wait until ⌘S saves them in one transaction. Review shows the exact SQL first.
One ALTER TABLE, shown first
The structure editor writes a single ALTER TABLE (indexes as ADD INDEX), shows it before it runs, and notes that MySQL may copy the table while it does.
The plan, as MySQL tells it
⌘E shows MySQL’s plan tree (EXPLAIN FORMAT=TREE, from 8.0.16), or MariaDB’s EXPLAIN table.
Activity
Who’s connected and what each connection is running, live. With Pro, cancel a query or end a connection.
Accounts
The server’s users, under Server in the sidebar.
JSON, readable
JSON values open pretty-printed in the inspector, where you can edit them.
Import and export
CSV import. Export to CSV, JSON, SQL INSERT statements or Excel.
Completion from your schema
The editor suggests tables, columns and joins as you type. ⌘↵ runs the statement under the cursor.
Errors explained
A failed query shows MySQL’s error where it happened, with a link to a page on what it means and the fix.
Safe on production
Nothing changes until you say so, and nothing you save overwrites a change you never saw. How Inlet keeps data safe
Production opens read-only
Inlet makes the session read-only, so the server itself refuses writes. Unlock it for ten minutes when you mean to change something.
Dangerous statements ask first
On a protected connection, DROP, TRUNCATE, and DELETE or UPDATE without WHERE say what they’ll do and wait for you.
No lost updates
Every UPDATE checks the row is still what you loaded. If someone changed it, nothing is saved and you see their version beside yours.
Connecting
Paste a connection URL and Inlet fills in the form, or bring the connections you already have.
TLSEncrypted connections, with a custom CA file, and a client certificate and key when the server asks for one.
SSH tunnelsProThrough the ssh on your Mac, so ~/.ssh/config, the SSH agent and 1Password’s agent work as they do in Terminal.
Import what you haveFrom TablePlus, or a .env file’s DATABASE_URL.
mysql://app@db.example.com:3306/shopmysql://app:•••@aws.connect.psdb.cloud/shopmysql://root@127.0.0.1:3306
MySQL errors, explained
45 MySQL error messages, each reproduced on a real server: what it means, why it happens and the fix. Inlet links to them when they happen.
- ERROR 1045 (28000): Access denied for userThe server didn’t accept the user, password and client address you connected with. MySQL gives the same message for a wrong password, an unknown user and an account that only exists for another host.
- ERROR 2002 (HY000): Can't connect to local MySQL server through socketYour client tried to reach a server on the same machine through a Unix socket file and nothing answered there. Either the server isn’t running, it uses a different socket path, or you meant to connect over TCP.
- ERROR 2003 (HY000): Can't connect to MySQL server on 'host'Your client couldn’t open a TCP connection to the server’s host and port. The number at the end says how: (111) or (61) means refused, nothing is listening there; (110) or (60) means timed out, something in between dropped it.
- ERROR 1064 (42000): You have an error in your SQL syntaxThe parser hit something it couldn’t make sense of. The text after “near” is where it gave up; the mistake is usually right before it. “near ''” means the statement ended too early.
- ERROR 1055 (42000): Expression of SELECT list is not in GROUP BY clause (only_full_group_by)Your query groups rows but also selects a column that can have several values in a group, so MySQL can’t know which one to show. Add the column to GROUP BY, wrap it in an aggregate such as MAX(), or use ANY_VALUE() if any value will do.
- ERROR 1062 (23000): Duplicate entry for keyA row you inserted or updated has the same value as an existing row in a PRIMARY KEY or UNIQUE index, so the server refused it. The message gives the value and the index; the clash can be less obvious than it looks, because comparisons follow the column’s collation.
- ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint failsYou inserted or updated a row whose foreign key points at a parent row that doesn’t exist. Insert the parent first, use NULL when there’s no parent, or find and fix the orphaned rows.
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transactionYour statement waited too long for a lock another session holds, usually a transaction left open, and gave up. Find the blocking session and commit, roll back or kill it. Only the timed-out statement is undone; the rest of your transaction is still open.
- ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F…' for columnThe text contains characters the column’s character set can’t store, most often an emoji going into a utf8 (really utf8mb3) or latin1 column, or a connection that isn’t utf8mb4. Convert the column to utf8mb4 and connect with utf8mb4.
MySQL guides
- Connect to Amazon RDS for MySQL from your MacCopy the endpoint and port from the Connectivity & security tab and the master user name from Configuration. Your Mac needs a network path: a publicly accessible instance and a security group rule for your IP, or a bastion host.
- Connect to MySQL in Docker from your MacPublish port 3306 with -p and connect to 127.0.0.1 on that port as root (MYSQL_ROOT_PASSWORD) or the MYSQL_USER you created. Use 127.0.0.1, not localhost, with the mysql client: localhost means the Unix socket.
- Connect to PlanetScale from your MacClick Connect on the database’s dashboard, pick a branch and create a password: you get a host, user name, password and database. TLS is required, and the certificate is signed by a CA your Mac already trusts.
- MySQL connection stringsEvery part of a mysql:// URL, with a checker.
Coming from another app?
What’s different, side by side, and how to bring your connections across.
- Inlet vs Sequel AceInlet and Sequel Ace compared for MySQL and MariaDB on a Mac: price, licence, other databases, safety, macOS versions, and how to move your connections.
- Inlet vs TablePlusInlet and TablePlus side by side: price, platforms, engines, production safety and PostgreSQL tools, and how to import your TablePlus connections.
- Inlet vs DBeaverInlet and DBeaver compared on a Mac: price, editions, engines, Java vs native, MongoDB, schema compare and production safety, and how to switch.
- Inlet vs DataGripInlet and JetBrains DataGrip compared on a Mac: licences for work and personal use, engines, IDE features, data collection, and how to move connections.
- Inlet vs Beekeeper StudioInlet and Beekeeper Studio compared: editions and prices, engines, Electron vs native, which features are paid, and how to move your connections to Inlet.
Not in Inlet yet
For MySQL, so you know before you download.
- Schema compare.
- Plans drawn as a tree, and Ask Claude’s plan explanations: ⌘E shows MySQL’s own plan tree.
- Backups and restores.
Inlet for MySQL
Free for personal use, with every safety feature. For work, Pro is $49 once, with a year of updates.
Version 0.1.0 · macOS 26 Tahoe or later · Apple silicon and IntelQuestions
Something else? Write to hello@inletdb.com.
Is Inlet free for MySQL?
It’s free for personal use: personal projects, students and open source, with every engine and every safety feature. For work, Pro is $49 once, with a year of updates, and a new install has 14 days of Pro to try it.
Does it work with MariaDB?
Yes. MariaDB 11.4 is tested alongside MySQL 8.4. Explain shows MariaDB’s EXPLAIN table, where MySQL 8.0.16 and later give a plan tree.
Do I need MySQL or its client libraries installed?
No. Inlet has its own MySQL driver, built into the app.
Does it work with PlanetScale and Amazon RDS?
Yes: paste the connection URL they give you. There are guides for RDS, PlanetScale and MySQL in Docker.