You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+23-20Lines changed: 23 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,35 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
## [0.56.0] - 2026-07-09
11
+
10
12
### Added
11
13
12
-
- Custom AI slash commands now sync across your Macs with iCloud Sync, alongside your other settings.
13
-
- Join a team by pasting the invite code your team owner sent where a license key goes, in Settings > Account or the activation window. Owners manage members and seats from their account on tablepro.app.
14
-
- Connections can take their password from 1Password (op://), HashiCorp Vault, or AWS Secrets Manager, resolved at connect time so the secret is never stored in TablePro.
15
-
- Team plan: publish connections to a shared folder your team reads from, without sending passwords. Right-click a connection, then Share > Publish to Team Catalog. Teammates add the folder under Settings > Linked Folders.
16
-
- Team Library: share connections and saved queries with your team through your account instead of a shared folder. Right-click a connection and choose Share > Publish to Team Library, or publish your saved queries from the Favorites sidebar. Teammates see shared connections in their connection list and shared queries in their sidebar, and you manage the library from your account on tablepro.app. Passwords are never included.
17
-
- Saved SQL queries and their folders now sync across your Macs when iCloud Sync is on. Toggle "Saved Queries" under Settings > Sync.
18
-
- Recent section at the top of the sidebar tracks the last 10 tables you opened per connection and database, in every sidebar layout, and remembers them between launches. It records a table when you open it, not while you arrow through previews. Click a recent table to reopen it, or right-click to remove one or clear the list. Off by default, turn it on in Settings > General > Sidebar. (#1352)
19
-
- Saving now asks you to confirm before it permanently deletes rows, so a bulk delete can't be committed by accident. (#1823)
14
+
- Custom AI slash commands now sync across your Macs with iCloud Sync.
15
+
- Join a team by pasting your invite code where a license key goes, in Settings > Account. Owners manage members and seats on tablepro.app.
16
+
- Connections can pull their password from 1Password, HashiCorp Vault, or AWS Secrets Managerat connect time, so the secret is never stored in TablePro.
17
+
- Team plan: publish connections to a shared folder for your team, without passwords. Right-click a connection, then Share > Publish to Team Catalog; teammates add the folder under Settings > Linked Folders.
18
+
- Team Library: share connections and saved queries with your team through your account. Right-click a connection or use the Favorites sidebar to Publish to Team Library. Teammates see them in their list and sidebar; you manage the library on tablepro.app. Passwords are never included.
19
+
- Saved SQL queries and their folders now sync across your Macs. Turn on Saved Queries under Settings > Sync.
20
+
-A Recent section at the top of the sidebar lists the last 10 tables you opened per connection and database, and remembers them between launches. Click one to reopen it, or right-click to remove or clear. Off by default; turn it on in Settings > General > Sidebar. (#1352)
21
+
- Saving now asks you to confirm before it permanently deletes rows. (#1823)
20
22
21
23
### Changed
22
24
23
-
- The sidebar filter now matches table and view names by substring and prefix instead of fuzzy matching, so typing the start of a name narrows the list instead of keeping every loose match. Names that start with what you typed sort to the top. (#1822)
25
+
- The sidebar filter now matches table and view names by substring instead of fuzzy matching, and sorts names that start with what you typed to the top. (#1822)
24
26
25
27
### Fixed
26
28
27
-
- Typing in the SQL editor no longer crashes the app, and the autocomplete popup appears again as you type. A hidden background view kept reading a character position past the end of the text during each edit, which raised an error that both quit the app and stopped the keystroke before autocomplete could open. (#1835)
28
-
- Deleting many rows at once no longer freezes the app or the machine. Multi-row deletes now run as one batched statement, chunked to stay within the database's limits, instead of one query per row. (#1823)
29
-
- Deleting rows from a table without a primary key now matches on every column instead of treating the first column as a key, so it won't remove other rows that happen to share that value. (#1823)
30
-
- Sorting a table column no longer discards your rows-per-page setting. Clicking a column header to sort, or clicking again to clear the sort, now keeps the page size and returns to page 1 instead of loading the whole table. (#1826)
31
-
- Sorting a column no longer fails with a SQL error on tables whose name contains a word like limit or offset, for example user_rate_limits. (#1825)
32
-
- Elasticsearch connections using Username & Password now show a Password field, so basic auth on a secured cluster can be set up. It was hidden before, leaving only the Username field. Update the Elasticsearch plugin to get the fix. (#1816)
33
-
- Switching schemas on an Oracle connection no longer hangs on an infinite loading spinner. Oracle now switches by schema like BigQuery, the sidebar lists every schema with its tables loading on expand, Oracle queries respect the query timeout setting and reconnect automatically after a timeout, and a schema load that fails shows an error with a Retry button instead of spinning forever. Works with an already-installed Oracle plugin; updating the plugin adds the query timeout enforcement. (#1807)
29
+
- Typing in the SQL editor no longer crashes the app, and the autocomplete popup appears again as you type. (#1835)
30
+
- Deleting many rows at once no longer freezes the app. Multi-row deletes now run as one batched statement instead of one query per row. (#1823)
31
+
- Deleting rows from a table without a primary key now matches on every column, so it won't remove other rows that share the first column's value. (#1823)
32
+
- Sorting a table column no longer discards your rows-per-page setting. It keeps the page size and returns to page 1 instead of loading the whole table. (#1826)
33
+
- Sorting a column no longer fails with a SQL error on tables whose name contains a word like limit or offset. (#1825)
34
+
- Elasticsearch connections using Username & Password now show a Password field, so you can set up basic auth on a secured cluster. Update the Elasticsearch plugin to get the fix. (#1816)
35
+
- Switching schemas on an Oracle connection no longer hangs on an infinite spinner. Oracle now switches by schema, loads each schema's tables on expand, respects the query timeout with automatic reconnect, and shows an error with a Retry button when a schema fails to load. Update the plugin to get query timeout enforcement. (#1807)
34
36
- Resizing a data grid column no longer triggers a sort. Dragging a column edge only resizes it; clicking the header still sorts. (#1815)
35
-
- Hidden columns stay hidden. The columns you choose to show are remembered per table across sessions, and resizing a column no longer brings the hidden ones back. Column widthsand order are remembered per table too, now kept separately for each connection, database, and schema so two tables with the same name no longer overwrite each other's layout. A Reset Columns button in the Columns popover puts widths, order, and visibility back to defaults. Existing saved column layouts (widths, order, and which columns are hidden) reset once as part of this change. (#1815)
36
-
- Query and filter errors now appear in a banner you can read, select, and copy, with a Fix with AI button, instead of a small dialog that cut the message off. The banner sizes to the message, staying a single line for short errors and scrolling only when the message is long. (#1815)
37
+
- Hidden columns stay hidden, and resizing a column no longer brings them back. Column widths, order, and visibility are remembered per table, kept separately for each connection, database, and schema so tables with the same name don't overwrite each other. A new Reset Columns button in the Columns popover restores defaults. Existing saved column layouts reset once with this change. (#1815)
38
+
- Query and filter errors now appear in a banner you can select and copy, with a Fix with AI button, instead of a dialog that cut the message off. The banner sizes to the message. (#1815)
37
39
- The filter autocomplete no longer pops up on empty input, and pressing Escape to close it no longer also closes the filter bar. (#1815)
38
-
- The editor autocomplete popup drops below the line you're typing instead of covering it, no longer overlaps the Columns and Add buttons on the right, and dismisses when you click anywhere on it that isn't a suggestion. (#1815, #1831)
40
+
- The editor autocomplete popup drops below the line you're typing instead of covering it, no longer overlaps the Columns and Add buttons, and dismisses when you click anywhere on it that isn't a suggestion. (#1815, #1831)
39
41
40
42
## [0.55.0] - 2026-07-04
41
43
@@ -2452,7 +2454,8 @@ TablePro is a native macOS database client built with SwiftUI and AppKit, design
Copy file name to clipboardExpand all lines: TablePro/Resources/Localizable.xcstrings
+120Lines changed: 120 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1914,6 +1914,16 @@
1914
1914
}
1915
1915
}
1916
1916
},
1917
+
"%@ requires the %@ plan" : {
1918
+
"localizations" : {
1919
+
"en" : {
1920
+
"stringUnit" : {
1921
+
"state" : "new",
1922
+
"value" : "%1$@ requires the %2$@ plan"
1923
+
}
1924
+
}
1925
+
}
1926
+
},
1917
1927
"%@ rows" : {
1918
1928
"localizations" : {
1919
1929
"tr" : {
@@ -5928,6 +5938,9 @@
5928
5938
}
5929
5939
}
5930
5940
}
5941
+
},
5942
+
"Activate a Team license to publish to the team library." : {
5943
+
5931
5944
},
5932
5945
"Activate License" : {
5933
5946
"localizations" : {
@@ -10539,6 +10552,7 @@
10539
10552
}
10540
10553
},
10541
10554
"Ask AI to Fix" : {
10555
+
"extractionState" : "stale",
10542
10556
"localizations" : {
10543
10557
"tr" : {
10544
10558
"stringUnit" : {
@@ -14558,6 +14572,9 @@
14558
14572
}
14559
14573
}
14560
14574
}
14575
+
},
14576
+
"Choose a shared folder for your team's connection catalog. Teammates add this folder under Settings > Linked Folders to see published connections." : {
14577
+
14561
14578
},
14562
14579
"Choose AI provider and model" : {
14563
14580
"localizations" : {
@@ -14670,6 +14687,9 @@
14670
14687
}
14671
14688
}
14672
14689
}
14690
+
},
14691
+
"Choose Folder" : {
14692
+
14673
14693
},
14674
14694
"Choose port automatically" : {
14675
14695
"localizations" : {
@@ -21387,6 +21407,12 @@
21387
21407
}
21388
21408
}
21389
21409
}
21410
+
},
21411
+
"Couldn't publish to the team catalog" : {
21412
+
21413
+
},
21414
+
"Couldn't publish to the team library" : {
21415
+
21390
21416
},
21391
21417
"Couldn't reach the plugin registry. Check your connection and try again." : {
21392
21418
@@ -25155,6 +25181,9 @@
25155
25181
}
25156
25182
}
25157
25183
}
25184
+
},
25185
+
"Delete %lld rows?" : {
25186
+
25158
25187
},
25159
25188
"Delete Check Constraint" : {
25160
25189
"extractionState" : "stale",
@@ -25644,6 +25673,9 @@
25644
25673
}
25645
25674
}
25646
25675
}
25676
+
},
25677
+
"Delete this row?" : {
25678
+
25647
25679
},
25648
25680
"Delete token?" : {
25649
25681
"localizations" : {
@@ -30202,6 +30234,7 @@
30202
30234
}
30203
30235
},
30204
30236
"Enter your license key to unlock Pro features." : {
30237
+
"extractionState" : "stale",
30205
30238
"localizations" : {
30206
30239
"tr" : {
30207
30240
"stringUnit" : {
@@ -30228,6 +30261,9 @@
30228
30261
}
30229
30262
}
30230
30263
}
30264
+
},
30265
+
"Enter your license key, or a team invite code to join a team." : {
30266
+
30231
30267
},
30232
30268
"Enterprise SQL with PL/SQL" : {
30233
30269
"localizations" : {
@@ -36074,6 +36110,9 @@
36074
36110
}
36075
36111
}
36076
36112
}
36113
+
},
36114
+
"Fix with AI" : {
36115
+
36077
36116
},
36078
36117
"Focus an already-open tab by id (returned from list_recent_tabs)." : {
36079
36118
"localizations" : {
@@ -42568,6 +42607,9 @@
42568
42607
}
42569
42608
}
42570
42609
}
42610
+
},
42611
+
"Key %@ was not found in the secret JSON." : {
42612
+
42571
42613
},
42572
42614
"Key File" : {
42573
42615
"localizations" : {
@@ -60111,6 +60153,36 @@
60111
60153
}
60112
60154
}
60113
60155
}
60156
+
},
60157
+
"Publish" : {
60158
+
60159
+
},
60160
+
"Publish %d Connections to Team Catalog..." : {
60161
+
60162
+
},
60163
+
"Publish %d Connections to Team Library..." : {
60164
+
60165
+
},
60166
+
"Publish connections to a shared folder your team reads from. Passwords are never included." : {
60167
+
60168
+
},
60169
+
"Publish Saved Queries to Team..." : {
60170
+
60171
+
},
60172
+
"Publish saved queries to your team?" : {
60173
+
60174
+
},
60175
+
"Publish to Team Catalog..." : {
60176
+
60177
+
},
60178
+
"Publish to Team Library..." : {
60179
+
60180
+
},
60181
+
"Published %d saved queries to your team." : {
60182
+
60183
+
},
60184
+
"Published to the team library" : {
60185
+
60114
60186
},
60115
60187
"Purchase License" : {
60116
60188
"localizations" : {
@@ -64336,6 +64408,12 @@
64336
64408
}
64337
64409
}
64338
64410
}
64411
+
},
64412
+
"Reset column widths, order, and visibility to defaults" : {
64413
+
64414
+
},
64415
+
"Reset Columns" : {
64416
+
64339
64417
},
64340
64418
"Reset Layout" : {
64341
64419
"localizations" : {
@@ -67232,6 +67310,9 @@
67232
67310
}
67233
67311
}
67234
67312
}
67313
+
},
67314
+
"Saved Queries:" : {
67315
+
67235
67316
},
67236
67317
"Saved Query" : {
67237
67318
"localizations" : {
@@ -70235,6 +70316,9 @@
70235
70316
}
70236
70317
}
70237
70318
}
70319
+
},
70320
+
"Share connections and saved queries with your team through your account. Passwords are never included." : {
70321
+
70238
70322
},
70239
70323
"Shell script to run before connecting. Non-zero exit aborts connection." : {
70240
70324
"localizations" : {
@@ -74124,6 +74208,9 @@
74124
74208
}
74125
74209
}
74126
74210
}
74211
+
},
74212
+
"Starter" : {
74213
+
74127
74214
},
74128
74215
"Starting service…" : {
74129
74216
"localizations" : {
@@ -77320,6 +77407,15 @@
77320
77407
},
77321
77408
"Tags: %@" : {
77322
77409
77410
+
},
77411
+
"Team" : {
77412
+
77413
+
},
77414
+
"Team Catalog" : {
77415
+
77416
+
},
77417
+
"Team Library" : {
77418
+
77323
77419
},
77324
77420
"Template" : {
77325
77421
"extractionState" : "stale",
@@ -77949,6 +78045,9 @@
77949
78045
}
77950
78046
}
77951
78047
}
78048
+
},
78049
+
"The catalog location is not a folder: %@" : {
78050
+
77952
78051
},
77953
78052
"The ChatGPT account could not be identified." : {
77954
78053
"localizations" : {
@@ -78671,6 +78770,9 @@
78671
78770
}
78672
78771
}
78673
78772
}
78773
+
},
78774
+
"The secret manager did not return valid JSON." : {
78775
+
78674
78776
},
78675
78777
"The selected backup file is not readable." : {
78676
78778
"localizations" : {
@@ -79069,6 +79171,9 @@
79069
79171
}
79070
79172
}
79071
79173
}
79174
+
},
79175
+
"There are no connections to publish." : {
79176
+
79072
79177
},
79073
79178
"This %1$@ has no %2$@ yet." : {
79074
79179
"localizations" : {
@@ -79892,6 +79997,9 @@
79892
79997
}
79893
79998
}
79894
79999
}
80000
+
},
80001
+
"This permanently deletes the selected rows from the database and can't be undone." : {
80002
+
79895
80003
},
79896
80004
"This plugin is not in the registry, so it can't be updated automatically." : {
79897
80005
"localizations" : {
@@ -84189,6 +84297,9 @@
84189
84297
}
84190
84298
}
84191
84299
}
84300
+
},
84301
+
"Upgrade Plan" : {
84302
+
84192
84303
},
84193
84304
"Uptime" : {
84194
84305
"localizations" : {
@@ -86920,6 +87031,9 @@
86920
87031
}
86921
87032
}
86922
87033
}
87034
+
},
87035
+
"You have no saved queries to publish." : {
87036
+
86923
87037
},
86924
87038
"You have unsaved changes" : {
86925
87039
"localizations" : {
@@ -87172,6 +87286,12 @@
87172
87286
}
87173
87287
}
87174
87288
}
87289
+
},
87290
+
"Your team can now see %d shared connections. Passwords were not included." : {
87291
+
87292
+
},
87293
+
"Your team will see the names and SQL of %d saved queries. This replaces what you previously published." : {
0 commit comments