Plugin Registry
The plugin registry is a JSON manifest hosted at github.com/TableProApp/plugins. TablePro fetches it to populate Settings > Plugins > Browse and to auto-install missing driver plugins.Manifest Format
The registry manifest (plugins.json) follows RegistryManifest:
RegistryPlugin model:
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Bundle identifier (e.g., com.TablePro.OracleDriver) |
name | string | Yes | Display name |
version | string | Yes | Semantic version |
summary | string | Yes | One-line description |
author | object | Yes | { "name": "...", "url": "..." } |
homepage | string | No | Project URL |
category | string | Yes | One of: database-driver, export-format, import-format, theme, other |
databaseTypeIds | [string] | No | Maps to DatabaseType.pluginTypeId values. Used for auto-install prompts. |
downloadURL | string | No* | Direct URL to the .zip file |
sha256 | string | No* | SHA-256 hex digest of the ZIP file |
binaries | [object] | No | Per-architecture binaries: [{ "architecture": "arm64"|"x86_64", "downloadURL": "...", "sha256": "..." }] |
minAppVersion | string | No | Minimum TablePro version (e.g., "0.17.0") |
minPluginKitVersion | int | No | Minimum PluginKit version (currently 2) |
iconName | string | No | SF Symbol name for display |
isVerified | bool | Yes | Whether the plugin is verified by the TablePro team |
downloadURL/sha256 (flat fields) or binaries array is required. If binaries is present, the app picks the matching architecture. Flat fields serve as fallback for older app versions.
Oracle and ClickHouse Entries
These two database drivers ship as downloadable plugins instead of being bundled with the app. Their registry entries:<sha256-of-zip> with the actual SHA-256 output from build-plugin.sh. The binaries array provides per-architecture downloads; downloadURL/sha256 flat fields point to arm64 as fallback for older app versions.
Theme Distribution
Themes use the same registry manifest but withcategory: "theme". Unlike database driver plugins, themes are pure JSON data with no executable code, no code signing, and no .tableplugin bundle.
A theme registry entry’s ZIP contains one or more .json files, each a valid ThemeDefinition. On install, TablePro extracts the JSONs, rewrites their IDs to registry.{pluginId}.{originalSuffix}, and stores them in ~/Library/Application Support/TablePro/Themes/Registry/.
Example theme registry entry:
Custom Registry URL
For enterprise or private plugin registries, you can override the default registry URL:databaseTypeIds Mapping
ThedatabaseTypeIds field maps registry entries to DatabaseType.pluginTypeId values. This is how the app knows which registry plugin to install when a user selects a database type that has no loaded driver.
| DatabaseType | pluginTypeId |
|---|---|
| MySQL, MariaDB | "MySQL" |
| PostgreSQL, Redshift | "PostgreSQL" |
| SQLite | "SQLite" |
| MongoDB | "MongoDB" |
| Redis | "Redis" |
| SQL Server | "SQL Server" |
| Oracle | "Oracle" |
| ClickHouse | "ClickHouse" |
Publishing a Plugin
Tag commit:git tag plugin-oracle-v1.0.0 && git push --tags. CI builds both architectures, signs, creates release, and updates registry. App fetches on next Browse visit.
Auto-Install
When user selects downloadable database type (Oracle, ClickHouse):- Check if plugin is loaded
- Show download badge if missing
- Fetch registry, find plugin by
databaseTypeIds, download ZIP - Verify SHA-256, extract, verify signature, load plugin
