Skip to main content

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:
{
  "schemaVersion": 1,
  "plugins": [
    // ... plugin entries
  ]
}
Each entry matches the RegistryPlugin model:
FieldTypeRequiredDescription
idstringYesBundle identifier (e.g., com.TablePro.OracleDriver)
namestringYesDisplay name
versionstringYesSemantic version
summarystringYesOne-line description
authorobjectYes{ "name": "...", "url": "..." }
homepagestringNoProject URL
categorystringYesOne of: database-driver, export-format, import-format, theme, other
databaseTypeIds[string]NoMaps to DatabaseType.pluginTypeId values. Used for auto-install prompts.
downloadURLstringNo*Direct URL to the .zip file
sha256stringNo*SHA-256 hex digest of the ZIP file
binaries[object]NoPer-architecture binaries: [{ "architecture": "arm64"|"x86_64", "downloadURL": "...", "sha256": "..." }]
minAppVersionstringNoMinimum TablePro version (e.g., "0.17.0")
minPluginKitVersionintNoMinimum PluginKit version (currently 2)
iconNamestringNoSF Symbol name for display
isVerifiedboolYesWhether the plugin is verified by the TablePro team
* Either 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:
{
  "id": "com.TablePro.OracleDriver",
  "name": "Oracle Driver",
  "version": "1.0.0",
  "summary": "Oracle Database 12c+ driver via OracleNIO",
  "author": {
    "name": "TablePro",
    "url": "https://tablepro.app"
  },
  "homepage": "https://tablepro.app/databases/oracle",
  "category": "database-driver",
  "databaseTypeIds": ["Oracle"],
  "downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-oracle-v1.0.0/OracleDriver-arm64.zip",
  "sha256": "<sha256-of-zip>",
  "binaries": [
    { "architecture": "arm64", "downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-oracle-v1.0.0/OracleDriver-arm64.zip", "sha256": "<sha256-of-zip>" },
    { "architecture": "x86_64", "downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-oracle-v1.0.0/OracleDriver-x86_64.zip", "sha256": "<sha256-of-zip>" }
  ],
  "minAppVersion": "0.17.0",
  "minPluginKitVersion": 2,
  "iconName": "server.rack",
  "isVerified": true
}
{
  "id": "com.TablePro.ClickHouseDriver",
  "name": "ClickHouse Driver",
  "version": "1.0.0",
  "summary": "ClickHouse OLAP database driver via HTTP interface",
  "author": {
    "name": "TablePro",
    "url": "https://tablepro.app"
  },
  "homepage": "https://tablepro.app/databases/clickhouse",
  "category": "database-driver",
  "databaseTypeIds": ["ClickHouse"],
  "downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-clickhouse-v1.0.0/ClickHouseDriver-arm64.zip",
  "sha256": "<sha256-of-zip>",
  "binaries": [
    { "architecture": "arm64", "downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-clickhouse-v1.0.0/ClickHouseDriver-arm64.zip", "sha256": "<sha256-of-zip>" },
    { "architecture": "x86_64", "downloadURL": "https://github.com/TableProApp/TablePro/releases/download/plugin-clickhouse-v1.0.0/ClickHouseDriver-x86_64.zip", "sha256": "<sha256-of-zip>" }
  ],
  "minAppVersion": "0.17.0",
  "minPluginKitVersion": 2,
  "iconName": "chart.bar.xaxis",
  "isVerified": true
}
Replace <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 with category: "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:
{
  "id": "com.example.monokai-theme",
  "name": "Monokai Theme",
  "version": "1.0.0",
  "summary": "Classic Monokai color scheme for TablePro",
  "author": { "name": "Theme Author" },
  "category": "theme",
  "downloadURL": "https://example.com/monokai-theme.zip",
  "sha256": "<sha256-of-zip>",
  "iconName": "paintpalette",
  "isVerified": false
}
Theme packs (multiple themes in one ZIP) are supported. All themes from a pack are linked to the same registry plugin ID, so uninstalling removes all of them.

Custom Registry URL

For enterprise or private plugin registries, you can override the default registry URL:
defaults write com.TablePro com.TablePro.customRegistryURL "https://your-registry.example.com/plugins.json"
To revert to the default registry:
defaults delete com.TablePro com.TablePro.customRegistryURL
The app invalidates its ETag cache when the registry URL changes, forcing a fresh fetch on the next Browse visit.

databaseTypeIds Mapping

The databaseTypeIds 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.
DatabaseTypepluginTypeId
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):
  1. Check if plugin is loaded
  2. Show download badge if missing
  3. Fetch registry, find plugin by databaseTypeIds, download ZIP
  4. Verify SHA-256, extract, verify signature, load plugin