Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions connections/connection-form.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -152,15 +152,16 @@ A connect you did not start never runs the script. A restored window at launch,

Every active connection is checked on the interval set by **Check connections** in Settings >
General, every 30 seconds by default, and the check is skipped while any query, export, import, or
other tracked operation is running. A failed check starts a reconnect at 2s, then 4s, 8s, doubling
to a 120-second ceiling, and keeps going until the connection comes back or you close it. An
authentication failure stops the retries and leaves the session in error. So does a TLS failure
other tracked operation is running. A failed check starts a
[reconnect](/connections#when-a-connection-drops): the rows stay on screen and the connection tries
10 times over about 10 minutes before it shows as lost. An authentication failure stops the
retries and shows the connection as lost at once. So does a TLS failure
that needs an edit to the connection: TLS off where the server requires it, TLS on where the server
refuses it, a client certificate the server requires, or a client key that cannot be read or
decrypted. A server certificate that fails verification or does not match the host keeps the
retries going, and the window shows that certificate error in place of a generic one. A reconnect
rebuilds the tunnel, restores the selected database and schema, and re-runs the startup commands;
the session reads as connecting throughout.
retries going, and the reconnect bar names that certificate error as the cause in place of a
generic one. A reconnect rebuilds the tunnel, restores the selected database and schema, and
re-runs the startup commands; the connection shows as reconnecting throughout.

The check is a query, so on a database that sleeps when idle or bills per query it is not free. **Only when I use the connection** stops it: TablePro sends nothing on its own, and instead checks the connection the first time you use it after five quiet minutes. Waking the Mac from sleep counts as a quiet period, so the first thing you do after opening the lid checks too.

Expand Down
14 changes: 13 additions & 1 deletion connections/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ Press `Ctrl+Cmd+C` for **Switch Connection**. Whatever is already open sits at t

Switching leaves the query tab you were in on its own connection. To take it with you, press `Ctrl+Option+Cmd+C` for **Move Tab to Connection…** instead. See [Moving a query tab to another connection](/features/tabs#moving-a-query-tab-to-another-connection).

A footer under that list names the transport the window's connection runs on. On an SSH tunnel or a SOCKS proxy it also carries the bytes that have crossed since the transport opened, received and sent, with the current rate beside each direction while something is moving.
A footer under that list names the transport the window's connection runs on. On an SSH tunnel or a SOCKS proxy it also carries the bytes that have crossed since the transport opened, received and sent, with the current rate beside each direction while something is moving. While the connection is connecting, reconnecting or lost, the footer shows that state in place of the byte counts.

The rest show their name alone. Cloudflare Tunnel, Cloud SQL Auth Proxy and Tunnel Command each run a separate binary that holds the connection end to end, a [remote database file](/connections/remote-database-files) is fetched once and then read from disk, and a direct connection's socket belongs to the database driver.

Expand All @@ -104,6 +104,18 @@ The rest show their name alone. Cloudflare Tunnel, Cloud SQL Auth Proxy and Tunn

Leaving **Database** empty on MySQL, MariaDB, MongoDB, SQL Server, and ClickHouse browses every database the user can reach. PostgreSQL and Redshift need one to connect at all: use `postgres` (Redshift: `dev`) and switch with `Cmd+K`. System databases such as `mysql`, `information_schema` and `master` sit at the end of the switcher under **System**. To hide the rest, choose **View > Filter Databases** and select the ones you want; the choice is saved per connection and never hides a system database from the switcher. **View > Filter Schemas** does the same for the schemas of the database you are in. See [Filtering schemas](/features/connection-window#filtering-schemas).

## When a connection drops

A tunnel or proxy that dies under a connection, or a server that stops answering the [health check](/connections/connection-form#connection-health), leaves the tabs and their rows on screen. A bar above them reads **Reconnecting to \<name\> (1 of 10)** with the cause underneath, such as **SSH tunnel disconnected.**, and the count goes up with each try.

The first try comes 2 seconds after the drop, then 4 and 8, doubling to 2 minutes between tries: 10 tries in about 10 minutes. **Cancel** on the bar stops the tries at once. When the tries run out, or you cancel, the pane reads **Disconnected from \<name\>** with the reason and a **Reconnect** button, and the tabs come back once it connects.

Waking the Mac from sleep checks the tunnel of every open connection, and each one that died reconnects alongside the others rather than in turn.

The connections strip, the welcome window and the connection switcher mark a reconnecting connection with a spinner and a lost one with a crossed-out bolt. [Connection state](/features/workspace-rail#connection-state) lists every mark. Hover one to read the cause.

On the strip's right-click menu and in the **Database** menu, the connection command follows the state: **Connect**, **Reconnect**, **Stop Connecting** or **Stop Reconnecting**. The welcome window's right-click menu offers **Reconnect** for a lost connection and **Connect** for the rest. **Disconnect** stays on all three menus while a connection reconnects or is lost, and ends it without waiting for the next try.

## Edit, delete, and where it all lives

Right-click a connection to edit or delete it, or select it and press `Delete`. Deleting asks first and removes the saved settings, nothing on the server. Pressing `Delete` on a row under **Favorites** or **Recent** only takes it out of that section. Edits apply on the next connect.
Expand Down
2 changes: 1 addition & 1 deletion connections/socks-proxy.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ flowchart LR
Driver -->|"loopback"| Relay -->|"SOCKS5"| SOCKS -->|"TCP"| Database
```

No helper binary is involved: the relay is part of the app. It listens on a free loopback port and carries each connection through the proxy. If the relay dies mid-session, the connection reconnects and rebuilds it, up to ten attempts with a widening delay.
No helper binary is involved: the relay is part of the app. It listens on a free loopback port and carries each connection through the proxy. If the relay dies mid-session, the connection rebuilds it and [reconnects](/connections#when-a-connection-drops) with its rows still on screen.

## Setting up

Expand Down
2 changes: 1 addition & 1 deletion connections/ssh-tunneling.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ A database on a socket cannot negotiate TLS, so SSL is switched off for the conn

## If the tunnel drops

A keep-alive goes out every 30 seconds. When one fails the session drops to connecting and the tunnel is rebuilt, retrying at 2s, 4s, 8s and doubling to a 120-second ceiling, ten attempts at most. A query in flight dies with the tunnel and is not replayed. After ten failures the session ends with **SSH tunnel disconnected. Click to reconnect.**
A keep-alive goes out every 30 seconds. When one fails, the rows stay on screen while the tunnel is rebuilt and the connection [reconnects](/connections#when-a-connection-drops), up to 10 tries. A query in flight dies with the tunnel and is not replayed. If every try fails, the pane reads **Disconnected from \<name\>**, gives the cause as **SSH tunnel disconnected.**, and offers **Reconnect**.

If tunnels keep dropping on an idle network, the keep-alive is not the missing piece: check the server's `ClientAliveInterval` and the idle timeouts on any firewall or load balancer in between.

Expand Down
2 changes: 1 addition & 1 deletion connections/tunnel-command.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ Substitution happens after the split, so a value carrying a space stays a single

## While the connection is open

The process is held for the life of the connection and killed with its whole process group on disconnect, which is what takes an `aws ssm` session's helper down with it. If it exits on its own while the connection is still open, the connection reconnects and starts it again, up to ten attempts with a widening delay. That covers an SSM session hitting its idle timeout and a `kubectl port-forward` losing its pod.
The process is held for the life of the connection and killed with its whole process group on disconnect, which is what takes an `aws ssm` session's helper down with it. If it exits on its own while the connection is still open, the connection starts it again and [reconnects](/connections#when-a-connection-drops), with its rows still on screen. That covers an SSM session hitting its idle timeout and a `kubectl port-forward` losing its pod.

The local port shares the connection's **Connect timeout** under **Options**, which uses 30 seconds
when empty. Past that deadline the connect fails, and the error carries the last lines the command
Expand Down
10 changes: 4 additions & 6 deletions customization/appearance.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -194,15 +194,13 @@ A file in the themes folder that breaks one of these is listed under **Not Loade

Assign one with **Color** on the connection form's **Appearance** tab: None, Red, Orange, Yellow, Green, Blue, Purple, Pink, or Gray. With None, no color cue appears. Connection groups take a color the same way, from their right-click menu on the welcome window.

In the workspace rail the color is a dot on the corner of the database icon, and it stays visible on the selected row. In the welcome window list, the connection switcher and the query history drawer, it is a dot beside the name. The color's name is in the connection's tooltip and its VoiceOver label.

The database icon keeps its engine's own color everywhere, whichever color the connection carries.
The connections strip, the welcome window list and the connection switcher draw the database icon on a rounded tile, and the color fills the tile, the selected row included. The engine's symbol on it turns white or black, whichever reads on that color. With None the tile is gray and the symbol keeps its engine's own color. In the query history drawer the color tints the network symbol beside the connection's name. On the strip, the color's name is in the entry's tooltip and its VoiceOver label.

<Tip>
Use red for production databases as a visual reminder to be careful with queries.
</Tip>

<Frame caption="Connection color in the workspace rail and the welcome list">
<img className="block dark:hidden" src="/images/connection-colors-sidebar.png" alt="Connection colors on rail dots and welcome list rows" />
<img className="hidden dark:block" src="/images/connection-colors-sidebar-dark.png" alt="Connection colors on rail dots and welcome list rows" />
<Frame caption="Connection color in the connections strip and the welcome list">
<img className="block dark:hidden" src="/images/connection-colors-sidebar.png" alt="Connection colors filling the icon tiles on the connections strip and in the welcome list" />
<img className="hidden dark:block" src="/images/connection-colors-sidebar-dark.png" alt="Connection colors filling the icon tiles on the connections strip and in the welcome list" />
</Frame>
4 changes: 2 additions & 2 deletions features/agent-mode.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,11 @@ Two views of one session, chosen from the menu at the trailing end of the column

A run with no rows to draw says which of three things happened: **No Rows** for a query that matched nothing, **Statement Completed** for a write, with the number of rows it changed, and **Can't Show This Result** for a reply the grid cannot read, which the conversation still has in full.

`Cmd+Option+I` opens and closes this column, and the View menu's item reads **Show Result** while the mode is on. The column itself reads **No Session Open** until a session starts, and **Not Connected** while the connection is down.
`Cmd+Option+I` opens and closes this column, and the View menu's item reads **Show Result** while the mode is on. The column itself reads **No Session Open** until a session starts, **Connecting** while the connection opens, and **Not Connected** while it is down.

## When the connection drops

The conversation column is replaced by the same unavailable screen browsing shows: the error itself, **Manage Connections…**, and **Reconnect** for a connection that dropped or **Try Again** for one that failed. Reconnecting puts the same session and the same transcript back.
While the connection [reconnects](/connections#when-a-connection-drops), the conversation stays and the reconnect bar sits above it, with **Cancel**. Once the connection is lost or a connect fails, the column is replaced by the same unavailable screen browsing shows: the error itself, **Manage Connections…**, and **Reconnect** for a connection that dropped or **Try Again** for one that failed. Reconnecting puts the same session and the same transcript back.

## What Agent mode dims

Expand Down
2 changes: 1 addition & 1 deletion features/query-insights.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ A query you ran 400 times with 400 different ids is one row here, not 400. That

<Info>Needs a [Starter license](/features/licensing).</Info>

Open it with `Cmd+Option+Shift+I`, from **Database > Query Insights**, or by right-clicking a live connection in the [workspace rail](/features/workspace-rail). It opens as a tab, one per connection, and reuses the tab you already have open.
Open it with `Cmd+Option+Shift+I`, from **Database > Query Insights**, or by right-clicking a live connection in the [connections strip](/features/workspace-rail). It opens as a tab, one per connection, and reuses the tab you already have open.

<Frame caption="Query Insights: summary, activity chart, and the ranked panels below it">
<img className="block dark:hidden" src="/images/query-insights.png" alt="Query Insights tab" />
Expand Down
2 changes: 1 addition & 1 deletion features/server-dashboard.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ What this screen shows is what your account is allowed to see. An empty or half-
| MongoDB | Only your own operations; metrics and slow queries fail | `clusterMonitor`, `dbAdmin` on the database you browse for its profiler, and `hostManager` to cancel another user's operation |
| Redis | A panel fails with `NOPERM` naming the command | `+client\|list`, `+client\|id`, `+info` and `+slowlog\|get` in the user's ACL, plus `+client\|kill` and `+client\|unblock` to act on a client |

Open it with `Cmd+Option+Shift+D`, from **Database > Server Dashboard**, from **Server Dashboard** under **Actions** in the toolbar, or by right-clicking a live connection in the [workspace rail](/features/workspace-rail).
Open it with `Cmd+Option+Shift+D`, from **Database > Server Dashboard**, from **Server Dashboard** under **Actions** in the toolbar, or by right-clicking a live connection in the [connections strip](/features/workspace-rail).

<Frame caption="Server Dashboard showing active sessions, metrics, and slow queries">
<img
Expand Down
Loading
Loading