SQL Server client for Mac
Run T-SQL, browse and edit tables, and read execution plans on your Mac, with nothing from Microsoft to install. SQL Server 2019 to 2025 and Azure SQL, through Inlet’s own driver.
Free for personal use · macOS 26 Tahoe or later · Apple silicon and Intel

Tested on SQL Server 2019, 2022 and 2025
Azure SQL Database and Managed Instance connect the same way, and so does SQL Server in Docker or on Amazon RDS.
What you can do with SQL Server
T-SQL a batch at a time
GO splits a script into batches and GO n repeats one. Every result set a batch or procedure returns is shown, with its PRINT messages.
Plans you can read
Explain draws the estimated plan as a tree. Explain Analyze draws what ran, in a transaction that’s rolled back: actual against estimated rows, and the slowest steps.
Activity
Sessions and who blocks whom, locks per table and index, and the plan cache’s costliest queries with their plans. With Pro, end a session.
Edits you review first
Changes wait until you commit, checked against what you loaded. A table without a primary key is edited a row at a time, matched on every value.
A designer that writes T-SQL
Columns, indexes and constraints, with named default constraints, sp_rename and MS_Description comments, and column collations kept.
The whole database
Schemas, tables, views, sequences, functions and procedures with their arguments, alias and table types, from the sys views.
Import and export
CSV import. Export to CSV, JSON, Excel or T-SQL INSERT statements.
Encryption your way
Off, encrypted, or verified against the CA and host name, with strict encryption (TDS 8.0) as an option.
Ask Claude writes T-SQLPro
With your own Anthropic key, ⌘L writes T-SQL, fixes a failed statement or explains a plan. It sends the schema, never rows.
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
SQL Server has no read-only session, so Inlet refuses writes itself, before they’re sent. Temp tables and procedures such as sp_help and sp_who still work.
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 the connection string you already have, in any of the usual forms, and Inlet fills in the form.
Named instanceshost\INSTANCE, with the port looked up from SQL Server Browser. Azure SQL’s redirects, and read-only intent for availability group secondaries.
SSH tunnelsProThrough the ssh on your Mac, so ~/.ssh/config, the SSH agent and 1Password’s agent work as they do in Terminal.
SQL Server authenticationA login and password, kept in your Keychain or asked for each time.
sqlserver://app@sql.example.com:1433?database=shopjdbc:sqlserver://sql.example.com:1433;databaseName=shopServer=tcp:shop.database.windows.net,1433;Initial Catalog=shop;User ID=app;Encrypt=True;
SQL Server errors, explained
42 SQL Server error messages, each reproduced on a real server: what it means, why it happens and the fix. Inlet links to them when they happen.
- Login failed for user (Microsoft SQL Server, Error: 18456)SQL Server refused the sign-in and, on purpose, didn’t tell your client why: every client sees state 1. The real reason is in the server’s error log, as a state number and a “Reason:” line: 8 is a wrong password, 5 a login that doesn’t exist, 38 a database you can’t open.
- A network-related or instance-specific error occurred while establishing a connection to SQL ServerYour client never reached a SQL Server that answered: the name didn’t resolve, nothing listened on the port, a firewall dropped it, or (for host\INSTANCE) SQL Server Browser didn’t say which port the instance uses. The provider and error number at the end of the message tell you which.
- The certificate chain was issued by an authority that is not trusted (SQL Server)Your client encrypted the connection and checked the server’s certificate, and nobody it trusts signed it: usually SQL Server’s own self-signed certificate. ODBC Driver 18 and Microsoft.Data.SqlClient 4.0 encrypt by default, so it often appears after an upgrade. Give the server a certificate the client can verify, or trust its CA; TrustServerCertificate only skips the check.
- Invalid object name (SQL Server error 208)SQL Server couldn’t find a table or view with that name from where your statement ran. Usually you’re in the wrong database, or the table is in another schema than your default (dbo); temp tables out of scope and case-sensitive databases give the same error.
- Transaction (Process ID …) was deadlocked on lock resources with another process and has been chosen as the deadlock victimTwo sessions each held a lock the other needed, so SQL Server ended one of them, rolled back its whole transaction and sent it error 1205. Retry that transaction; to make deadlocks rarer, change rows and tables in the same order, keep transactions short, and index what you update.
- Violation of PRIMARY KEY constraint. Cannot insert duplicate key in objectA row would give a primary key, UNIQUE constraint (2627) or unique index (2601) a value another row already has, so the statement fails and writes nothing. If the value is an id you didn’t supply, the IDENTITY or sequence is behind the data.
- The INSERT statement conflicted with the FOREIGN KEY constraintA foreign key says every value in a column must exist in another table. INSERT or UPDATE conflicted with the FOREIGN KEY constraint means the parent row isn’t there; DELETE conflicted with the REFERENCE constraint means other rows still point at the one you’re removing.
- Column is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clauseA grouped query returns one row per group, so every column you select must be in the GROUP BY or inside an aggregate such as MAX or SUM. SQL Server doesn’t guess which row’s value you meant.
- Cannot open database requested by the login. The login failed. (Error 4060)Your login and password were accepted, but the database named in the connection string couldn’t be opened for that login: it doesn’t exist, isn’t online, or the login has no user in it. SQL Server then fails the whole sign-in with error 18456 as well.
SQL Server guides
- Connect to a SQL Server named instance (HOST\SQLEXPRESS) from your MacA named instance such as PC\SQLEXPRESS listens on a port picked at start, and the SQL Server Browser service tells clients which one on UDP port 1434. Turn on TCP/IP, run Browser or give the instance a fixed port, open both in Windows Firewall, and turn on SQL Server authentication.
- Connect to Amazon RDS for SQL Server from your MacCopy the endpoint and port from the Connectivity & security tab and sign in as the master user you chose, not sa; it isn’t a sysadmin. Your Mac needs a network path (a publicly accessible instance and a security group rule, or a bastion and an SSH tunnel) and the RDS CA bundle to check the certificate.
- Connect to Azure SQL Database from your MacCopy the server name (<server>.database.windows.net) and the ADO.NET connection string from the Azure portal, add your IP address to the server’s firewall rules, and sign in with SQL authentication on port 1433. Connections are always encrypted, with a certificate your Mac already trusts.
- Connect to SQL Server in Docker from your MacRun mcr.microsoft.com/mssql/server with ACCEPT_EULA=Y and a strong MSSQL_SA_PASSWORD, publish port 1433, and connect to 127.0.0.1 as sa. On Apple silicon the image runs under Rosetta, and its certificate is self-signed: encrypt without checking it (sqlcmd -C).
- SQL Server connection stringsURL, JDBC and ADO.NET forms, with a checker.
Coming from another app?
What’s different, side by side, and how to bring your connections across.
- SSMS on Mac? Inlet vs SQL Server Management StudioSSMS doesn’t run on macOS. How to use it from a Mac, and how Inlet handles your SQL Server work natively.
- Inlet vs Azure Data Studio: a Mac replacement after its retirementAzure Data Studio retired on 28 February 2026. How Inlet compares on a Mac, what VS Code with the MSSQL extension offers, and how to move your connections.
- 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 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 TablePlusInlet and TablePlus side by side: price, platforms, engines, production safety and PostgreSQL tools, and how to import your TablePlus connections.
Not in Inlet yet
For SQL Server, so you know before you download.
- Microsoft Entra ID (Azure AD) and Windows or Kerberos sign-in.
- Managing logins and users, backups, and schema compare.
Inlet for SQL Server
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.
Can I use SQL Server on a Mac?
Yes. SQL Server Management Studio runs on Windows only; Inlet is a Mac app that connects to SQL Server on another machine, in Azure, or in Docker on your Mac.
Do I need ODBC, FreeTDS or Java?
No. Inlet speaks SQL Server’s protocol (TDS) itself, so there’s nothing else to install.
Does it work with Azure SQL?
Yes: Azure SQL Database and Managed Instance, with SQL Server authentication. Paste the ADO.NET string from the Azure portal and Inlet fills in the form.
Is Inlet free for SQL Server?
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.