Query Tabs
Every tab is a native macOS window tab. Each tab is a separate NSWindow in a tab group, managed by the system window tabbing API. This means you get standard macOS tab behavior: drag tabs between windows, merge windows via Window > Merge All Windows, and use Window > Move Tab to New Window to split them out. Each tab is an independent workspace with its own SQL content, results, pagination, sorting, and filter state. Open as many as you need. They persist across app restarts.

Tab bar with multiple query and table tabs
Tab Types
Change tracking is available in table tabs by default. Query tabs support change tracking only for simple
SELECT * FROM table results.
Smart Tab Reuse
Clicking a table you already have open just switches to it. With preview tabs on (the default), clicking a different table reuses the active tab in place. A tab with unsaved edits, an applied filter, or sorting is never replaced: the click opens a new tab and leaves your work alone. Double-click a table to open it in its own permanent tab.Preview Tabs
Single-clicking a table opens a temporary preview tab that gets replaced when you click a different table (like VS Code’s preview tabs). Preview tabs show “Preview” in the window subtitle. A preview tab becomes permanent when you:- Double-click a table in the sidebar
- Interact with the tab (sort, filter, edit data, select rows)


Different tab types: Query and Table
Managing Tabs
Creating Tabs
Closing Tabs
Switching Tabs
Cmd+1throughCmd+9to jump by positionCmd+Shift+[/Cmd+Option+Leftfor previous tabCmd+Shift+]/Cmd+Option+Rightfor next tab
Reordering Tabs
Drag any tab to a new position. The tab bar scrolls horizontally when tabs overflow.

Drag and drop tab reordering
Pinning Tabs
Right-click a tab > Pin Tab. Pinned tabs:- Cannot be closed via close button,
Cmd+W, or context menu - Are not closed by Close Other Tabs
- Are not replaced by table tab reuse
- Persist across sessions


Pinned tab with pin indicator
Duplicating Tabs
Right-click a tab > Duplicate Tab. The copy opens immediately after the original with the same query and results.Per-Tab Change Tracking
Each tab maintains its own pending changes. Switching tabs saves and restores each tab’s change state.Tab Persistence
What Is Persisted
Tab state auto-saves 500ms after any change, plus a background save every 30 seconds so a crash or force quit keeps your recent work. On reconnect, TablePro restores your tabs and re-runs table queries with the sort, filters, and page you left them on. Connections reconnect lazily, when you first interact with a restored tab, so launch stays fast and unreachable hosts do not block startup.
Whether the session reopens on launch is controlled by Startup Behavior, which defaults to reopening your last session.
Multi-Window Restoration
Tabs restore in their original order across launches. If a previous session was recovered after a crash, TablePro reopens each connection that had open tabs.Window Size, Position, and Zoom
Each editor window remembers its frame and zoom across launches. Reopen a connection and the window comes back at the same size, position, and zoom state. The first window opens at 1200x800 centered on the active screen.Pagination
Table Tabs (Server-Side)
Table tabs use SQLLIMIT and OFFSET. Only the current page loads from the database. Page navigation triggers a new query. Configure page size in Settings > Editor.


Server-side pagination in a table tab
Query Tabs (Client-Side)
Query tabs execute the full query and receive all results. For large result sets, TablePro paginates client-side without re-querying. Sorting is done locally on cached results. Configure page size in Settings > Editor: Small (100), Medium (500), Large (1,000), or Custom (10-100,000).Tab Context Menu
Right-click any tab:

Tab context menu
From External Clients
Raycast, Cursor, Claude Desktop, and other MCP clients can list and focus tabs across windows. Four MCP tools cover the surface:list_recent_tabsenumerates open tabs across every window.focus_query_tabbrings an existing tab to the front by id.open_connection_windowopens a saved connection.open_table_tabopens a specific table.
