Skip to content

Commit 5d38b99

Browse files
committed
release: v0.18.0
1 parent 0797b24 commit 5d38b99

5 files changed

Lines changed: 111 additions & 61 deletions

File tree

CHANGELOG.md

Lines changed: 20 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,72 +7,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10-
### Changed
11-
12-
- Replaced fragmented Theme/DesignConstants/SQLEditorTheme/ToolbarDesignTokens with unified ThemeEngine
13-
- Moved editor and data grid font settings into the theme system (Settings > Appearance)
14-
- Extracted MSSQL, MongoDB, Redis, XLSX export, MQL export, and SQL import plugins from the app bundle into separately distributed plugins, downloadable from the plugin registry. MySQL, PostgreSQL, SQLite, CSV, JSON, and SQL export remain built-in
15-
- Redesigned Plugins settings tab with HSplitView master-detail layout: plugin list on the left, detail pane on the right, matching macOS conventions. Plugin rows now show version, author/capability, and install status at a glance
16-
- Download counts in browse tab now always fetch latest from GitHub API (5-minute in-memory cooldown per session)
17-
- Replaced ~40 hardcoded `DatabaseType` switches across ~20 UI files with dynamic plugin property lookups via `PluginManager`, so third-party plugins get correct UI behavior (colors, labels, editor language, feature toggles) automatically
18-
- ConnectionFormView now fully dynamic: pgpass toggle, password visibility, and SSH/SSL tab visibility all driven by plugin metadata (`FieldSection`, `hidesPassword`, `supportsSSH`/`supportsSSL`) instead of hardcoded type checks
19-
- Replaced `AppState.isMongoDB`/`isRedis` booleans with `AppState.editorLanguage: EditorLanguage` for extensible editor language detection
20-
- Theme colors now derived from plugin `brandColorHex` instead of hardcoded `Theme.mysqlColor` etc.
21-
- Sidebar labels ("Tables"/"Collections"/"Keys"), toolbar preview labels, and AI prompt language detection now use plugin metadata
22-
- Connection form, database switcher, type picker, file open handler, and toolbar all use plugin lookups for connection mode, authentication, import support, and system database names
23-
- Converted `DatabaseType` from closed enum to string-based struct, enabling future plugin-defined database types
24-
- Moved string literal escaping into plugin drivers via `escapeStringLiteral` on `PluginDatabaseDriver` and `DatabaseDriver` protocols; `SQLEscaping.escapeStringLiteral` now uses ANSI SQL escaping only (doubles single quotes, strips null bytes)
25-
- SQL autocomplete data types and CREATE TABLE options now use plugin-provided dialect data instead of hardcoded per-database switches
26-
- `FilterSQLGenerator` now uses `SQLDialectDescriptor` data (regex syntax, boolean literals, LIKE escape style, pagination style) instead of `DatabaseType` switch statements
27-
- Moved identifier quoting, autocomplete statement completions, view templates, and FK disable/enable into plugin system
28-
- Removed `DatabaseType` switches from `FilterSQLGenerator`, `SQLCompletionProvider`, `ImportDataSinkAdapter`, and `MainContentCoordinator+SidebarActions`
29-
- Replaced hardcoded `DatabaseType` switches in ExportDialog, DataChangeManager, SafeModeGuard, ExportService, DataGridView, HighlightedSQLTextView, ForeignKeyPopoverContentView, QueryTab, SQLRowToStatementConverter, SessionStateFactory, ConnectionToolbarState, and DatabaseSwitcherSheet with dynamic plugin lookups (`databaseGroupingStrategy`, `immutableColumns`, `supportsReadOnlyMode`, `paginationStyle`, `editorLanguage`, `connectionMode`, `supportsSchemaSwitching`)
30-
- Replaced remaining ~40 hardcoded `DatabaseType` switches in MainContentCoordinator (main + 5 extensions) and StructureRowProvider with plugin metadata lookups (`requiresReconnectForDatabaseSwitch`, `structureColumnFields`, `defaultPrimaryKeyColumn`, `supportsQueryProgress`, `autoLimitStyle`, `allTablesMetadataSQL`)
10+
## [0.18.0] - 2026-03-14
3111

3212
### Added
3313

34-
- Theme registry distribution: browse, install, uninstall, and update community themes from the plugin registry (Settings > Plugins > Browse, filtered by Themes category)
35-
- Full theme engine with 9 built-in presets (Default Light/Dark, Dracula, Solarized Light/Dark, One Dark, GitHub Light/Dark, Nord) and custom theme support
36-
- Theme browser with visual preview cards in Settings > Appearance
37-
- Per-theme customization of all colors (editor syntax, data grid, UI, sidebar, toolbar) and fonts
38-
- Theme import/export as JSON files for sharing
39-
- SSH TOTP/two-factor authentication support (auto-generate and prompt modes)
14+
- Theme engine: 4 built-in themes (Default Light/Dark, Dracula, Nord), custom themes with full color/font/layout customization, import/export as JSON
15+
- Theme registry: browse, install, and update community themes from the plugin registry
16+
- App-level appearance mode: Light, Dark, or Auto (follow system), independent of theme
17+
- Cassandra and ScyllaDB database support (downloadable plugin)
18+
- SSH TOTP/two-factor authentication with auto-generate and prompt modes
4019
- SSH host key verification with fingerprint confirmation
41-
- Keyboard Interactive SSH authentication method
42-
- Column visibility: toggle individual columns on/off via "Columns" button in the status bar or right-click header context menu "Hide Column", with per-tab and per-table persistence
43-
- `SQLDialectDescriptor` in TableProPluginKit: plugins can now self-describe their SQL dialect (keywords, functions, data types, identifier quoting), with `SQLDialectFactory` preferring plugin-provided dialect info over built-in structs
44-
- DDL schema generation protocol in TableProPluginKit: plugins can now optionally provide database-specific ALTER TABLE syntax (ADD/MODIFY/DROP COLUMN, ADD/DROP INDEX, ADD/DROP FK, MODIFY PK) via `PluginDatabaseDriver`, with `SchemaStatementGenerator` trying plugin methods first before falling back to built-in logic
45-
- Plugin-provided table operations: `truncateTableStatements`, `dropObjectStatement`, `foreignKeyDisableStatements`, `foreignKeyEnableStatements` in `PluginDatabaseDriver` protocol, allowing plugins to override TRUNCATE, DROP, and FK handling SQL
46-
- `CompletionEntry` struct and `statementCompletions` on `DriverPlugin` for plugin-provided autocomplete entries (MongoDB MQL methods, Redis commands)
47-
- `offsetFetchOrderBy` property on `SQLDialectDescriptor` for plugin-controlled ORDER BY in OFFSET/FETCH pagination
48-
- `createViewTemplate()`, `editViewFallbackTemplate(viewName:)`, and `castColumnToText(_:)` on `PluginDatabaseDriver` for plugin-provided view DDL templates and column casting
49-
- `buildExplainQuery` method in `PluginDatabaseDriver` protocol: plugins can now provide database-specific EXPLAIN syntax, with coordinator falling back to built-in logic when plugin returns nil
50-
- `SettablePlugin` protocol in TableProPluginKit SDK: unified settings pattern for all plugins with automatic persistence via `loadSettings()`/`saveSettings()`, replacing duplicated boilerplate across export/import/driver plugins
51-
- Plugin UI/capability metadata: each driver plugin now self-declares brand color, connection mode, supported features, column types, URL schemes, and grouping strategy via the `DriverPlugin` protocol
52-
- Driver plugin settings view support: `DriverPlugin.settingsView()` allows plugins to provide custom settings UI in the Installed Plugins panel
53-
- Dynamic connection fields: connection form Advanced tab now renders fields from `DriverPlugin.additionalConnectionFields` instead of hardcoded per-database sections, with support for text, secure, dropdown, number, toggle, and stepper field types
54-
- Configurable plugin registry URL via `defaults write com.TablePro com.TablePro.customRegistryURL <url>` for enterprise/private registries
55-
- SQL import options (wrap in transaction, disable FK checks) now persist across launches
56-
- `needsRestart` banner persists across app quit/relaunch after plugin uninstall
57-
- Copy as INSERT/UPDATE SQL statements from data grid context menu
58-
- Configurable font family and size for data grid (now via theme customization in Settings > Appearance)
59-
- Plugin download count display in Browse Plugins — fetched from GitHub Releases API and cached for 1 hour
60-
- MSSQL query cancellation (`cancelQuery`) and lock timeout (`applyQueryTimeout`) support
61-
- `~/.pgpass` file support for PostgreSQL/Redshift connections with live validation in the connection form
62-
- Pre-connect script: run a shell command before each connection (e.g., to refresh credentials or update ~/.pgpass)
63-
- `ParameterStyle` enum in TableProPluginKit: plugins declare `?` or `$1` placeholder style via `parameterStyle` property on `PluginDatabaseDriver`
64-
- DML statement generation in ClickHouse, MSSQL, and Oracle plugins via `generateStatements()` for database-specific UPDATE/DELETE syntax
65-
- Cassandra and ScyllaDB database support via DataStax C driver (downloadable plugin)
66-
- `quoteIdentifier` method on `PluginDatabaseDriver` and `DatabaseDriver` protocols: plugins provide database-specific identifier quoting (backticks for MySQL/SQLite/ClickHouse, brackets for MSSQL, double-quotes for PostgreSQL/Oracle/DuckDB, passthrough for MongoDB/Redis)
20+
- Keyboard Interactive SSH authentication
21+
- Column visibility: toggle columns on/off via status bar or header context menu
22+
- Copy as INSERT/UPDATE SQL from data grid context menu
23+
- `~/.pgpass` support for PostgreSQL/Redshift connections
24+
- Pre-connect script: run a shell command before each connection
25+
- MSSQL query cancellation and lock timeout support
26+
- Custom plugin registry URL for enterprise/private registries
6727

6828
### Changed
6929

70-
- Moved MSSQL and Oracle pagination query building (`OFFSET...FETCH NEXT`) from `TableQueryBuilder` into their respective plugin drivers via `buildBrowseQuery`/`buildFilteredQuery`/`buildQuickSearchQuery`/`buildCombinedQuery` hooks
71-
- Moved identifier quoting from `DatabaseType` into plugin drivers via `quoteIdentifier` method on `PluginDatabaseDriver` protocol, with each plugin providing its own quoting style (backtick, bracket, double-quote, or passthrough)
30+
- Extracted MSSQL, MongoDB, Redis, XLSX export, MQL export, and SQL import into downloadable plugins. MySQL, PostgreSQL, SQLite, CSV, JSON, and SQL export remain built-in
31+
- Redesigned Plugins settings with master-detail layout and download counts
32+
- All database-specific behavior now driven by plugin metadata instead of hardcoded switches, enabling third-party database plugins
33+
- Connection form fields, sidebar labels, and SQL dialect features are now fully plugin-driven
7234

7335
### Fixed
7436

75-
- Plugin icon rendering now supports custom asset images (e.g., duckdb-icon) alongside SF Symbols in Installed and Browse tabs
37+
- Plugin icon rendering now supports custom asset images alongside SF Symbols
7638

7739
## [0.17.0] - 2026-03-11
7840

@@ -876,7 +838,8 @@ TablePro is a native macOS database client built with SwiftUI and AppKit, design
876838
- Custom SQL query templates
877839
- Performance optimized for large datasets
878840

879-
[Unreleased]: https://github.com/datlechin/tablepro/compare/v0.17.0...HEAD
841+
[Unreleased]: https://github.com/datlechin/tablepro/compare/v0.18.0...HEAD
842+
[0.18.0]: https://github.com/datlechin/tablepro/compare/v0.17.0...v0.18.0
880843
[0.17.0]: https://github.com/datlechin/tablepro/compare/v0.16.1...v0.17.0
881844
[0.16.1]: https://github.com/datlechin/tablepro/compare/v0.16.0...v0.16.1
882845
[0.16.0]: https://github.com/datlechin/tablepro/compare/v0.15.0...v0.16.0

TablePro.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1666,7 +1666,7 @@
16661666
CODE_SIGN_IDENTITY = "Apple Development";
16671667
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
16681668
CODE_SIGN_STYLE = Automatic;
1669-
CURRENT_PROJECT_VERSION = 31;
1669+
CURRENT_PROJECT_VERSION = 32;
16701670
DEAD_CODE_STRIPPING = YES;
16711671
DEVELOPMENT_TEAM = "";
16721672
ENABLE_APP_SANDBOX = NO;
@@ -1691,7 +1691,7 @@
16911691
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
16921692
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
16931693
MACOSX_DEPLOYMENT_TARGET = 14.0;
1694-
MARKETING_VERSION = 0.17.0;
1694+
MARKETING_VERSION = 0.18.0;
16951695
OTHER_LDFLAGS = (
16961696
"-Wl,-w",
16971697
"-force_load",
@@ -1738,7 +1738,7 @@
17381738
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
17391739
CODE_SIGN_STYLE = Automatic;
17401740
COPY_PHASE_STRIP = YES;
1741-
CURRENT_PROJECT_VERSION = 31;
1741+
CURRENT_PROJECT_VERSION = 32;
17421742
DEAD_CODE_STRIPPING = YES;
17431743
DEPLOYMENT_POSTPROCESSING = YES;
17441744
DEVELOPMENT_TEAM = D7HJ5TFYCU;
@@ -1764,7 +1764,7 @@
17641764
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
17651765
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
17661766
MACOSX_DEPLOYMENT_TARGET = 14.0;
1767-
MARKETING_VERSION = 0.17.0;
1767+
MARKETING_VERSION = 0.18.0;
17681768
OTHER_LDFLAGS = (
17691769
"-Wl,-w",
17701770
"-force_load",

docs/changelog.mdx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,35 @@ description: "Product updates and announcements for TablePro"
44
rss: true
55
---
66

7+
<Update label="March 14, 2026" description="v0.18.0">
8+
### New Features
9+
10+
- **Theme Engine**: 4 built-in themes (Default Light/Dark, Dracula, Nord) with full color, font, and layout customization — import/export themes as JSON
11+
- **Theme Registry**: Browse, install, and update community themes from the plugin registry
12+
- **Cassandra & ScyllaDB Support**: Connect to Cassandra and ScyllaDB databases via a downloadable plugin
13+
- **SSH Two-Factor Authentication**: TOTP support with auto-generate and prompt modes for SSH connections
14+
- **SSH Host Key Verification**: Fingerprint confirmation dialog for new and changed host keys
15+
- **Keyboard Interactive SSH**: Support for keyboard-interactive authentication method
16+
- **Column Visibility**: Toggle columns on/off via status bar button or header context menu
17+
- **Copy as SQL**: Copy selected rows as INSERT or UPDATE statements from the data grid context menu
18+
- **PostgreSQL `.pgpass` Support**: Automatic password lookup from `~/.pgpass` for PostgreSQL and Redshift connections
19+
- **Pre-connect Script**: Run a shell command before each connection via Connection > Advanced
20+
- **Custom Plugin Registry URL**: Configure a private/enterprise registry URL for plugin distribution
21+
22+
### Improvements
23+
24+
- MSSQL, MongoDB, Redis, XLSX export, MQL export, and SQL import extracted into downloadable plugins — MySQL, PostgreSQL, SQLite, CSV, JSON, and SQL export remain built-in
25+
- Redesigned Plugins settings with master-detail layout and download counts
26+
- All database-specific behavior now driven by plugin metadata instead of hardcoded switches, enabling third-party database plugins
27+
- Connection form fields, sidebar labels, and SQL dialect features are now fully plugin-driven
28+
- App-level appearance mode (Light, Dark, Auto) independent of theme selection
29+
- MSSQL query cancellation and lock timeout support
30+
31+
### Bug Fixes
32+
33+
- Fixed plugin icon rendering not supporting custom asset images alongside SF Symbols
34+
</Update>
35+
736
<Update label="March 11, 2026" description="v0.17.0">
837
### New Features
938

docs/vi/changelog.mdx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,35 @@ description: "Cập nhật sản phẩm và thông báo cho TablePro"
44
rss: true
55
---
66

7+
<Update label="14 tháng 3, 2026" description="v0.18.0">
8+
### Tính năng mới
9+
10+
- **Theme Engine**: 4 theme tích hợp (Default Light/Dark, Dracula, Nord) với tuỳ chỉnh đầy đủ màu sắc, phông chữ và bố cục — nhập/xuất theme dưới dạng JSON
11+
- **Theme Registry**: Duyệt, cài đặt và cập nhật theme cộng đồng từ registry plugin
12+
- **Hỗ trợ Cassandra & ScyllaDB**: Kết nối tới cơ sở dữ liệu Cassandra và ScyllaDB qua plugin tải xuống
13+
- **Xác thực hai yếu tố SSH**: Hỗ trợ TOTP với chế độ tự động tạo và nhắc nhở cho kết nối SSH
14+
- **Xác minh khoá máy chủ SSH**: Hộp thoại xác nhận fingerprint cho khoá máy chủ mới và đã thay đổi
15+
- **Keyboard Interactive SSH**: Hỗ trợ phương thức xác thực keyboard-interactive
16+
- **Ẩn/hiện cột**: Bật/tắt cột qua nút thanh trạng thái hoặc menu ngữ cảnh tiêu đề
17+
- **Sao chép dưới dạng SQL**: Sao chép hàng đã chọn dưới dạng câu lệnh INSERT hoặc UPDATE từ menu ngữ cảnh bảng dữ liệu
18+
- **Hỗ trợ `.pgpass` PostgreSQL**: Tự động tra cứu mật khẩu từ `~/.pgpass` cho kết nối PostgreSQL và Redshift
19+
- **Script trước kết nối**: Chạy lệnh shell trước mỗi kết nối qua Connection > Advanced
20+
- **URL registry plugin tuỳ chỉnh**: Cấu hình URL registry riêng/doanh nghiệp cho phân phối plugin
21+
22+
### Cải tiến
23+
24+
- MSSQL, MongoDB, Redis, XLSX export, MQL export và SQL import được tách thành plugin tải xuống — MySQL, PostgreSQL, SQLite, CSV, JSON và SQL export vẫn tích hợp sẵn
25+
- Thiết kế lại cài đặt Plugin với bố cục master-detail và số lượt tải
26+
- Tất cả hành vi theo loại cơ sở dữ liệu giờ dựa trên metadata plugin thay vì mã cứng, cho phép plugin cơ sở dữ liệu bên thứ ba
27+
- Các trường biểu mẫu kết nối, nhãn thanh bên và tính năng SQL dialect giờ hoàn toàn do plugin điều khiển
28+
- Chế độ giao diện ứng dụng (Sáng, Tối, Tự động) độc lập với lựa chọn theme
29+
- Hỗ trợ huỷ truy vấn MSSQL và thời gian chờ khoá
30+
31+
### Sửa lỗi
32+
33+
- Sửa lỗi hiển thị biểu tượng plugin không hỗ trợ hình ảnh asset tuỳ chỉnh bên cạnh SF Symbols
34+
</Update>
35+
736
<Update label="11 tháng 3, 2026" description="v0.17.0">
837
### Tính năng mới
938

docs/zh/changelog.mdx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,35 @@ description: "TablePro 产品更新与公告"
44
rss: true
55
---
66

7+
<Update label="2026 年 3 月 14 日" description="v0.18.0">
8+
### 新功能
9+
10+
- **主题引擎**: 4 个内置主题(Default Light/Dark、Dracula、Nord),支持完整的颜色、字体和布局自定义,可导入/导出 JSON 格式主题
11+
- **主题注册表**: 从插件注册表中浏览、安装和更新社区主题
12+
- **Cassandra 和 ScyllaDB 支持**: 通过可下载插件连接 Cassandra 和 ScyllaDB 数据库
13+
- **SSH 双因素认证**: 支持 TOTP,提供自动生成和提示两种模式
14+
- **SSH 主机密钥验证**: 新的和已更改的主机密钥显示指纹确认对话框
15+
- **Keyboard Interactive SSH**: 支持键盘交互认证方式
16+
- **列可见性**: 通过状态栏按钮或表头右键菜单切换列的显示/隐藏
17+
- **复制为 SQL**: 从数据网格右键菜单将选中行复制为 INSERT 或 UPDATE 语句
18+
- **PostgreSQL `.pgpass` 支持**: 自动从 `~/.pgpass` 查找 PostgreSQL 和 Redshift 连接的密码
19+
- **连接前脚本**: 通过 Connection > Advanced 在每次连接前运行 shell 命令
20+
- **自定义插件注册表 URL**: 为企业/私有环境配置自定义注册表 URL
21+
22+
### 改进
23+
24+
- MSSQL、MongoDB、Redis、XLSX 导出、MQL 导出和 SQL 导入提取为可下载插件,MySQL、PostgreSQL、SQLite、CSV、JSON 和 SQL 导出仍为内置
25+
- 重新设计插件设置,采用主从布局和下载计数
26+
- 所有数据库特定行为现在由插件元数据驱动,而非硬编码,支持第三方数据库插件
27+
- 连接表单字段、侧边栏标签和 SQL 方言功能现在完全由插件驱动
28+
- 应用级外观模式(浅色、深色、自动)独立于主题选择
29+
- MSSQL 查询取消和锁定超时支持
30+
31+
### 错误修复
32+
33+
- 修复插件图标渲染不支持自定义 asset 图片与 SF Symbols 并存的问题
34+
</Update>
35+
736
<Update label="2026 年 3 月 11 日" description="v0.17.0">
837
### 新功能
938

0 commit comments

Comments
 (0)