Schedules that don’t miss
Hourly, daily or weekly. Runs through launchd, catches up after sleep, and keeps the last N complete backups. Pause any schedule with one switch.
Nightly · production · zstd · 8 threads · keep 14
Fast, safe and fully native. Nouis writes your joins from foreign keys, stops runaway queries, stages every edit, and backs up hundreds of gigabytes to S3, R2 or B2 in parallel. Free for a limited time.
1
| country | orders | revenue |
|---|
Joins from your foreign keys
Type j after a table and pick the whole JOIN … ON clause.
Stop with ⌘.
Run turns into Stop. The server kills just that statement.
Production is never quiet
Read-only and environment badges on every window.
01Daily work
Writing, running, editing, backing up, comparing. Each one is designed around how MySQL actually behaves, not around a generic database driver.
Suggestions come from the tables in the statement, with aliases resolved and fuzzy matching (cid finds customer_id). Type j after a table to get the whole JOIN … ON clause, ranked by your real foreign keys. Semicolons are optional: write one query per paragraph and the one under your cursor is highlighted, ready to run.
02Backup & restore
Nouis puts MySQL Shell’s parallel dump and load behind a few buttons, then keeps your schedules running in the background, even when the app is closed.
Hourly, daily or weekly. Runs through launchd, catches up after sleep, and keeps the last N complete backups. Pause any schedule with one switch.
Nightly · production · zstd · 8 threads · keep 14
Dump directly to a bucket with no local disk in between, and restore straight from it. Access keys stay in the Keychain.
A macOS notification with Nouis’s icon, plus Slack, Discord or any webhook, so the right people hear about it.
Checked before they start, aimed at a new database by default, and able to pick up where they stopped.
03AI assistant
Nouis gives a model exactly what it needs to write good MySQL, which is your schema, and nothing it doesn’t. Run it on a local model for free, or bring a key for a hosted one. Either way the answer is checked against your server before you see it.
-- revenue per country for paid orders, last 30 days
“revenue per country for paid orders, last 30 days”
matchedTABLE orders(id bigint PK NOT NULL, customer_id int NOT NULL, total decimal(10,2), status enum('new','paid','shipped'), created_at datetime NOT NULL) FK(customer_id→customers.id) ~6100000 rowsmatchedTABLE customers(id int PK NOT NULL, email varchar(255) NOT NULL, country varchar(2), tier enum('bronze','silver','gold'), created_at datetime) ~1800000 rowsTABLE order_items(id bigint PK NOT NULL, order_id bigint NOT NULL, product_id int NOT NULL, qty int, price decimal(10,2)) FK(order_id→orders.id) FK(product_id→products.id) ~22600000 rowsTABLE products(id int PK NOT NULL, sku varchar(32) NOT NULL, name varchar(200), price decimal(10,2)) ~18000 rowsOther tables (columns omitted): addresses, audit_log, carts, categories, coupons, invoices, payments, refunds, reviews, sessions, shipments, suppliers
Your question
Typed in plain English, or sent from an error, a query or a plan.
Compact schema
Tables your question names go first. Capped at about 24,000 characters.
Your model
Local through Ollama or LM Studio, or a hosted provider with your key.
Checked on your server
A generated SELECT is run through EXPLAIN. It is never executed.
Repaired if needed
If MySQL rejects it, the error goes back to the model, up to two times.
Into your editor
You read it, change it, and run it yourself. Nothing runs on its own.
Each is a button where you already are: the editor, an error, or the execution plan. Press ⌘J to open the assistant from anywhere.
| Task | You give it | You get |
|---|---|---|
| Write | “revenue per country, last 30 days, top 10” | Turns a plain request into a query for your exact schema, using your foreign keys for joins and a LIMIT on exploratory SELECTs. |
| Explain | A 60 line report someone else wrote | Walks through what a query does, step by step, and points out anything that will be slow. |
| Fix | Error 1054: Unknown column | When a query fails, Fix with AI sends the query and the server’s error, and returns a corrected query with the reason. |
| Optimize | A query that takes 9 seconds | Suggests rewrites and indexes, then gives you the improved query to try. |
| Why is it slow? | Straight from the EXPLAIN view | Sends the query with a summary of its execution plan and gets back concrete CREATE INDEX statements or a rewrite. |
With a local model nothing leaves your Mac and there is no bill. A coding model like qwen2.5-coder handles everyday queries well.
$ brew install ollama $ ollama pull qwen2.5-coder
Hosted models are optional, need your own key, and keep it in the macOS Keychain.
Local, free. Default model qwen2.5-coder.
Local, free. Any model you load.
Your Anthropic key
Your key
Free tier available
Free models available
Free tier available
Your key
vLLM, LiteLLM, your own server
Uses only what exists
The model is told to use only tables and columns in your schema, and to say so when something is missing instead of inventing it.
Reads, not writes
It won’t write statements that change data or structure unless you ask for one. Exploratory SELECTs get a LIMIT.
Your server has the last word
Every generated SELECT is validated with EXPLAIN on your server, and the read-only and safe mode rules still apply when you run it.
04Safety
The guard rails are on by default and visible all the time. You can still do anything you need to; you just can’t do it without noticing.
DELETE FROM orders;
This DELETE has no WHERE clause. It will remove about 6,104,221 rows (MySQL’s estimate).
Cancelled. Nothing ran. The attempt is in the write log.
05Everything else
Monitoring, users, tunnels, diagrams and transfers. None of it is a plugin or an upgrade.
06Compare
Against the five tools MySQL people use most. Nouis goes furthest where MySQL is concerned, and the notes below say where the others lead.
| Feature | Nouis | TablePlus | Navicat | DataGrip | Workbench | DBeaver |
|---|---|---|---|---|---|---|
| Platform | ||||||
| Native Mac app | Java | Java | ||||
| Price | Free at launch | Paid, trial | Paid | Paid, free non-commercial | Free | Free / Pro |
| Backup & restore | ||||||
| Parallel MySQL Shell dumps | No | No | No | No | No | |
| Resumable restores | No | No | No | No | No | |
| Scheduled backups | No | No | No | Paid | ||
| Back up to S3 / R2 / B2 | No | No | No | No | No | |
| Failure alerts | No | No | No | Paid | ||
| Safe restore target | No | No | No | No | No | |
| Working with data | ||||||
| Stop a running query | ||||||
| Staged grid edits | ||||||
| Foreign key navigation | No | No | ||||
| Snippets with parameters | No | No | ||||
| Pinned tabs | No | No | No | |||
| Data transfer | No | |||||
| Schema & performance | ||||||
| Visual EXPLAIN | No | |||||
| Index suggestions | No | No | No | No | No | |
| Schema compare & sync | No | Paid | ||||
| Data compare & sync | No | Per table | No | Paid | ||
| Server dashboard | No | Separate | No | |||
| Safety | ||||||
| Read-only connections | No | No | ||||
| Permanent write log | No | No | No | No | No | |
| Users & privileges editor | Basic | |||||
| AI | ||||||
| Bring your own key | No | Paid | No | |||
| Free local models | No | Paid | No | Paid | ||
Based on each product’s publicly documented features in mid 2026. Editions differ and features change, so check with each vendor.
07Keyboard
Shortcuts follow TablePlus where it matters, so your hands already know most of them. Press a few; the keyboard is listening.
08Pricing
Every feature, for personal and commercial use, with no account and no seat limits. Paid plans will come later, and we’ll give plenty of notice before they do.
09Questions
Something else? Write to hello@nouis.app.
Yes, for a limited time while we launch. Every feature is included, for personal and commercial use, with no account. When paid plans arrive we will announce them well in advance.
macOS 14 Sonoma or later on Apple silicon (M1 or newer). It is a native Swift app built with SwiftUI and AppKit. There is no Electron and no Java runtime.
MySQL 5.7, 8.0 and 8.4, and MariaDB for querying, editing and most tools. Nouis is MySQL only on purpose, so it can go deep on MySQL Shell backups, EXPLAIN and privileges.
Only for backups, restores, imports and stored procedure result sets. Install it once with brew install --cask mysql-shell and Nouis finds it. Everything else works without it.
Yes. Point Nouis at Ollama or LM Studio and every request stays on your machine and costs nothing. qwen2.5-coder is the default model for Ollama. Hosted providers are optional.
Only your schema: table and column names, types, keys, foreign keys and estimated row counts. Never row data. Tables your question mentions are listed first and the schema is capped at about 24,000 characters, roughly 6,000 tokens, so even a very large database keeps each request small and predictable.
In the macOS Keychain, for database, SSH, cloud and AI keys alike. Nouis never writes them to files and hands them to MySQL Shell over stdin, not as command line arguments.
No. There is no telemetry, analytics or account. Nouis connects only to your database servers, the backup storage you choose and the AI provider you set up, if any.
No. Write one query per paragraph and Nouis treats a blank line as the end of a statement when the next line starts a new one. ⌘↩ runs the query under your cursor, which is highlighted so you can see exactly what will run. Blank lines inside a query, in parentheses, CTEs or procedure bodies never split it.
Yes. Press ⌘. or the red Stop button. Nouis sends KILL QUERY from a second connection through the same SSH tunnel, so only that statement stops and your session stays as it was.
Nouis does one database and goes further with it: parallel MySQL Shell backups to S3, R2 or B2 with schedules and resumable restores, index suggestions, data compare, a users and privileges editor and a permanent write log.
Free for a limited time.