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
5 changes: 3 additions & 2 deletions customization/settings.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ The settings window is app-wide: a value on any of these twelve tabs holds for e
<Card title="Notifications" icon="bell" href="/customization/notifications">Which finished operations notify you when TablePro is in the background.</Card>
<Card title="AI" icon="sparkles" href="/features/ai-assistant">Providers, inline suggestions, context, slash commands.</Card>
<Card title="MCP" icon="network-wired" href="/features/mcp">MCP server, tokens, clients, activity.</Card>
<Card title="Plugins" icon="puzzle-piece" href="/features/plugins">Manage drivers and exporters.</Card>
<Card title="Extensions" icon="puzzle-piece" href="/features/plugins">Modules, drivers and exporters.</Card>
<Card title="Sync" icon="arrows-rotate" href="/features/icloud-sync">iCloud sync and what it carries.</Card>
<Card title="License" icon="key" href="/features/licensing">Activation, devices, team.</Card>
</CardGroup>
Expand Down Expand Up @@ -105,8 +105,9 @@ What a fresh install ships with, so one glance down this column says what you ch
| MCP | Allow apps to list connections hidden from AI | Off |
| Sync | Sync this Mac with iCloud | Off |
| Sync | Passwords (keychain sync) | Off |
| Extensions | Routine Debugger | Off |

Three tabs are not in the table. Stock keyboard chords are on [Keyboard Shortcuts](/features/keyboard-shortcuts), and neither the Plugins nor the License tab holds a value of its own.
Keyboard and License are not in the table. Stock keyboard chords are on [Keyboard Shortcuts](/features/keyboard-shortcuts), and the License tab holds no value of its own.

## Where settings live

Expand Down
2 changes: 1 addition & 1 deletion databases/cloudflare-r2-sql.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ The bucket has R2 Data Catalog turned off, or the catalog holds no tables yet. T

### `SHOW TABLES returned columns TablePro does not recognize: …`

R2 SQL answered a catalog statement in a shape this version of the driver cannot read. Update the plugin from **Settings > Plugins**.
R2 SQL answered a catalog statement in a shape this version of the driver cannot read. Update the plugin from **Settings > Extensions**.

### `unsupported feature: OFFSET clause is not supported`

Expand Down
2 changes: 2 additions & 0 deletions databases/oracle.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ A `CREATE` whose unit does not compile fails with Oracle's own errors, one per l

`DBMS_OUTPUT.PUT_LINE` lines show with the result of the statement that printed them. See [Server output](/features/query-results#server-output).

The [Routine Debugger](/features/routine-debugger) steps through a procedure, a function or a package with breakpoints. It needs `DEBUG CONNECT SESSION`.

In a trigger body, `:NEW` and `:OLD` are left as written. In an anonymous block, `:name` is a [query parameter](/features/query-parameters) filled from the panel.

An anonymous block, or a query whose `WITH` clause declares a function, runs code on the server. One that drops or truncates, including through `EXECUTE IMMEDIATE '…'`, raises the [dangerous query warning](/features/safe-mode) before it runs, and a Read-Only connection refuses it like any write. [MCP clients](/developers/mcp-tools) and the AI assistant cannot send either.
Expand Down
2 changes: 1 addition & 1 deletion databases/postgresql.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ Sessions run in `UTF8` whatever encoding the database was created with, and the

## Tools

`EXPLAIN` and `EXPLAIN ANALYZE` run with `FORMAT JSON` and render as a plan diagram or tree. See [EXPLAIN Visualization](/features/explain-visualization). **Database > Users & Roles** shows where each privilege comes from before you grant or revoke it. **Backup Dump** and **Restore Dump** shell out to your local `pg_dump` and `pg_restore`; see [Backup & Restore](/features/backup-restore).
`EXPLAIN` and `EXPLAIN ANALYZE` run with `FORMAT JSON` and render as a plan diagram or tree. See [EXPLAIN Visualization](/features/explain-visualization). **Database > Users & Roles** shows where each privilege comes from before you grant or revoke it. **Backup Dump** and **Restore Dump** shell out to your local `pg_dump` and `pg_restore`; see [Backup & Restore](/features/backup-restore). The [Routine Debugger](/features/routine-debugger) steps through PL/pgSQL functions and procedures once the server has the `pldbgapi` extension.

## SSL/TLS

Expand Down
2 changes: 1 addition & 1 deletion developers/url-scheme.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ pane. The link only navigates and never changes a setting.
| Notifications | `notifications` |
| AI | `ai` |
| MCP | `mcp` |
| Plugins | `plugins` |
| Extensions | `plugins` |
| Sync | `sync` |
| License | `license` |

Expand Down
4 changes: 2 additions & 2 deletions development/plugin-development.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ A plugin is a macOS loadable bundle target with `WRAPPER_EXTENSION = tableplugin
|-----|------|----------|---------|
| `TableProPluginKitVersion` | integer | Yes | The PluginKit ABI the plugin was built against. Current value: 41 |
| `TableProProvidesDatabaseTypeIds` | array of strings | Recommended | Database type IDs the plugin serves, which is what makes lazy loading possible |
| `CFBundleShortVersionString` | string | Yes | Plugin version shown in **Settings > Plugins** |
| `CFBundleShortVersionString` | string | Yes | Plugin version shown in **Settings > Extensions** |
| `CFBundleVersion` | string | Yes | Build number. Of two copies of a plugin the higher build loads, and a registry update needs a higher build |

Leave `TableProProvidesDatabaseTypeIds` out and the plugin loads eagerly at startup, blocking launch, and `PluginManager` logs a warning naming the key. With it, the app registers your metadata from `Info.plist` and loads the binary on first use.
Expand Down Expand Up @@ -86,7 +86,7 @@ Adopt these on top of `PluginDatabaseDriver` to reach more of the UI. The app fi
| `PluginDefaultSortProvider` | Per-table control of default sorting: `.useAppDefault`, `.suppress`, or `.forceColumns([String])` |
| `PluginPrincipalManagement` | Users, roles, and grants in the Users & Roles tab |
| `PluginBrowseFilterProvider` | Control of the sidebar object filter: glob syntax, case sensitivity, type scopes |
| `SettablePlugin` | A settings pane of your own under **Settings > Plugins** |
| `SettablePlugin` | A settings pane of your own under **Settings > Extensions** |

## ABI compatibility

Expand Down
2 changes: 1 addition & 1 deletion development/plugin-registry.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,4 @@ A plugin loads when its `TableProPluginKitVersion` falls inside the app's range.

## Caching

GitHub Pages serves the manifest with `Cache-Control: max-age=600`. The app keeps the response in its HTTP cache on disk and decodes it at launch, so the catalog is there before any request. At launch and when **Settings > Plugins** opens, the cached response answers while it is fresh. Before an install reports a plugin missing, and when the app repairs an outdated plugin, it revalidates with the server. A new release reaches the app within about ten minutes.
GitHub Pages serves the manifest with `Cache-Control: max-age=600`. The app keeps the response in its HTTP cache on disk and decodes it at launch, so the catalog is there before any request. At launch and when **Settings > Extensions** opens, the cached response answers while it is fresh. Before an install reports a plugin missing, and when the app repairs an outdated plugin, it revalidates with the server. A new release reaches the app within about ten minutes.
2 changes: 1 addition & 1 deletion development/testing-plugins.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ This is the route for a bundle built on another machine or signed by another tea

## When it does not load

The reason lands in a **Plugin Installation Failed** alert when installing, and in the banner in **Settings > Plugins** otherwise.
The reason lands in a **Plugin Installation Failed** alert when installing, and in the banner in **Settings > Extensions** otherwise.

| Message | What it means | What to do |
|---------|---------------|------------|
Expand Down
1 change: 1 addition & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@
"pages": [
"features/table-structure",
"features/routines-triggers",
"features/routine-debugger",
"features/user-defined-types",
"features/table-operations",
"features/er-diagram",
Expand Down
2 changes: 1 addition & 1 deletion faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Each one must match the SHA-256 checksum in the registry manifest and carry a va
</Accordion>

<Accordion title="Why does a plugin need updating after I update the app?">
An app update can raise the plugin interface version, and a plugin built against the old one is rejected at load rather than crashing. TablePro repairs it at the next launch by reinstalling a compatible build from the registry. Until then the plugin sits in a banner in **Settings > Plugins** with the reason and an action.
An app update can raise the plugin interface version, and a plugin built against the old one is rejected at load rather than crashing. TablePro repairs it at the next launch by reinstalling a compatible build from the registry. Until then the plugin sits in a banner in **Settings > Extensions** with the reason and an action.
</Accordion>

</AccordionGroup>
Expand Down
17 changes: 17 additions & 0 deletions features/keyboard-shortcuts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,23 @@ In [Open Quickly](/features/open-quickly), `Ctrl+J`/`Ctrl+N` and `Ctrl+K`/`Ctrl+

See [Data Files](/features/data-files).

## Debug

The **Debug** menu, and the **Debug** section of **Settings > Keyboard**, exist only while **Routine Debugger** is selected in **Settings > Extensions**. See [Routine Debugger](/features/routine-debugger).

| Action | Shortcut |
|--------|----------|
| Debug Routine… | none |
| Continue | `Ctrl+Cmd+Y` |
| Step Over | `F6` |
| Step Into | `F7` |
| Step Out | `F8` |
| Stop | none |
| Toggle Breakpoint | none by default, rebindable |
| Remove All Breakpoints | none |

Continue and the three steps are rebindable too. Debug Routine…, Stop and Remove All Breakpoints have no row in **Settings > Keyboard**.

## Vim and Emacs key bindings

Choose Vim or Emacs under **Settings > Editor > Key bindings**. Either applies only in the SQL editor; the data grid keeps its shortcuts, and `Cmd+Enter` runs the query in any mode. The key references are [Vim Mode](/features/vim-mode) and [Emacs Mode](/features/emacs-mode).
Expand Down
14 changes: 9 additions & 5 deletions features/plugins.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ A registry plugin installs where you need it:
- A `.duckdb` file opened from Finder, which asks for the DuckDB driver.
- **Install Parquet Export…** at the end of the format menu in the Export dialog. Parquet is selected once the download finishes.

On a Mac with no network, install from a file: drag a `.tableplugin` or `.zip` onto **Settings > Plugins**, or click the **+** button there. A file for a plugin that is already loaded replaces it the next time TablePro starts. User-installed plugins live in `~/Library/Application Support/TablePro/Plugins`.
On a Mac with no network, install from a file: drag a `.tableplugin` or `.zip` onto **Settings > Extensions**, or click the **+** button there. A file for a plugin that is already loaded replaces it the next time TablePro starts. User-installed plugins live in `~/Library/Application Support/TablePro/Plugins`.

Every plugin is verified before it loads. A registry download must match the SHA-256 checksum in the registry manifest, and the bundle must be signed by TablePro. A bundle signed by anyone else, ad-hoc signed or unsigned is refused, with no override.

Expand All @@ -71,13 +71,13 @@ Every plugin is verified before it loads. A registry download must match the SHA
Registry plugins follow the app. After a TablePro update, each plugin installed from the registry with an older build than the app is fetched again at launch:

- A plugin that is not loaded, such as one rejected after the update, installs and loads at once.
- A plugin that is loaded downloads in the background and replaces the old one the next time TablePro starts. Its row in **Settings > Plugins** reads "Updates when TablePro restarts" until then.
- A plugin that is loaded downloads in the background and replaces the old one the next time TablePro starts. Its row in **Settings > Extensions** reads "Updates when TablePro restarts" until then.

Offline, the check waits and runs once the Mac is back online. If the registry has no newer build yet, the check tries again in the background, on the schedule in [A plugin will not install or load](/troubleshooting#a-plugin-will-not-install-or-load). Connecting to a database whose plugin is outdated checks again first.

Bundled plugins update with the app. A plugin installed from a file, including one installed over a registry plugin, updates from the registry only when an app update leaves it rejected and the registry has a compatible build of it.

An app update can raise the plugin interface version. A plugin built for an older one is rejected at load instead of crashing, and stays in a banner in **Settings > Plugins** with the reason and an action until it is repaired:
An app update can raise the plugin interface version. A plugin built for an older one is rejected at load instead of crashing, and stays in a banner in **Settings > Extensions** with the reason and an action until it is repaired:

| Action | Meaning |
|--------|---------|
Expand All @@ -88,7 +88,7 @@ An app update can raise the plugin interface version. A plugin built for an olde

## Managing plugins

In **Settings > Plugins**:
In **Settings > Extensions**:

- **Uninstall** removes a user-installed plugin from disk. Bundled plugins cannot be uninstalled.
- The detail pane shows version, bundle ID, capabilities, database type, and default port. Plugins with their own settings show them here.
Expand All @@ -100,9 +100,13 @@ Saved connections survive a removal. A connection whose driver cannot load stays
| Cause | Button |
|-------|--------|
| The driver is not installed | **Install Plugin…** downloads it and connects |
| The plugin failed to load or needs an update | **Open Plugin Settings** selects it in **Settings > Plugins**. Click **Try Again** once it is fixed |
| The plugin failed to load or needs an update | **Open Plugin Settings** selects it in **Settings > Extensions**. Click **Try Again** once it is fixed |
| The connection names a database type no plugin provides, which a connection imported from another app can | **Edit Connection…** opens the form to choose the type |

## Modules

**Settings > Extensions** lists **Modules** above the plugins. A module comes with the app and stays out of the menus until you select its checkbox. The checkbox is per Mac and does not sync. **Routine Debugger** is the one module; see [Routine Debugger](/features/routine-debugger#turn-it-on).

## Themes

Themes are not plugins. Choose, create, import and export them in **Settings > Appearance**. See [Appearance](/customization/appearance).
Expand Down
Loading
Loading