From 1f04a3c6a9a97fc9302f169402365c041b29e1cc Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Thu, 5 Nov 2026 11:34:31 +0700 Subject: [PATCH 1/2] docs(linux): add guides for the first beta --- docs.json | 17 +++ faq.mdx | 4 +- features/licensing.mdx | 4 + images/linux-connect-dialog-dark.png | Bin 0 -> 25572 bytes images/linux-connect-dialog.png | Bin 0 -> 25575 bytes images/linux-data-grid-dark.png | Bin 0 -> 22188 bytes images/linux-data-grid.png | Bin 0 -> 22105 bytes images/linux-shortcuts-dialog-dark.png | Bin 0 -> 28987 bytes images/linux-shortcuts-dialog.png | Bin 0 -> 28997 bytes images/linux-sql-editor-dark.png | Bin 0 -> 25543 bytes images/linux-sql-editor.png | Bin 0 -> 25408 bytes index.mdx | 4 +- linux/connect.mdx | 124 ++++++++++++++++++++++ linux/data-grid.mdx | 68 ++++++++++++ linux/install.mdx | 86 +++++++++++++++ linux/keyboard-shortcuts.mdx | 138 +++++++++++++++++++++++++ linux/sql-editor.mdx | 87 ++++++++++++++++ linux/troubleshooting.mdx | 124 ++++++++++++++++++++++ 18 files changed, 652 insertions(+), 4 deletions(-) create mode 100644 images/linux-connect-dialog-dark.png create mode 100644 images/linux-connect-dialog.png create mode 100644 images/linux-data-grid-dark.png create mode 100644 images/linux-data-grid.png create mode 100644 images/linux-shortcuts-dialog-dark.png create mode 100644 images/linux-shortcuts-dialog.png create mode 100644 images/linux-sql-editor-dark.png create mode 100644 images/linux-sql-editor.png create mode 100644 linux/connect.mdx create mode 100644 linux/data-grid.mdx create mode 100644 linux/install.mdx create mode 100644 linux/keyboard-shortcuts.mdx create mode 100644 linux/sql-editor.mdx create mode 100644 linux/troubleshooting.mdx diff --git a/docs.json b/docs.json index cbb9098..0dac29f 100644 --- a/docs.json +++ b/docs.json @@ -415,6 +415,23 @@ } ] }, + { + "tab": "Linux", + "icon": "linux", + "groups": [ + { + "group": "TablePro for Linux", + "pages": [ + "linux/install", + "linux/connect", + "linux/sql-editor", + "linux/data-grid", + "linux/keyboard-shortcuts", + "linux/troubleshooting" + ] + } + ] + }, { "tab": "Developers", "icon": "code", diff --git a/faq.mdx b/faq.mdx index b7a2ab0..bb767da 100644 --- a/faq.mdx +++ b/faq.mdx @@ -91,8 +91,8 @@ Through iCloud, with a Pro or Team license. Sync is off by default and each cate Yes, for iPhone and iPad on iOS 18 or later. It reads the same CloudKit data as the Mac app but carries connections, groups, and tags only. See [iPhone and iPad](/ios). - -No, macOS and iOS only. A Linux port is a prototype with nothing to install yet, and there is no Windows build at all. Progress is tracked on [GitHub](https://github.com/TableProApp/TablePro). + +Yes, in beta: packages for Ubuntu 26.04 and 26.10 and Fedora 44 and later, and a Flatpak bundle for other distributions. It is a separate app with its own [engines](/linux/connect#engines), and none of the [paid features](/features/licensing) yet. See [Install on Linux](/linux/install). diff --git a/features/licensing.mdx b/features/licensing.mdx index 4b047d9..4347f43 100644 --- a/features/licensing.mdx +++ b/features/licensing.mdx @@ -22,6 +22,10 @@ There are two tiers, Pro and Team. Team includes everything in Pro. Starter was | [Team Catalog](/features/connection-sharing) | Team | Menu item hidden | | [Team Library](/features/team) | Team | Menu item hidden | +The [Linux beta](/linux/install) follows the same licensing model as the Mac. The paid features listed here are Mac-only for now and come to Linux later. + +The activation instructions on this page apply to the Mac. + **Settings > License** lists these features under **Pro Plan** and **Team Plan** and marks each plan your license includes. On a Pro license, **Upgrade Plan** sits beside **Team Plan**. Everything else in the app works. The **Activate License…** dialog also links to the pricing page. A license you already hold never gets that offer: every gate says what the top of **Settings > License** says for its state, so an expired license offers **Renew License**, a suspended one says so, and one that has not reached the server in 30 days offers **Try Again**. diff --git a/images/linux-connect-dialog-dark.png b/images/linux-connect-dialog-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3a47b27b02eb9cc8a72f735bbbf1155da38a38 GIT binary patch literal 25572 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
-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

&?#6OoPnh~=8WbcyAJhn)Ti_3Vd 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 literal 0 HcmV?d00001 diff --git a/images/linux-data-grid-dark.png b/images/linux-data-grid-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..15e8b1293095bb6eef07775315566168931b2052 GIT binary patch literal 22188 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 literal 0 HcmV?d00001 diff --git a/images/linux-data-grid.png b/images/linux-data-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf082e4bdc87a0d273937b74658ca8568577721 GIT binary patch literal 22105 zcmeIaXINC()-8soJ&oT62y$#+Y;O8;4aD z=l{C$S1vBD`AP@&s&jG8Sjks@HA~S zFKJ6+QrlAcvFsCzlCSKlR#~dkP&0U3+e9B3bMJesh{K)yJBa*3P~ zW0JlzMspKRgR7~pwVRv|*B`fk!k@c-zC(WadG{jn*Y5|&uU7q}M1Huk>KFWZ@wc_J z@YjF$eZO5=OFsK=kN53;Ur&Ndpe(H@?4NWdBM(k$vPR=>;ju$DP7Y+D<={BgfG}*34Byu7dd{-7I#pkPH`2XB;vW~j1gEuGi$i|7swe4AL+fa1sqD-_i|;D^ zs$56@`LpCde&R2->fdiEzbRJft|2+vs=|M|*Wc~Ux0C-C6T^qyv~-o$`*qF5KGDds z4GZWLQvb7KeG887;_LhGr1<$Aj2tG1=Q^?f-$dqjpZpfV4?PBxOAm?%s!$HBUBp^~ z!#rfZJ85D3A06xaEB~vrWd#OnZi?h3r}^`D+xZup^DU3Qo$a?JkiSdw*Sb?+!rHys z_fs@Ej;rD_Yrg;NSl@E!pMU44;?@ZDjoIYzyYBn`Uu1pfqp7%*J1XnT7B0GRMPW9M z(PKn>Ygpc! z+jsnD$NCzN|8?bmf#MHo1xk_XPUP?xx32jIDF3%-`)vt6?U~RqUl*tnCA4_oW08TK&J+| z+?+L@8D9U{vA)LR_euI)^mYCXomkqxO53jl;ji}TuZYCA_x%l>Sj~R{6@OK3{spP} z8#=L^e-(oNe9iubPOgjpAB0YC<%vwLCWAH!+Jp+-bidci5eCz3Okn5zc)j!nXJ&R{ z?zGe1V4G5=Nnzex>j%*-QjvOAirkg|15aB>?3&3 z+H@%4H#uu(UC;5YJ61bqm(U$QzwpHm!-Z)sNoi?m3_oon*VNE~b-!>u0=s0+!T%55 zTq;s4?^voN+_mER$4e2^y0ojS3IZa;l(_!zTFceoZ}I%|wdUsLwBjX8mm0XUN1W!o z2v|$7^yu1Mc0Y3aYFTA?) zi*Sfd=`X^;w{cq~ii(Q5G-_Sy*{YY9=kl#wxj;ZhQ(s?SS65eGU+#R< zi)Y69s`s~^m>M4lSM*W1Cv-|#S(){Cw6_M#eI*}X(1QnqgM+`~#m)WU!v~LfE5uK} zx&CO6$7qkwLr!S>#}L`7IGyBEAMOngR8>_)=l)cBIXWW3LVi~@$vDqXV3m|?gF`qR=<32 zfl1M4?W^(py&y%CEp-$Z~ z*u;@fkM@-4yeR+l>9B^zPTdjr6FO8#GE?uROv0Cv?Lq$@2 ze0+_g>{F*sEf!V{7C-gAFi?W7Dw4VUxQ?TBw05Pe!-H&-;!t@t3VS$gpQl}a{Y2Vj z(~<6qK;`k?U(}xWVT=!CJn_m3sIMmJ_Np#O1Z}y~2eO}1BY}u%%pZrjv z#L&=?JG;k7N=ho-H76%$T9Lvk3CJ0a)KJ|SDcmO{W78RsJJmMW_Cc0iL7ONvya(}2)Sxg=~$|q$Z7bX-J zA8(L)rUILVy$IdAdYkiTZ=i(fs5&$IgPL{6$B;3GedC>V$})4}O1vJoO;0j&In$G- zh4-yq&zHI-C@<6FQB_;ZD%VhxA8)#xnwpv)r^f1?J)0EZCIOo-O)nd#N7K7j?6*qE zC}{Dain)B|_V@Q^H^&uAx7-qQ8}Q5>&l9UH%06Re_I&80Z0?tZ?LP`QjmugBBQ4~mM47AlN4;j|jMn{E}^Pd|h z8^)aOtlk%-^GhRVdQ7%*Pgio38qKZjkd$rkzKZJV@njnNTuss`MSG58M~J=MgVjZ$ z@{@~c<9jV54#?W~PgS|ItAs-x!aAg~S9mVl!U}Mo2sjk9W8{m)RC+GEFT}o~X2@Zk zG4_&tfsoty=NyUKtP%5m27N58&ceCXSJ5eSb)H^XQmA8lAZN&Zx_Gp&F1hqLmD)#5 zXV`7lh){6eJ?qQI_g{57yCTPR((TJ-q2Aim*cRohSFbKzx^#`A_vVcoH*Ve>mzby) zsV*rgiNNV^Zhw-H&@W7xD3Hn-@IrczcnV7QrIcCZOti}~vyvY@`hD8YyMklRa9ukYD=KNF9Jn@z(Nf=c=D3B_&+RdOz*KnzAI>Q%YQ2m|z!011&Uq|s3bru0U)$@U35cL zIR*F*VL6+7S=Qitk&yKVV>G+9b6FMXIV1771h&eABLl+{z<0$Q?+U7qb12 zJOpdA9IaDop7sJHbDA!3XD+yi6OU2}1QOppo0vVCK<{@Nsn8Bj{x#J{e)O1SJ!|w% zfuC^Wg%4W@PS(wyzh%o7&VUf7q`Z9i&xJ0l8Z30*`?w8<&*$4=b8C^p=rbRK^Dk$Y z$VO7#0HgLYW52If1(wGqWS&7~W|%+8%5tehp*&smBr(yw`G)ZHU_h=(W^>ca%K(55 zU%@&6sjQdw;LwoR^QKFlVmS_PuJeR=CxnHCp>RjXN*Y<^Ed}C{T9D;9By)OK*ETs< z*6@wR!fCF9x$JaKW!LZVx~Wf$*LXNvH&Tk?=7qkFJP;jx;XTr#rs&Slo@?`V);B4s z9l0eKx8fZAxtNsH*pEWvFWLf(8oC61GcqzR&t0fsD7ImSQ8VL^A9ADB#wDkJpxTwL!SA=anay!u}N#GIaE zj!#lkN5~1tO6G4pa_Wqye< zW{b65KXV&Nf4;IfOe%RK$8qTW+%^2?;ETY>?WTabE$Q_ambe!d7ZtJTxs&wd zk1`@Mdb7q*oJSKCR!CXY$EP>cnv-C0Hw&Vtl42{{|2*9I=3N?%lTqxNFs2@XG{NeL z3D8JAt;(Gq38!}zEtfvu#GCWwDng~Z(`~9mQHV;VdMy~)*ijg0ZNv9E;NHCko3cY8 zm9Yoc`%#4}1(exi+sArq%DS3X$T@te${9@!SN0X3Gk@hUikAX?>C0;i1Xx9uZpqpj z5jifn5?J}2vIzFUz+#su;j8-;25zX`;@^q26w4VuncL$9^x0|M4r&+CqD(6Aj|=5K z^%t-w#{hJF0?aSm+}ydtkzyfMZ&zeLIGGZky~r{?Fms|kDEVmD6!^uLBX{i%Myd-) zWr=Lr!mjU7sPbbsSzB8J$<-DJDP*-MCj!Tw32kDtwhKA7`XVO0FOPzn3Ch}?({jrr zxZUQjeL6B`YHA9o8B-QJ$T-kYDryeq(Br3EY6)4TNr?T_u{WcUP&Q7FvgY3KZ_Vxfnr;ReP-SVdk?{A(C>w)?> zV9)4Iu^3(#ps#Ld*zo%DMp4mzn?FBi+V*&}rMq&YYs$-0&VPQTO6eJB$v1uGnUK-` zpiEUZzN1ecnOJi(oz(*3@fbd=Ykq2#p)9y`Xu9>sogGuyhK5{s_k6uZRnPfjR%`a( z8n3O&vC9{*@2!3o&QL~eJ$vrlRHq^()1KL&+IUz?YqU+weJ9=4S5`OM$##=}w?nn1 z-jb;Uk)BsMOb$C&HsP~O@HXSOE(4xM=f+x^d(_pDj#G!57=M zn!LMhT`Vu9cUBFdQfjrOF6vN_Q{sWci7OGT!8@({pSO5J0i`;36$sM^k;`>sCm7Jf z_S^_ebZHZ*33>IKN8p08fdU*Q-NWyLjHF#}HR$81q6d-;7tTB1HL?cX_m=`=L`6jv zpz5ajHYFQV{$Mf9?J|q%!B(pHE=OZm-`-jwP{n1}2qInK7kMfFC6;-{|1I6Y#fk)k zwzajLicMAJT+VbJ>z}Tp;Af-B+A0|Xjbve<|PwED0meV%~Ka5ew2{AP`biHYoh6Nesb-{|y|(u7Kq=Ei0{ zdGZ9+tG_Ot33NYn=#T*SynU3$InQ!~Pv<+NKYaMmazW^IXs%0NE7Y!GFGhcIb?wDj zKgwj&-4s>(aQ-!Co&enL=~+w+__$}`pwd&i{$!m6qHhm}W@cu3vuSw~r%FyNZ9Oto zUKy{~Q52N!FwhKM(=sm8Z694@_2sU=e_Lzo-o!0so`OpbbQkytner}~k*D^D&CSiD zOVmsx4|G4zbKpPC7toAg z$wqobz!?Lc*BFveV;D zZT61#GbY`UK#ZhQ%DhZ-DmA+&flg?v^tHwBYvrMEld3%gWFJjh=5&NQH_Vq+A89P> zm3G|fe{jSwrNpZ7b*G=i_DLczNRMP7!RTm})!V}$a%oSxb6DN6H8SO3iVUlK0Rbs9 z&yPtFjqHAVFa=&ihtJzOU-PWlpCS_I()sDp7QHl3ryMCa1KyEGGEsA&^K7EULO@{P z0o<3iYJPg+^+9E2?q7fPwy+%0v&+iq_H5$uQ3MwhOmsvqm(cRJy#3#@_N- z4ztA~3CkwXe!TUaufW&=6bGGO?m*TXI(0>!yE>aP{&JyAL*YU}x$zc|M0hWBlpj0$ zmRt^-si&tWmf0EB(Es|E#p|=+67+@YXIwZX#u$TGejLPffjmR~4&Sq-qu90I8YJSN zNqA22G<&jfU|W5n+R&B7s>jmK>ClCFMfI!scB?~ybBkqt8q2*qBgbH{aDf!qxm?J* zxm3q|3W~Wl*;K8#4$9;MFuHQvzD;6cGzrs>(80LaO4TvH%*lQ_sAle{olvODV1WQl z|LO7FmYS{!Po8u;__#`kXC@A*aqq@Amsg)>-Cex7-DTy@pc&?5ti5 zk4h381a^lvW!i%>bz*vIBD>ZjI>b&l|B0xqU9ZDvjp>>?iG!tOahVg-c4wnjhoz+0 z0Iq6eLPKrNMLYWm7;Nm!ad}{Q7Iuoj>v}L~$VS;DgI_vBo%_3ZjSjkwg8akXdI6#< zqveH=>^m{19Ckyj5&H>jC=ZWx3r6M)agg2Pu^Yu&5yMb^k)Qd@HufPHe{IX_?ORC_iH~}w->IEu`$aJ=*M0u3OYsvu+G1` z{W~d?<5QvX&N(<8F`c9cVJ{&tH9~(uDwiwfOdhp)H!cW$+^I8b#6!@j6C_zjLqkKY zb_G~XzAz0qyu)I1ozI9}+A|k13@+0Nm#Zo(VOiy)C+&dq6z=;TV4$_l{Cq3UCdVH-70e6$zDzSz{X1P2Fu z_pA=Dvpv6{N?XzCoa@APy8Ex-a;Kuj;tlAd?(9U)2z)e_msCUNbT6U56GI*DEqsm7 z0k^eL&jO6x9Ni}jyDy_G<;S`haD5R?2gN9MX_v@vSLlFPQ&5oUgL(0W!Y-rOX7yN5 zsjf|b&JA^Ab=4%B((qS^=nE`k1I(89{vu?_?e-m8uNv%-w^Tc8YVd=i%~oz+(J8Ru zGAoZL(M4gZLs4}W^!S!a?XgC8cQ}8RF6WU)oN*t{I4pqNvV+?{+yh#ltAUfc^=xGv zVKAU=1}2N)QWTh6fTgD#AWD@IJ_}fvYIGTbFenY#BZCAYlFmj&2rk%Iv!_@nxFFIu zc2_O$CcJwlN?<(5`h8(=SDZhtOWc*ZD-qECBOAvg7Qw)Pfx%< z-Mo2o;fD_(nCHyQs_FJjIJ7v+A{f94dg%$q9$91A%xp+2)(58q1&6OSWR+i*OE=Ip z-F-4$HCnE`yqpl~G5GZOhWuMAG_t;wZ|+Z}RJZ9N8l^ObzZmtK zxU}9Lpa}yNiEgQ7EX9zO3NGUyjuyG>Q3l;!(W7<)&b&(B`cNhPSy)&z$V~=Z8jTpu zXiJqQu01p{%+Q=1H@KT90C48qO2kx?Cof#MpfD1n z2I6V^OiJg_p(5B4E)fOiYN7BI0K%rRb0(gZRDn>E-m^(C;u6tA$PWFO0x$xvvXDyj z2rM(&?ybq*<2+a(%<0LUj%}HBYo%m2ioqF2#|fU)dj)r3$yD@5dI-5ahqA3bn^@!| zF!-NJLa3hVP^!-Ee}wW@LsFTdLyi`4Hgj)m-GH4 zHLAY89@MEn>4T`}N4w|BxsQt7#70tQ+(|yJclTixkoq8KKwCx0s*tKbzXwtL_;Dver-=?4#lF8D zovdu(Lq+$uwX6}EI1pVClNl2c(fYw?dXPA6O_vw;H|FLFOP(ds3$_15SV&P8m5*qb zek=vd{L!Z|pbv^?${!yg(DFd?Y+_d?tI{;F#49XbWLDsi}$c7K+GV!)BZVuU zBgG*css<*AxEzT!5|BQBd|~m1kaY~ZI;uc&1o{Q3DJk_1Ene9rerR1}ja2F(*I(pPE7jxx!oN(+&?5KND|%q+G+kuQt`B;7$cP7^oyvsYiUkfboHr z=tDtv?SZCtE3ah387-+9eC9S#QErb+^Oo4@5&L#7*Bf8vJvK@Qw5eTBWjxaMK&1No z`SX#>KhBxAeCzQSz%*f%`{yBGR72$^&hwq)v7~NK!=;i9%*=EGUH~_VMBTGz4+w;n zl@;WYl2XCL-Irl}O1VvqgEoVb4L7_juc*jIw*y7A7StAW;mnyc-90@)4<6JC7DC76 z`@k`s8Xq1#<8k&3u1VlS|4g%CL0nqeXoa>B1LPG213rL(k&!zZ7{J(9uU^6R!|PAL zxsZZO;r(se`d0fm@oX+e9lmw*)X7U6@Q7}noq<;lj?LFNzTef= zmEHl*t^HhlgtPq&uiLo#AI8*%?TH=5D`v~GE0kIen>J)=3j}DWMor@c~UYtQO&V^$6F`L5sVRcup5CsE7 z&g>b6)n8z1_Bw@ za893Y1~SMRdc(kyI*M)$Gt5)8bb@OYrX?TJGO%Sm-QCMJANwt&uPO~y8G)v_*TSOz zI?tN-=ySe*55yoWYeLB&#GqRNU5X`|r%ts&^pJKK;<)qJ*Hg-m#kL{3`%z@#V`J-3 zkx5{J`+zyX3nWDtnS(ACUXG5A=+>f{gOu7JCPw^BtQ?4!^odtjl9I$3KhKO9H8H}W zkkBvyf|o4ix^1iF`Xd?e$WN%=fxl;<7=QiMkj!^OTi;E8G#QBg|9bB3x;-<2$~DXj z=Lp?#2HI!ny`h(NSX;Y_Fthq#XghTMX*45bJyHCI3g~VT)`H%Cbhh&pcxa*AG-+dL zYDTDamP5DGU^O5~y_aum2K@7HH@mGci^T7FxtN3mLjW+gJ}4+iHV1^MwzRagyj;`B zDA%+&6ue@12vzFF-jm(sF#x1;k6pFE=v3IO*Q-G)2wp=F9;3~SK}jnB5lKUtG<maxU>2sNTke9 zgnjMe=UwV6=sH}Ya`SFLfD}3=F&fc!!t>5pSR~-eGi}UI2i5_%$=CB)Jb#(B)**oY zuHO+N_yKmxf*`YD>iK!V{Gz%qJBP7sfbsT%YWfwSZPAp#s-U?kX6_MH*&J)rM0kQeBlpp)E= z++r;w6SEQFeh1dttlK4&0!%GzL5dEyI!{AGRRc{}G@wur45QBtSs=F99n=C67BIdf zCEMEDL7A5F@*-SFyE7^20#0=2&YdNFwFPJ%k)a#(>@m53Ns!XAa0ST1{Ldn@qJ2(q zrrCG{Ot&-U=J3-th>8ksH~WO;1WUyg28k|M%198cf4yU&_Oi^33`fv)QuI>KYNK5N zK5J-bh&l;e0Juab`2j@f)>lwQ8xSI-6f+w_`X^A_AR2AXBA&pV(FNv5ar9l5iOqn7 zGiLpa^S(W;BB3Y^)5b#ZM3gYdMzG-TfZZ;2eIU-db?aatCp><<92y(3VW0Udgmmed z!xN&{-q&@1cKFEZvfp<5No;Ht24D~=KrSpyWL@0j$FN*qLDhZgdUuXWWk50pS>|M5 z5#grd#2^{4UY}oks6E(jj#ieUO^9HSl^_qkn{UUtYE*YD8^lWco{b_Rq!V_3n=yKo zw~>jAo4wgqt|Km6`9I9Mm#6mIMPo4xu0~S1@{?_v?$|*nhHf8uw9vJantTnWJ^HII zSZ;xZEg%RnnrF}f?J8=)ijnCL(4h%xcra!<_Ce%#M68sKCkM zg$vU@dX&5a<2Fc57>S*kts0goHE9D&MYJ~K7mT%u_wL<;3PReRgG~DT>Z;%RLr&;@ z8R_aeJ-6FoQUBbmBn-P_Tl;5VC0VpMoy9zumS8#-JHPc7s0&#GU$Bi#WC)(XKI4V( zd3BXrSS^%zgbS8$ZF=mS^oYDppx6PkuG1YYcnQ;j9~WB4^DY`d4bD8bGqFnIrH-%|tJz%U8v<*J6rz{!bQV)KDDQo(omk@nnU%P6~N2GGMStF{%? zYsMMny0sSuW)FL!F@a=NvvK;dEYFpRofW0`Ccz1`8Tbf;BHiF2ufepyG};{XFfFBg z9zg(>gzZa&UeDt-l7nGuTzNVr@aQ&3&qBFGX_vccFzvd#yGe7ptnV4j->YpO0)$FB z2uR{&RRhJ_00%uMHyv_yWy2#IO;cRXgJ0DlIXo1GAHAkF5q(bPGA89S+&R-7G@FU>~h$DwY>3GRq! zMl0!E3)z~UJ{zp~1`9b*C{b)9yx7vr>{yn=0J;>I1qc{9uaOaFWR$&axs&b1Qv-{C zBEICX722!C_4CB^pFe&0uqg#w7&f9`l1-`NphE?x#e2uqOhvDiM|E^|!Vtjl8z6Al zD4x)D5RJmd6oe=dRjwE_;74OVdP|~Vwv69uFBBg592-PL&>}1Xd=yw_?QauN zC1A7?3bJL3yiF&@oD48}fl4Nkt*fm))*0^8aQ^lDKCPmxX;u%Fc>!F$Oi>yR0YDt- zjvNC=6_9f{k8Ff_S)WGLYrmzHXlS6X?*fq_*#EPTbMG^F7xr?mU?*s9I%;6RhO9cR z8;d4BCSk|`AV_)+RSmyJoSp$y@8ZE^p@xx>k+ya^Y7@eu(8Ld=1EVCl25N@36-TLj z#L5%*5ku647Vj!xIehHzQuJ6MgT|n8^Z|mb+s)Ns{bQs7@q+4&5tN|7BNZ5Zs<$qV z)c$>o{`0L^Q;huqr~syUd3hKDfsKJwrf%}TnI07kQoI-#i-XDD{8(5i?Q@-g!m+2T zrtS7z94>u@8jsz>5&%!5)MJL#-vBD$?r_*+Mrg(=$}dlHa~*kmyt85k(ztMA8T$qD zcN+9C(o$ScR~MFcMxG}x5jZF^sMWw{4{ra`s}zv?x$~BPvX%E0khM$6?h)OvK^l%F z{a9T^Y3U&P7g_LYal$-gnqs`grxCjpvaIS@l8Mq@6lnx~p25@&XV}_QW;khVH-O?s z_^Ha&>j&YC33wnMyY|U<>9yH}gd0+m<6%=rFpGf4U*H0}16ukTw!-QFv?EIt7DrZ8 zRZ$>O`zn{Gg=k`Ji8F5R%Be(?7nL2-JIZo>z!tq7#&2(_Qku!pG$KU3pJMm~;$96m zN||E7g^c1EqWNp!A_LD5-b&C;>(kM>!}3f=HDluz0Ca$uQD{OR)^-r>{nUtv2ykI` zsHoPwqgq;m1`|OIe8oBxwp}QO%h0Kt_2V2HnP2*mo%%4tNdu*}_JKtozA+aJq)fXK zoB(`>VRb#!b+m?fez0b8}UJLS-MxI(^#KLG)5 z!f&zwi!+F;J}C5>j9eNRgnV>GR|=BE3d$+c{fSiVIr}qRfhRF0JV{KI*QbOKgMPwl z3YY;pt$P^893)cRz16y?E;4JbUl&QtO7ir6uhP66zR~X8y8)$6PF1ACGWJ%{{t5_C z;NZ4C@28QGZJ5I-8a6RE?~;ULNd&MHhqm(-)TK(O93ekl^HT73xCKx*A?=}5A4k*{ zgA{(ohM)Wx1NF+$jiYzLX0`%t$h5(EiEA(@kr;%~WE3<$J+TKKAT(A2D!b}j6;;)b z;1i{}QbT&G7(+=*wan}sjq@48a>4tPmS{;tI~emYpnfNL{X{UX3B4!khG^R5|heUUVBXg0Q%@XbbmDrL~uN9Doxm`VDR@)&X+@F~Sfjc$N90Yw-Mf2(&g`WcQ76^g-3F<|8Ouz!Ir4jC zkfH;Io>IM*S0)(LbwxwX*rPGAP(UU{R#6(KKqhzsEz}ZAyZb!X^|VY>2Txz+HLSLE zY%wp3N{z3FHlYOtIhX9?wUu}7xh3(@jPEB%pwFF7sU0mYXq5)ec0weO>4?T1pOgrH zBW)5tr#_u5694=`v+ns@ZklQLhZ*_TPdCk_IKbD&G#3VZwb#HM#IWmdn*Cs)?NOd>n4$ zd7!c$9#Eq))lQBL7s8dnQnPiNh9VZX{t2|9cC-QnKMpmL?Er>`c?1E8(<-3RaGVx; zo)9SE3AL*=4-q_3$0KgrU7o-lYtNq!s`qX?ti4(?ovWRAH_oTS_&f{HwX;4f!c5|| z89W4Pbf5|dFOb=C@>%HlSHEBo`5-4*RvON+>FCBJEH`AHk5Ee2bu`!T1J6 zCo*n!u&QL2{pigz&hwD)cquaW1?sgmm?ej-dE%r1@>JNTLyv!h5kbO^hNl9+WzoBe z_|V8NdUyl67n?Sb#sO{#P?PD35IwDXs_kcI=|2D`cg^ik5=th6Qcu~-30*E@w!597 zQXXE%y`hYW7znY`mm*YlIPFamzgZhPiOlyIUcTtYn7G4kHi!xdho z`C-3Jqylc_HKJ|h+)TAs@0qV7RGi;5+-P_5NLK22{|2`weWhtO@*!*d{jC~aTl5wv z2Ilp|O3it_ZTayUR@4to0s&udh0L_gwZaZiQ0KecEoze5s;3$fL~>0GocO|x%i0mU z^u_~p-5szI;L}izDjK;S->MGWAnI= zr_?!9r}+8v=i?g^;?gL#5h5p&6+ZgZ9trU1spt`56>C=7Pk}Y!E{s(y(~|zemf-{w zo+Ik&cO3NrZE2-vv}{b5?Sd#gU0DqE>hL@}*82eD$+OURN5=L^l7i4JQ_NMIpPSU3Rsw za5NT%aqcd>gaqBxZVa<4b0jo`GNmwACvF{1M>ne^Tv4dRC($TZq4w@pW?%n%mP5Z$ zbfYPOg`tdd_0I(ksmB-u+nQt<`TD($#K3r~8a zxzmg=7*>~SY2We15cH_3v9$km++^*&`vzbRzFHT|;na@bEBwPBi6(UpReMCw+pIPZ zN<57Brpms6$cH||t1x&&i+Q`$BXJ?aZe<>}KiMHg{%iQnuU$}eG*(OCNDULSO9{uG zg^B4CZ7^@^%#tlzx9CQp{3uGkk=sODxWyCbJ*de*cW*u^(S~33(Ro{G>7VC_Hb33b zM_W%%7IZ_U!XI_qca5ST<5`G9^NqkrQIt%=-N*cVp}UFq$r-o@pEh}{ws$@N%_+^R zUu>;8y+$K(Sy;F9ADNDcdbo+>#g7Y3PCnm#c@8;>)%_8(zTkomL+CN(4#w6b#SdtnYz#%falD)0WamREec3zUi%uo)>r0`6X%^Hu`3iTsLd>x_T znl1LvW9+OAodN!V{_4Ghq<=O=W;oCufaRvcOCOiqu_FgPaQp}ST-k12?XTo-`SBU& z-lS@UY49`9%fcNrqT6AH>_p=U!;adTnqg;T71$3 z!H|uK2iPcQ=sx1!CV%SLne*TW;mlhODtU zpCskEiB9|*4xq>gm^@4cZuYk-Vuy))3WH^}FOte9J=R#9$hER4Sf26NV_3FWZv+<%j`sxx z8zDY0b}J&HEXK2P=LHiBi_xB8_{3ylhTM|?S1uu;0dxH@8{l!m&xKdw=H>>Cq@z;< z848j_nnNJB_7O!5<1S(_nQ(7MF1`vZ7|sJJ(C9bfldMW93MKdXbCL=0SK{O1;PSdG zTa(pkH#-ak6Hc8iTC80>Nr-80$Kw$}uP3UIQCni&;$u8@@ig zfT<3j8Z+SU4!W+sXqbw-_6pa&$DKcAzim?v*nnBL-(QmvXb^ZgFI=o6FRLn8z}e>PTb#-VeMfevW^Bov{TeI&N!}rnm_j9QJS7`lr2dngd}-?=7KYGT;(7Et?Ml(kLc-6Z)|g=CX&CQYF1k}(a^~aS)SKme63*l~p3iQ*EL5HO)bxtnVT;@4BQ|Rvk>^0} z8m47MR$Yz|Ot9!_Zl%{m{l#-abw9nLXI<^&%}b-UeSO;ITHBp-1{-6n{Wg%Z-s}F( zr+K*;l}r>q%>7U?^T5G>zAN9O#Mher{|$sAsaru|Fda5Ecbv~oYOE8j5v}07Loa+Q z?w0#u#@qMq?YO;eSLbxGeX!0m%hlWDk4IJX=(wFoO`R5Xj7XdAPn^{L-QM1Q1#W_l zVV5E^`E$dsGUSh6k8L7<9DDpL{(p4CF7lrL=~w^x9sm6B|8$LizT+R?OjqT{SjSOb zUT#+Evz3|I;T?k_&%Z+A|{ zZ`?FCHpZZO&+7bx%j7xkRmj?HX%sX!YWZ`YL&`mA^0r95BHpB}yK0+O&2GeBk6!z5 zGG3rM_~bq^3~zgmQh$9ZuwRucvx|YedxM6EyAkzN#U?2ZkBXl|vn1gE$T2G5n}NUw z^7qw)2F{t4^2WP<``}AHaNIFIXiMXj$5)kD@VBEg3-UK)Ym&%s{(js@>TfdLl)vt7 zazK#NkNj@+on7RQw=g;5C7ybGF`YXDB^A6GAdwF@{R9t}W=%Jne;X?oXj=%5XT4ZNdx?flroBjDq zml74oLpS;ecMG2We_iYUcJT5l@RBds@Lx{Z-xt!@ zE5eg>)zDCyeG4;lzcMa#Yl_o5+iT;06;=Kog?|plKiBUn|HnZ=u|GrB>i=@e{=N`* z0BewHYFZj6qq~R4X`SNuw8P#9^yD9tE z4q!U#EqkD$p}}`mVPWCi7F_80;zK<%z5i~H{=J(1O$e@hx2v&I{8R`2|GQ}(YN zuy%LxizfpE10{Fc+jX5u#;bJs$d}3Y-|f-ASJOXN=RYDv?`0CzCrDVKd-vZ>+21?h z`F+2R>a#XBHl4>TEZ#_xhrTA&9^CX_?$N(j(?3_|KN6{Ga`oCfI zf5R%4!N18t|NPbeZ(%h;_EQcWLr%fsp!sC@r;3V#vCjt>KNn5(*AF*aR!9uI{&0LX zhwH*9J)`*RD<4*-_@3CvyMZCQqH9M_`Y$A79AB#xqqES?Y-D8Q>*~!WW-~L=RGLexgrtWbQ^HKvfO#5&8?%z%fm&f0t}^glUKg;{K`iU z%vRmmE^}0R{4G6WKu}P<^UJ)v1&-wzw{Tn(IOJB2plPF3i*-G>R!({pd9_ogTXUD@ z`nenMWk*369%fi{6p0OGosc4P@joKH?J{qBv}5JNPJ6S8SoK!AEY3~-_!=u4#DnMG zw{M^0^bj{MFE0-d&)&Tk(+tXrIb8FMYhOKkwq4@%hfSL{-L$ln_WZ*)BqYS&|7(I; zN_m)=ZC_2ia;&_7fIwGQ*Ve6Db8QA2bFBO8k~Hg+wdSj&Ii3Ut3g$2VzIo5OKMp-_ z^*6ykr(TsY8Ibp3m++QansHE2Ra29i?ewp$tt~SXg3~_>Ks3b+75|d|MvRb-Br^=ExBqb+5}bA z9}p4APE9?m^t~W1F7EmB%ebio)ug$JuL=ha9MGKHd-mM9fu>CJt9pm|`IYffQhJq; zfM4NdJMc~M!i5VLFJ8QGp=PC<6>eeGx<4M{!Jj^T8Xg}0`0;t%iIUP-n;VDOx7U#} za+Ce_=A9+J+1c5?RN22?XV1Flwd?EalOe(CYow58&$S=#o|+A8N;9mu^5Fr-tgE}* z0B_RQe-RrS8xymOi%ShJ6_vr3+{~DmtM~}eVTh1zXxd z>TnkZWzWh&gyu&UL&M5%{rUUDyPD=yia9NRGJK&(D1YOkzw3Mxtxv)~BEq%niP~w} zpwBjbgSm+x(Wkx6%FBD(pK8Udo3-SuXBW3?|M+OfJ*`|D>Rev}Z{Eo94)fOS*?dWj z{Kc%6rM3n0Eio}M4pPdhsy6e3nJJgDQ@ffT2Lwzk4!gR(zxR99GUe(gKibk%rV1W< zJge_(Y{fuBnzT3TwsF@?(f&K0$4{FO=p-S z`lBkkxbu@gmwc%3<+ryS7S#{4-k^X5$kv4Pi(tb<<_q_onnRYjfhc(&yi!99lC zq+Aw)`SeyYvWGr<=I}Oxci%pB?5tHBPOt4o+uy%`U$h)qlqc}wxA&9DZwQX{jJS`Z3yD^cD6dpX+mMRjnMWN8*wTBOiWJ9A-Ri5sP`EPC>pz zo>pgfH@j`Kg*1n=mArhp3$M06d132diQ`)ROZ9==nt=z^Q*X4r$8vmN=T?sy75x$8 zf7*wgZM@^41bI>MU2d#5&kQz|97xFGRb6rmL`M- z1XwMM7Du?u{g7~+y51^x`Re8J2Ezy{zQ~Q;A+9a)YV9i(^Ssg1)Eivf+=Iv+i>}MV z%Y~UiD-pKr$2uJp0)v92CMr*qT{Hdoa3k}j8^=uV)a?=x5sAfBOP})79Qu=1vD;m4 z$}r__NZE1XL8yKAQ@tY31{&M&3Z2om4{nSck_+$G@?OH~(DRW9jELaSU@By{Eaf9< zV$j)zQ{TYA8@sGDm``VUu3jzq((FK51&?-~9WCFPn{m%eg$PNLy2R4bQYOLL0@r1X zSb^Y%>wchRPst#PSayAWg3Ut19XY&i<(Zr8w=EaxVYTn{jnscL86O+&&=((@d?|Yj zQF-zEUB>oQQ%ru&$osYPh#E1pzE{HC90<)2u~VL4tCvYA1c1So@E4NL4obF^26PyxyLNjBV&F z@U3LaE-%uSsYYL4GQ6oD&KoZ`cNq`iSQ>GgJnoN`ujMk^wLGb_Jh?PKER@m}5D@T% zC-*vrqH0+HTQqklC&5|!i}xRVx>ExU^Rk<8k6*=x^U{1za2I)Q<9D1I=stC(%B{|# zm`%v2ItGDq41vPr&s&b)Z?D>OE_lP!?(_ZM^n9G#?ladVs&6j#7R60OnKO_z@zPtj z7tfxVKbgd&o#nP+)8@@wa?h+feWfLrW;%SNmhAYwleMW1&f_68Rxz9Fm*%+k?KAou zu#W^dlN74WFm-yUm72TF%acWDXkom@v{OUIS zDwknLnpjtW@=*T#(2NVKlVp0+*KMl@lfK!E8d~jr?C(GBp|cRRd!JGq|K2&N<#8#u zb=#^Hr<{LOzaVjBV&+**O%2CluXI`N2L(Af>cZF;y_aVyBFlv6r8 z5`T`)(T<${WRt#YSyMKGl%gxmjedT9X(E9DkdDjj!;PF#%l+8PrmZ!xb%F>|YkBi- zxPE12;?}ULkeEJlGf~dLVa~^8BD(P~$Gq}|3+bj!8G}ukYCtxss(W_t#v%kXp#U!- zj;&|aI^o8Er#1oD$t~E4M7B5)lt1ypp?JJ9@&uOxkO7PNJ-c%hVX|`~%===>fj6}r ze!Sr0Z8kABhTgVz?OKz0uHCzLS4-g`2Wk`4J_OB^7}NdC#4K;L2p~bAduSrcgGUr| z&$9I9*|TRzf#kNny@>{DxMlBqT2{U%H)7!eJr{cc*dqVX6!wtV^{Fm%s=;5@1V?wTYslB7kw{Eg3*L z)*|0mRI0#4EC7#vzwR2lGt`vHt7QDjup-=fZX$l#NSpVC=<>q2<;|N|$pyjPb>Rwze}Y4# z(}V&#I}aphMYZbN8X5h#^V?dIRuv>?cXc0$LKKKR;fB~b*&FTSJxg^seY$A6V0rOp zKx(D3MR7=C9Rt@*a!Jj~I5;>^50no(4?6ILA+JG&)D7N=>nnvDk{P{}#~29tbW7@ByS?<;omj{~yTNVTZ1~kCE}$ zZM|tb-0F-(1Ola1>L-Iiqz>oLyNulBsBv6EPIU&6($Icu0>D^R=t+X(<#%@~17w(j zF5Q%&ipQm=PYh<#yhCl*Pbi!{`}zC3yV73UtxNfe2U5(=APJ`A&-JmG=e=oLJALoo zJz1XYPCPloJV)E)RFgR`a1oOD`XjXfHW(Oh4ymOQPM^f2by~xW&Wrsz!_C>_9~h;a z-rB~jREojM!~1wNGp=KzH8ahU);I2)Zo@S`m6drNbQRS7_;7LktO(-2hldAa)^2My zWNK+vi<2#ez}uNlvtz)dys5jf%;V$Y9-jOiYujr!aIe5-3dyjIJ6Ogu5=y@+~L4emzpFri0t~K|YkcA}BPp z8Mz+O5zph&TN%k`F3Fqq{m!0KE=dy>b$A3op@~M56jM8&#Xd4A^#y@3y(ra58_F3!`Im%M~p{}}I^O3G}VLkQP5CcQZh5@<9aFcv9h9K6;ggaR%X$Ksg_*Z;m=PF5G*$Gff0FYE-|g# zUBo}#b$JO4ZYg4UHlp(Ki`d1MX|u-k9~gAU@iHM6<>wCIZ63_L0B;t?#>O#u4y6Jm zNPb(h`Hh~(1G!0cd+DgC)RM^qUMOb$LkV10TRR`@4!o>jyj;vjV(KDxGOWlI%`DS;RfvrANDE z1I5QmIK3`)UYnm9^nH>Cu8cQxMcn+nk7BOw+x9qVv5wEQF}?TxIPP=_qku2r_qufA z`KwpPWmqzGiT0QZ5OOP^$&(7qpecR+3X<9SUjk2?eZz#Q+q&qmN|moKBbpKwbY2HHn zgJ1{BBJY~bOOpxZA!a%Iatut5AAb)zX;>OubwhOIYsAtK(Nm3?<}|_^rUG{ojD|!^ z7DMTl9|Y?)RJcrGRSWJrCE9jxvu@pP_0+4MuqU10Hf0At`h>Z2tyNK@&JX48sB=GK zJ?wG3Mx&(aQ#tT;<5A}qMZ(Bz(P}5Xo9{n(=|q1?%n@0(8+$Sr(iB<#28oQ5?^bbK za$TGx99ws32(dFNC@?|b%KLl4_m4w^Se~tLEe8N>dw*X}t2;3@b?iQ~_QL`BQjVFa z%!06>pv(dt4sp91rQ4XGX@mg$OH4O^ok=Zz@!|!ci$1Ok9l^>}2sS)IpOrOA|#Hy5VJ4#$oooDb+OK9`cTIJ7Zs zt_cZZxzk@k(0uo21e{izCetcDxvPcAMFr<#!)!GAokPPcindJ_C1i}J#S1WW)CmHW zff@32M=lXenMreT^_hI&ap68Ul1hh5C`CO?3pKtFDhh%kQ*2)9>_mhMYn7(b>ij6Iq zlSNzEKl-FiOiW;fySNUo8yvarK7XZoWrSQ$xTD#`xR}jAR@(y>-S9%MY1~G$(|B1` z#7STuK9g2wi}VU`hC92SpCI9WX{J~zqf>Vp;MY@qVFsLP@CNk_cpWk`Uw8ZJo={6d zNw!A4iohC<9a{Hpq+$9KVefqmOv1f;K&<+cGQ)4Y|DA7GLL0OP%kAdU!faWb)OO2> zhF2;HOPDaBNynLBwHLOn_B{Z?QRZy@-pAs4ux~ueRrkn;ej6}p0NLku;9x#@u`>9{ zfbLwu@_d2aea{1`i8CKKmNqQDpB!kggg99x<@$MF?8*9xq~zqKL37upm@1X^c8HmX zL#@HTm(PrLoJizzuKJ=l2o4CjN~_c}akT1f1lA3(=>`*#$f8VT6%}hTgXU!cz{L^{ zV`omCDg;&u2a6ACMKp73O8ixG;`%$V0t3%j56LnPhu%o$l{@#RBb_}x$jW614;<04lL9VUeZBo9gj;vjM_YH?>h%>qs(tU)3W-}6{O=me4c{r^6}u*MhVZIe0+S} z=ih;MAI>*%k(eJylMOuh`VX(U~nDSz(XSA5Z zTw6CdAYhB-@nVD-j-aLv4My>iw@A88-^+G6xSvNUw=}gf^2fGHoh23JgaJxlal@?@ z^iiALrtAd^7Y~_DI);4w7)+nPgs3T~S7%7S>f%JmRV5`Q>4lDR3wm6rREzdh#)l}Wr6vZR@>;E`0JKpwgyaxm3{+c8i2M3izyD9 zwNwnhzr8&l5>opeW$mZ3lU6Jqj#$P8%ip%Zu*gkno0R z1+L#JoZ@~iyM(xpp$F^U`!Vqm;z=Orgbs~XlJe@+D@W|l)Gs`16`$N~#hL}0Ila^Z zP4=Xr0$H7i{2^3M?s%51Q#uO9qwR%NyDLzeP!u}vG3!tkAyp7xTghU-iR9_cd(N$1 z*08olX=ieO74W`*ff)-kE^-jI7+Kl1%NpMf91(Rho|?$n$a(stR5q|5llQYnMqro- zCl9lSF0!KPa>U_KJyP}D^e_T_1)yElw!%lEpNrKezJL9DDVmzvJlnE$YYQm+Wa}D@ zj;jNE8wW9zswJkoJ|1m8sFA+cJLo*%q-XvZn4@8D$uZ4cvhL-&-Xh(>!OZc%%$EHv zjBYQtND5;MkzBs=r9~km1BaxX4ev>aBmX(F3>aB?jps1oCIIFgGV725$TDEj*)ZXetjv&$LzP(OEZzX`{^cT zzWzrwj<=)Ss#Mg}if!3-wfNKqB){|dKYJ#6v$Ny`qlDGlTPq+w5a5r(7Fg)gSzXGj zz&!0LM-2dW2Tmr!a_WY>5b3dm`~75jexF|+I+8PEHB-OoCPgR;x%Ar`y)LTg!S>Xs^A+OZWymen(u)P9YTc-XP~bI+L7$~(GE$ZJqPW&lgE zWYSUs+g%j5Iv3L3=g+kayVSoOdLF3LLr)E?Y=PwvT& z)~NpaHM-}|^plXwc?uTBR@U)lf4{R8KMQEQvH8XWR9#!p>qbT z4{FK+pFS1A&KyxSA?t^Pqr|z;9ESjJVOC zQn2(YA=zEqEg5_oRC?L|3wI_-M@J-l6K$(>6csH-3z;($q89=7g9S}Bs2V7+64l%l zkFC4(8914ldgd!6ue$fY>_t%!YE_bz4s+TeRqC6q*u%*}bljYroTvmp>F)U09Mk)b zlgzwk?%9cBZy-=P2rc7N7EUQ^SLN<$`HSj5ef$`eUNO6o@1#CH(7+GrmY<)WlQSB6 zZJD;T6Z9)&kA)`MQeC)Id1Ft*7SZqZ8m0|i5oxjk6|^7g;BR=ll)OE|dQMx3r#W_*(xWA5Cq`RLIj$mhD(R&6~309a6fg8pPUD)9M$71}!;kv}1ZnwG?ni^{E9hIsk-)c2OQb3(sM^PO+g0h{eM(JJy{Wrk8 zBPoxxsXJ98%TK8!^RCZO`SbGfR9_Xd zQvGb3;^N~Q(v6f$GrgftqE>nJ>eZ8GCrvnFK!s4w*4LjLYH@V!ic&z)5fok@Id*U= zEs-r;j!kjG$S)wE26ES3l|S?7wW5T>ZlhwDFPvf4vfVkJ4|-wNr58|_<-)~9KE~gG z&Zfggz4{4IiIg{xPwPV%0v|sfDKmHB-?0Og9&O==E%Ok^7Ex=a(duh_8{0_wh(7SE zHB=%%!dYPW)|lMqQ03VGzp8}N%?lQ7az*=~HB+Z)uCAy+wdrsjbV4a67vZyiaRk+- zD4l7P6<%g#34hd6r>d^;EAnPzVMq^XLgj6{#FQZ_lSx+nq%eBpd0`;GXh46>!L~S;z1KPLuKi75QpGc8IxaSpt8SG8;N`Q@@1=^D_hs5LaagozgxTk z!89v2RNpL&7CvrP7(kT#()8)e7l;P(R?l8L&rczxk{TmK5Wf1#Y*ayzK`l1qPD4b{ z`{2*EfB$~u4;{#cdp|z2vnJZ6k)L9z=F2Jj$OSAq2?w+HBr{{y9KwiFRXhKNpb?Z< zEE+sf=*$oZ%=uDU8hYr;@riK`=Ltpn<#iFKM3UaPpNF0nW$uj9L0{Lks_Dl&?h$a~ zfl|?NVK{dfRPDWksm{$7#gx%L^=^w=0*$LwV$P(xD=J1*A!Mx3`lHWz)v>mIxGC4<+taE^VT+0 z;_ur993pt%YVila3!2iQRf?YMW<;43W4 zMYx6>ZR^wxp$$EV3r@*6qdIdv_2R_zCzOM9WZm)`P)A;VQthp^e*1f9{yydOmkgAWu$Yk=P&6_qsr<}~C zE%Ky)m(3{ z?EBkHhZA5BijRNv#o*l2!@C`r3^iM?7mOCMR7uy^_k>NO#3n#tSEq;k843a4O_lxn z7eK};^j~>Fo(!d z^`ogie~Q8=wQxxL$s-aOf}`Du2*P0XXj6)rt>_7~J^X3)R=0^S=IvY_ zq%9?N2^@qg#vbb9sn|1!$RT33X4H3VJMM97W|W4B2^stdCCakHgA0!1P^*_GQ(V3B zjZk0Cn`!q@keI9~IKy#Dcy6ZzBB;X;#=MLZBczJYUD1&L|9$S((Kw)JfqKR!!J z*oo5PloV%fhbzzKhYO^%A6-lWG!fR`Oh=qK&axXsuIZh=jY9DCiH$7TpB|}o9|qb* zZ0g@p_v$F5Z^`eCurS&Bd>Q+OvdKp>uXi2YNzJ#)#2uSw5oO`{OwY^L-U)jM+9kv% zC$k^A{8n+f&y&CWn~rHq<;1(~RgawJb^H>kVRDh{gREAM9^eG_R*)77hLr|@qCUi- zc_8x+fn_`Df>V3PDh6ja?bdD?vU>368RPKwir(|zpWC4Fj346u%Bs{O>w!!z#b1%(z!Hjv1hgU8nrRh7S7I6AC=3AU#9M7QkyVFXCi z6XCi<6zlDZZ95N#a?PdABifpT8(64<&P8^2F(@aO42P zcdejbdD2ac5X+7u2|4qV!^=y<1d~MfL<{`r?u5{~^hv=*Y1o7I5H6uZ-Qo{ni4Xqm z;Lfz|MDb7GwIr*c5JA{iLt6CRBv54_ssnSoJtWhh_?APxuS{*@N6{u{AoUBwob7ik zJy%jUP4p82!j$XidHi5;OVQjrMwboL_m>Yq-cBEs&xPr<1+qxD4lXQLB)P%R@$1K3HCP6 zWdmkxa=&g9z4uq^O~fiv1{>@85*9=Uf4au>?)6N~De< z5LrX|-Ju%R0UFs=%3pE4NZ;({%`xyfVzCH*au~ABC@Ka5dWO@3O}40&-@AA>yt_P1 z(_8`BXef6$e?xtn9c3}}@#7m151XO;fZ#as4+%>9uscIDb|Ivc{rJ}77vbh1CCLIB zDQ@bP=bk%vZlSS0Ul2(+cSgJe9;l`4BcWVd)Iyby3qfixGoHeV3I&9ij)>PQ zF72Lf!cYl{&#W!}D8v=ac88!~-#qX!2F#dv>)_dG4R&m?iNlOWuJ3m(6ptZA>F)a- zYncw(A*<`Lv!e?83I4c^RPo*wsEZ85N-h2Xw=4@b_rqHLwxk+u?iRGyV%R2@pFoSd z$?yyE75IDRN~10aqt%j=RU@LaJt|<*I&-^r?FzN7Q-`M0&R-#(29IB`We`X+vh!p3 zz0QRQCbhnAg^AP!&MY73AA3wu>17=U0Ti119Dn=X-Z?HzqZph`y}zj=Xr}DmvqutP zdvLak=+H!0BIby>rjpGH;%@-W33_OH+cJattSg*4s1tF`IZ!bG#2Q1k&Oxo53CL@g zpiGhK>WpLtK1GaKpzOZV>`zg}A2)P&cXyf2r3uV8&2)VU;#E(L;nO)tvcc%9%8hSu zHH5=u2vZ4ii4K!}*5D@*sB@8pRsBMi_*i@6wXK!?ptS(rIKa@i{+uVVf5KE;I}+IJ zy1a<3o5*sarmsGQwi{#q?l5};q`!JML=wx_%I)p^5P6|ibxjj~anEftvU-r9{`1pN*=zI4P->=S^v6ZC6Kv1^+Z1>Yc{e zz+8>jRexj^DCnS=0byY+*rfD4`dTP`ffN;mwyIMg0tM8B zSFex?{V)&+!}!Hdt+FBQcBD5@p(_aZGYR^=>GrjQHa7(+PeFo+o=?JL^l}1pDe_an zWRkflq+%&4SFkXA2h=p^UC=qvw+xfHZE3qcF}Psol0fQ^AaqZ3?JEZOknf#`Z3xu( z;>9ey0mT@Ea=3J0W1U9ECNYzjvG2th@bzI92IU`8ila(%^-bzUr* zqdk%uzoWylPvT2J$w(A-7jrkFVvY@B( z!FD*CkYz3JMgZz``)SrhRALVj>92BBo$cs(*X`7>dfz9G=y%YY=QqYPm)0 zu9-3h?M-SNls8=MZc1-;o){fTmFd3Sy$nnNI=KT=Q~fCgA8xKC*&vAmubW>D0nC>>Wre?thyzK~gG;9Mcr z7=c;0;K$35_SUiPvJisL;DCNU%Juyn^`z0=zuC<5y8tPf$P|uMrj*&m|0$$5P{L`d4{bq=#&Axp_q;rJLZLaH2}N zF9qJjG9s&rpen(~-LNyZLa8Dt4_P1c+Bl}4h7i_@dj&tc2A70IGbtefP~UL<@<9sN zYkk1s-z~N;TZ4PDTGuF|Y%TvmFN?uWXB4+W)Yvll&1=@KHAfyq<*F1$7^uLj5|dos z&c7u!5wJopb%~hUK^+-QW+B*d(A^k>sc+h%!AZ64F^x@^!_}^-zPAQ2EDsSHzO$AG z_T`hZ&m6$yhp}DuSl?tdpCnHKUt0q4kt2692)7(QBD&5Q%oND!5tIBSiLAyC4K)U5 zWo2PdFEV%PU@7C7+dNh9M=$g*3H{FjDNbDnxa}R+MXcv@0oegapdDS2I%V^y+TbrL z^h;wANgWK@TSG=fl7g&|IT^9tV4UtK_AxKLxdTxV@PmA3EAWYd6V(-U_rgnxE|Akn zkfEnnIj)=vHJs$+I7C ze3?KH0&xI93krevTv3{>Hl}M39W129W9$oWvA))~Gfxr_-Q~l@XW<0|gFNa#bQ=jk zElGnA1l)X@y)6Ttj|6GR#Ka~GQOX8-hFs$}7?TclgVVz#kBB?)>EbTImr>w@td zFb3!`wV8d-w}KA`O0|QNWo>2RY$VAaWJ{r?i7Xt%Jh98B&lcH4Fo8y$6q6VHi_e`d zax|yyOK)RlBw@a%BEl7xD<3wojD`f~LZ=gUcxb}@7GG{k{4-hK(Hju;K zi$Qx$X$V9!&9c`%?NYfl#S4s86Q>BgI$WQkgO;9Ls~>(S-5~ZNUm_#H;Ajb?MZ93p zx!SkCpoedDJ4iJE)3cBemiQF`zP?rH+kq~OmK^sAlq!+ppnWDGKmoZbXygj^fU5xW zo1d0)Z8FU)biR4^T66UzI0eTMIBbsHMeGXl_1zecirKRqfEh$!>??@I(DS`mgm`rF z^B^iu3ce)J8WwoilyIxCw&Km~@pGY}p?UZeKsG)F!3`7->P4akr4POeui^f!>IJ;j zTT$yN`TV&L&jW=BI7D5&0h5dfjyw;3{_~c#sX4cgn0|YGrK&5A;j=7j+O=}n0!SB5 zb8|D$;#6-H=TF23`yt<$`!M8T(20Hw9qGrSn81u(Em<)N$qIyg9jowb+!o+VIldRa z1sI3J4p3_I=FQ-UnfN8X9`ps1gaU=>cy}2tMO;w`u#zT?m86zp&jyKc_)p$5K-^`xi8~qAAXjT+wXL2@+ifkDIlkpR|~e>v3{Lpjb%Ez z8ygDwG8M10&}opaA(Anom18j8h&h`0^@bW8&T)J-{VE2MLG+T}Iup0JIYsiXvq@G* zM2pJ73QpQRK$-Od_c(WW2{9eK_&oZrH_WsXhs|pccMMF>lPCB;FF$`8o(uzd?Xp}t zZkwomb=Gu04?=N@1QJ}wA(=NSRe*d+QV}PQKaR{Gr)-!Sz_d&DfQ-ze zCru0xawkMkRc-C$e?7pRT+jk*oHB54!zOETM##U;Imr9plM?+`dll!gKzXgplh1l+@*8a7o(s(SU3OJupK ztH&!m+y_1bv=3gs|KPz(uP-0NVvt-x`g6aJ$Dr-W4e}9o6t-W~ve1qlJFufM+kZ8x zp+x5)uA`xm12zs_wbE6fwN=KFNxp}f((wnGYPgpN8B^S0Eh_JjUy9~JJDHH zXLbe2sZ*dO+tLtM>Z?s)$-Zyxco@%$rv_C-pT&-Q2w9MOAaicnvIU_$9=VaPWQFSK%- znGK;C7R!aGpJ*R=-sY!}RAtaogq=IW=`9@9`ezC<@|iU3Y8G_PV!5EfH4B`4k;0FD z+tH5VY2VuY^(f~yBA2flk?VlL3^ zkKBM4286&FDHkUhnNL`HM4HI4II8JBKid2%H{!_?YxEdT{rJk2Q-*-Go=ueK4+Q^F z)ts=F&~^8@q$Dmgj36#JMo~_|caEat81JTZnV+-}DL=6qrUKZ`ggYOf=%em9sU3jX z>gnwCWEDZIxCsglDMb6ynw-ML1!J$fkt&R@h4b&wIWg?A9&A+MrE}7TdnsmW$rV*Q z?t&fb=5^LCd_iXh#61>~euNlP%q@D(O0eF)eEEX5UdWf~^D|K9Np+tQAP5}2_cS_v zH!ZQ|2(PgouoN^WG)D$wx25+IA3jSXnu_MNl(wI5r>f=M$Q* zwFs$3w>45ORM=vy^AqF`vxWXAzP@}gr@&4O#Fyc;_QdM-=2uonVvYE|+}_|%oC&mo zWi-X5VpBTIUTE>U9^>G4R+GKLg0|Qj6pzpf65+XxqsH_GR71E5CdEtZrNYFquS zJ?O53%jE@jI#NSalrFX&a0ysS+84l$1de)u|5F)PmOSrVm8ve?{TF3gNv( zigVnD6nAhJC2!rqM99er8EQBJfg}hhpy{nzw7+y-t@#Qhx~`rcBqIcwlMa%|j`$jM z&>S9A89K}VW_K{vLKvGj%AyLO#J13rXW$P=Vx z9?JF33T7szWX(*T)ZK`t*tI7ftcx#`LvwBcS^)-;dhI*fI;=z8HUM%9VC{^gto`NW zOD58i2a7QV0vqMH?Xy4yo8|}u+t&=Y< zA>oW|Nm0~5rzg6PG|j!Qn6hp-{ta;r9C~}ctE`O7Hj$g1*aVzH{=g9G8Q00N5vAOo zF=y7Bx8a(WB|F^iRjhoC+V_iArn>%5$XTd-6f7^z^DXy+Glcm09md)uX5sg~h|Vyf zL?$L)hoJ2nVRX6ZJbV%3pK0l>B$4^JJjL!$$I>O{9^~W6C0m$t!HUpqt9x~|LZ=)M z%Ws77uD*h}igwAH6FcUBGdNJ`hup9>!fOb{AiZaqr#17u$Kk+2=y@|0fhFpUpowV2 z#4mISB}=G0-k2r00?^4C20K8RBzwE#&zW7h>f$BsV{~`oP3f#wv|4JC!F1ZXu}492BmO_$AAUuyr(gx;xN4%ui_m*sE4Mg zlWC?!e>WV!02G!?8$`7dsx3Gw>Y>E`6J?;XYxi!PYAFSNw|+|sPM#3P70}SPNpk-E z&!+l6t=;$T->(6~LWHEVv1J6-k~3yHsosF9Y|h8xC8+_6z|b$HSIfifwf4=r+BA=CP%WLwtM|(0M2l z>Z+z=qw1LD@x*JH#;|!-y+e_zO)wCBEprus6Th^1z@=i&lAQ z=|OaTA|XO%U{8Aox{jUS-PKjw+R3>6$X@giXJyS`TxhfvI4dL~IQXKb6+!a|oCxc3 zVU0{d9pYm-HS&!(6M#G=_&4oszmk>~ISK$}W=3}Ltk&x(d)Rhah!<#dT)uXf{-E~o z1v;njU46gYs>lQ`L{;f3JZNZ`+kcY#u@#mpiid+}Gx-5?-AujAQHnA<)@(RB`4RL4 zUJ{`XGIYMpkz?2^eLRQMrp-nmVqUjPt$ur(-XvCsbb4U;jIP?Z0E<8p&X_8Hjr2tk zY62QbCv`u~jDcIG`EcV|n}0WPTRvHnRPuG^Fb@{J;{yNsL|RP=w-ab_pIIB}V;rxA ze}Qx?P6gT45GD)(CN-l8oTy*0>1?};cxKrUFWMH(mW!R(`k6!^<^gTe;JRdCr&6qb zROdvS@6<00iR>z#1qd`LnDNZxS+&mUz2TRy;#g(epO`xAey(jntnJo#y45(CsPZ;K zKB4dc8#pkh4`B*`@oLy`QQ}>uCCc_Mu&Qap>(HnuXl=fgAg(=0iLHwPQxz3xT1#`nNpLq7X^d6G9lYMVlj^FarvGw@n3q@t{x2A+`f;T&1*FdMxMvc_UU|EuRhTD;*gR-f@> zcURU*;tNl4ex;762axMLMB0SC$g~VdhdP8FG)kd&Ejelxf*rUvAvarjBt>~dTILgTM`(o-5c+T-oF6V zi&^75N9<%{Vh>uV%oePoo0y=|MPt|7$FckoXVFcH zVIgJVm8TsAjMk#t@sgvohV9z^p(PA_NTVYbOOmOLtHieUoSDl`K0Sip7K=hTcieNh zqD)`-q@T@>a!koouyGe)rRGcyl(JV1$COwrQtE{NX#7s+Q7^WY?p;lWL#kBti4~F@ z+~ZV^Om5}mOW82AB2ua7w|KB1=};HNU3QW#|Sj8Q~V^` z!4lt;3F!7Jcgh}m8>y+Ixwfcz0J-^OV9<87XF{GPo|u&etpbi~`x$IZ+BPcL4#*%F zwmhlPIMMv`=II#@y2q&{8Mq33XPHTI=->6=G?yp0RC&LRp8o?*%EAlJf6UVN=N^9@ zdFhoSVFzKF|kS7hS0HjfkSz_n+y!MG{4;NSFjmabJj@~s%lV4|OujW$)c?&%{ELyLZ z@i5lE>QU?a0&%?$oPEiok=ezau@zsbZrdjRg{6`G79L0PN(nUdx z$il13HIoe7^!EXBKmoY<6_NNE`nCb{AVoGt@nhW~w>ZPGq-nIapM3|` zvq>L@&a?s1C-8zCgBOd-CR#`KdYb}Yp}xuY0jHUK%&+|Vb-T18zjjdY{e_Ux@XGi9 z2jDKr|3=PGtu({YQFRR3Wfc`Z9hvQv%pg!yN+usd0Z!mD@o(HFV0>ZlW)&8;w|cd!$bIA1iVdP>Uc2ZTBT*k!m@CC{ z(fFp(vfIv>ORR=_!tvV`H-Y#ZW5fqwafu23$(OB1v|HM9F`#zJv9YiR$2h;7vek?( ztE&XL`ylx><_fcQ|5zP&+9umc@5g&g(I?-H7GTDUDmg=k+`;pN%}l@iTy?y6a@_i_ zxUtp6q|&g#$t4|y|8-Y@cpt0KSZF-_212yAXkVOxP%TsiDERk8WykMT{1OBW)2-rj zdniuuu8+{2tW$T?x$0gcYvY=t1>TsW4Wf?TgoHa9} ztJsodV2Sx1qzJ^S4~F{&Au?%*t>a?dd+M2prNN-P|Eg)i65p*@Nv3^+G>Xwcvq_6R zAV{RI+4CmpwGu^|Fp*vXK>)|1i94xo)C10N zI%ZUQmKDJi&aLZ%QY5uIXkHv%Eu)|yg>EFSbHSBI6<#7JLO3B``66ql*FcJ@?6G6V z20PIBC~#Q!T4`Ozf}Ppj7DgS+{Vz$0vqy#+vrgK&t8gmx_eiwdg|mG|+-Cm7;0 zPdA~&-k02=eDNZwASu9+byFF(q{C1ypg-uM7J@Vc*>4{&Z%T5qJn%W(BH&_B?@h}$ zWuFR_a&_Tk=471bcs&BtTF;P;GQ~Kd4A2okhd>z!H37>9^CAhSFdJ*mVR}ewn#T&` zOw9f!ncFlXg(q+{hl-}x3n*iTVb*nUv6IpU=oKjK$u+%u@Pd{U8*7NFF8~*tK8_|B zMai7fcN%rIeB^!DUOm>WlaZH~Y=6i}4)78=4tk;mO%0`sz`!~LAh1VFRjip1QMX_~ zwKk#FkE1+<1Jkku=VsxH%7I`9SXUC93N(SP#iC(71oFDpMc#)nfe~jCahRFPTOsii zjE>;}N81Op2D<0YoH-*a+mAZUReMSa-5c~o!=Taz;nAG2N6mzF9m65QukOv%-3deH zg9t(xp4jk9C?}Lj9ijmOv0%TdsF1_wz%6hOc;SuG6&>GzkT6?6jdB7zdU4ka)j|0e z#P)I`4G0NkYX7n|2}gzyWOv1V3mKXx0Rfh5*AN6 z9b%D*tcEX&_L0n)nk@VL*|;+cvqb=-3#KQD>WjLL59??xJKd7w|w^AEnLR@rUO4!`3DT22^RVlD<1M9T^vN{o%H-owLcJFl3@ zwqE&*bAG3zC#Yn#MVTMz-NVSEW&0*XB}(Rrjj$>}S&I+r*sz^-BUxL+=8L4TMq(L` z90P?iKDVzKnghZzL17l53U7dvP)Y**HO4!<4jPdYeu%7gyZui9*=Cg1u7gwIKT?OI z)(Z`|Do)`z3m&-I8q!>je`RicC2@SavK@|Iv6>z0A|OrA`!RG>Hk@{XN+aVa%c-r% zOe(g^9vw)jnVH6Poa0CbTAb3a8^il?<_3lp!_VJLmh>sGzeBTZXC-k1b2At50weIO%z4uT`a<0?c> z81wPu+{i`f0q~eNQ@wEEAQ~6IpK%{#c|$A%;KtQL5o7}bz@8|$AtKX(L*x8M3C+E92xwvsN_1fKB>|yW_}H}r_#T`y1lB9JeYc{D$|OWVa>5KWF02MDbBJ4* zWnZe~_sAx}V$1%)CFajCEotKnCA7+{+kPYty8!R=^?#F-lY>=>6c-nF4HrbYK2EbW z&g>S1Y0Ju==#TX>UHVg;m!B7ysif&}!kxrp#Q`dT;)|jf zPz@?HP=<`XvQ|C!O19d(iCAYF^=n8~4NY(TOmzAG&l(`dWq)7=E=Jr5Oi(+ns551R z0>?d9$-3+WHe`UCzDrtM-UDd$3hOGZL zfh`Z<^!@UOGJAl1E8xcVHPHoCz^Z6j3FC)W(c^d2?1FCt&piL?0~}ifuB~_&ukDi$ zjAP(fJE-y1T<{z4Oc)<8 zudG-4>wpvZz*;Xz1#-#4J`3Qnhrs=ECxDAF-Nlrx7XUkxz-0^hz=W`i4}55GgZ={G zOa-vs_zoPu2RahimIMYG&|+XT0YeNjWDZO;8ag_6fTM}PAbkfuHWoNzxZthoEATnx zD2E>}&>cM~9e5h;=t=3L7f=B62sCSqUO+K=0mbMA6r^1e13e<0YA2>y&jWPLF)ipn&&FDezV!C+b0OVgleH} zs%hui?X_$W+4D!2Z0mSpb|dfb6i{j6)IRs3SkzXxpuJB{TmaoK)o@{(W>9v|8&BZX zP}!#?&b)vK8a|$WjdzliT%Sq^sK>w|tDc|vRbgf8=G#&?e!6X2iF)rH^a{KWtoe#1 z9Z9#R6)}VKOTRmoOpq{h!I<{hEn`PFXKSHlLMOy zV3~N}Kd=uk0JJ4R!leFH^Bx1B4-~*v8AB(?cML+{JHS-HcffgoZ&{lFx%&;Q=)i17 XzI|mppYKVX0x9-%^>bP0l+XkK^kXs> literal 0 HcmV?d00001 diff --git a/images/linux-shortcuts-dialog.png b/images/linux-shortcuts-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..16eb46d8144e66624eff90fe593cbf49100f2c17 GIT binary patch literal 28997 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 literal 0 HcmV?d00001 diff --git a/index.mdx b/index.mdx index be3e258..7c6f530 100644 --- a/index.mdx +++ b/index.mdx @@ -1,11 +1,11 @@ --- title: Introduction -description: Native macOS database client for MySQL, PostgreSQL, SQLite, MongoDB, Redis, and 42 more +description: Native database apps for Mac, iPhone, iPad and Linux (beta) --- import DriverCounts from "/snippets/driver-counts.mdx"; -Every engine, the SQL editor, the data grid, import, export, and the AI assistant cost nothing, and there is no trial countdown. Paid tiers cover iCloud sync, encrypted connection export, environment variables in connection fields, Linked Folders, Query Insights, result charts, and team sharing ([Licensing](/features/licensing)). Mac is the full app, [iPhone and iPad](/ios) run a smaller one, and there is no Windows or Linux build. +Every engine, the SQL editor, the data grid, import, export, and the AI assistant cost nothing, and there is no trial countdown. Paid tiers cover iCloud sync, encrypted connection export, environment variables in connection fields, Linked Folders, Query Insights, result charts, and team sharing ([Licensing](/features/licensing)). Use the Mac app, the [iPhone and iPad app](/ios), or the [Linux beta](/linux/install). Paid features are Mac-only for now. TablePro main interface diff --git a/linux/connect.mdx b/linux/connect.mdx new file mode 100644 index 0000000..8ee9dd4 --- /dev/null +++ b/linux/connect.mdx @@ -0,0 +1,124 @@ +--- +title: Connect +description: The engines, the connect dialog, TLS, SSH tunnels and SQLite or DuckDB files in TablePro for Linux +tag: "Beta" +--- + +Each connection opens in a window of its own. Opening one that is already open brings its window forward, and **New Window** (`Ctrl+Shift+N`) starts another with the connection list. + + + The connect dialog with Connection, Authentication, Security, SSH Tunnel and Options groups for a PostgreSQL server + The connect dialog with Connection, Authentication, Security, SSH Tunnel and Options groups for a PostgreSQL server + + +## Engines + +Every driver is compiled into the app. Pick the one in **Driver**: + +| Engine | Driver | Default port | +|---|---|---| +| PostgreSQL | **PostgreSQL** | 5432 | +| MySQL and MariaDB | **MySQL** | 3306 | +| SQL Server | **SQL Server** | 1433 | +| ClickHouse | **ClickHouse** | 8123 | +| Cassandra and ScyllaDB | **Cassandra / ScyllaDB** | 9042 | +| Redis | **Redis** | 6379 | +| MongoDB | **MongoDB** | 27017 | +| SQLite | **SQLite** | No port: a file | +| DuckDB | **DuckDB** | No port: a file | + +The server releases each engine is tested against, and the ones it does not support, are in the app's [supported servers](https://github.com/TableProApp/TablePro/blob/main/linux/README.md#supported-servers) table. + +## Add a connection + + + + Click **Add Connection** in an empty connection list, or choose **New Connection…** from the main menu. + + + Pick the **Driver**, then fill **Host** and **Database**. **Port** starts on the engine's default. + + + Fill **Username** and **Password**. With **Remember Password** on, the password goes to the keyring; with it off, every connect asks for it. + + + **Test** connects once to check the settings, then disconnects. **Connect** saves the connection and opens its window. + + + +For a MongoDB replica set or cluster behind a `mongodb+srv://` address, turn on **DNS Seed List**. **Authentication Database (optional)** names the database that holds the user. + +## Options + +| Row | Sets | +|---|---| +| **Safe Mode** | What is asked before a write. See the next table | +| **External Clients** | What MCP clients may do on the connection: **Blocked**, **Read Only** (the default) or **Read & Write** | +| **AI Assistant** | Whether the assistant may send anything from the connection: **Ask Each Time** (the default), **Allow** or **Never** | +| **Custom Query Timeout** | An editor timeout for this connection in place of the one in Preferences. 0 turns it off | + +Safe Mode is also in the main menu while connected, and a change there is saved to the connection. + +| Safe Mode | Does | +|---|---| +| **Off**, the default | Asks only before DROP, TRUNCATE, and DELETE or UPDATE without WHERE | +| **Confirm Writes** | Asks before every statement that changes the database, showing the SQL and the connection | +| **Read-Only** | Opens the connection read-only, and refuses every editor statement that does not read | + +Pick **Read-Only** for a production server you only read. Moving to or from it reconnects the window. + +## TLS + +**Encryption** under **Security** picks the mode: + +| Mode | Connection | +|---|---| +| **Disable** | Plain, no TLS | +| **Require** | Encrypted. The server certificate is not checked | +| **Verify full**, the default | Encrypted. The certificate must be valid for the server name | +| **Strict** | SQL Server only. TLS before the login, as TDS 8.0 needs. SQL Server 2022 or later on Windows, 2025 or later on Linux | + +Keep **Verify full** unless the server has no certificate this computer can check. For a server signed by your own certificate authority, choose its PEM file in **CA certificate** rather than dropping to **Require**. + +- **Client certificate** and **Client key** log in with a certificate, on every network engine but SQL Server. +- **TLS server name** checks the certificate against another name than the host. MySQL and MongoDB take it only through an SSH tunnel. +- A failed handshake says what went wrong. An unknown issuer takes you to **CA certificate**, a name mismatch to **TLS server name**. + +## SSH tunnels + +Turn on **Use SSH Tunnel** and fill **Host or alias**. The tunnel runs the system `ssh` client, so empty rows come from `~/.ssh/config`, and `known_hosts` and your SSH agent apply as they do in a terminal. + +| Authentication | Uses | +|---|---| +| **SSH agent** | Keys from the SSH agent and your SSH configuration | +| **Private key** | A key file, unlocked with **Passphrase** if it has one | +| **Password** | The SSH server's own password | +| **Keyboard-interactive** | The SSH server's own questions, such as a one-time code | + +Use **SSH agent** by default. Choose **Private key** for a specific key file, or **Password** or **Keyboard-interactive** when the server requires it. + +**Jump hosts** takes what `ssh -J` takes: `user@host:port`, several separated by commas. + +An unknown or changed host key shows its SHA256 fingerprint before anything connects, even where `ssh_config` says `StrictHostKeyChecking accept-new` or `no`. [Troubleshooting](/linux/troubleshooting#ssh-tunnels) covers a changed or revoked key. + +## SQLite and DuckDB files + +With **SQLite** or **DuckDB** picked, **Database file** replaces the server rows. **Choose…** opens an existing file, and **New Database…** creates the file when you connect. + +A file also opens straight from Files, through **Open With** on a SQLite database, or from a terminal: + +```bash +tablepro app.sqlite3 sales.duckdb +``` + +The file's own header picks the engine, whatever its name. Each file opens in its own window. A file on a network or FUSE filesystem asks whether to open it read-only first, because neither engine's locking holds there. + +## SQL Server with Kerberos + +Set **Method** to **Windows (Kerberos)**. There is no username or password: the driver uses the ticket `klist` shows, so get one first. + +```bash +kinit you@EXAMPLE.COM +``` + +The driver asks for `MSSQLSvc/:` from the host and port you typed, in the default realm of `/etc/krb5.conf`. Type the host name the SPN is registered for, not an IP address or a CNAME. A server in another realm works only when your KDC answers with a referral, as Active Directory does inside a forest. diff --git a/linux/data-grid.mdx b/linux/data-grid.mdx new file mode 100644 index 0000000..bdea6dc --- /dev/null +++ b/linux/data-grid.mdx @@ -0,0 +1,68 @@ +--- +title: Data grid +description: Page through a table, filter and sort it on the server, edit rows and save them together in TablePro for Linux +tag: "Beta" +--- + +A table opened from the sidebar fills a table tab one page at a time, 1,000 rows by default. The bottom bar switches the tab between 100 and 10,000 rows per page, and **Preferences > General > Default page size** sets where new tabs start. + + + A table tab with a filter rule above the grid, one modified cell, one new row and the pending changes bar with Discard and Save + A table tab with a filter rule above the grid, one modified cell, one new row and the pending changes bar with Discard and Save + + +## Pages and row counts + +`Alt+Page Down` and `Alt+Page Up` move between pages. A table of about 100,000 rows or fewer is counted on its own; a larger one shows an estimate and offers **Count Rows** for the exact number. + +A MongoDB collection opens in a table tab too: its top-level fields are the columns, `_id` first, and nested documents and arrays show as JSON. + +## Sort and filter + +Click a column header to sort by it, one column at a time. In a table tab the server sorts the whole table; in query results the grid sorts the rows it holds. A Cassandra or ScyllaDB table keeps the server's order. + +`Ctrl+F`, or **Filter Rows**, opens the filter bar over the grid: + +- Each rule is a column, an operator and a value. **Match** chooses whether any or all of them have to hold. +- In place of rules, type a WHERE fragment such as `created_at > now() - interval '1 day'`. It is checked as one expression before it runs. On MongoDB it is a query document instead. +- **Filter by Value** and **Exclude Value** in a cell's menu add a rule from that cell. +- On Cassandra and ScyllaDB the filter offers only the operators the server evaluates, all of them matched, with `ALLOW FILTERING`. + +A table's filter is kept, and so is each tab's across a restart. + +## Edit rows + +Editing works in a table tab on a table with a primary key. Rows a query returns in the SQL editor are read-only, and so are key, generated and auto-increment columns, and binary, spatial, array and composite values. + +| To | Press | +|---|---| +| Edit the focused cell | `F2` or `Enter` | +| Toggle a boolean cell | `Space` | +| Set the cell to NULL | `Ctrl+Backspace` | +| Insert a row | `Ctrl+N` | +| Mark the selected rows for deletion | `Delete` | +| Edit a long value, or the whole row | `Alt+Enter` for **Row Details** | +| Undo or redo a change | `Ctrl+Z`, `Ctrl+Shift+Z` | + +Dates get a calendar, and JSON is checked before it is kept. A date, time or timestamp cell also takes the engine's own `NOW()`, `CURRENT_TIMESTAMP` and the like, typed in or picked from the cell's menu. + +`Ctrl+V` with tab-separated rows on the clipboard adds them as new rows, filling the columns from the focused one, or by name when the first line holds the headers. More than 1,000 rows asks first, and 100,000 is the most one paste takes. + +## Save or discard + +Every change waits in the pending changes bar. **Save** (`Ctrl+S`) writes them together, in one transaction where the engine has them, and **Discard** drops them. Deleting 10 rows or more asks first, unless **Confirm Before Deleting Rows** is off under **Preferences > General**. + +On ClickHouse, Cassandra and ScyllaDB a save is a series of statements, each landing on its own. **Stop Saving** there takes effect between statements. + +## Copy and export + +`Ctrl+C` copies the focused cell or the selected rows. **Copy As** in the cell's menu writes them as CSV, JSON, JSON Lines, Markdown, a text table or an `IN` clause, and in a table tab as `INSERT` statements. + +**Export Rows…** writes CSV, JSON, Markdown, HTML, XML, Excel or SQL `INSERT` to a file, from the current page with its pending edits or from every saved row under the filter and sort. + +## Columns and foreign keys + +- `Alt+Left` and `Alt+Right` move the focused column, and `Shift+Alt+Left` and `Shift+Alt+Right` narrow and widen it. Dragging a header moves the column, and dragging its edge resizes it. +- **Columns…** hides and shows columns. **Reset Columns** there goes back to the table's own order. +- Order, hidden columns and widths are kept per table. +- `Ctrl+J` on a foreign key cell opens the row it points at in a new tab. **Show Referencing Rows** on a saved row opens the rows that point at it. diff --git a/linux/install.mdx b/linux/install.mdx new file mode 100644 index 0000000..3c4efed --- /dev/null +++ b/linux/install.mdx @@ -0,0 +1,86 @@ +--- +title: Install on Linux +description: Ubuntu and Fedora packages from the beta and stable repositories, and the .deb, .rpm and Flatpak bundle on GitHub Releases +tag: "Beta" +--- + +The Linux app is in beta: only `0.1.0-beta.N` builds exist until 0.1.0 ships. It runs on amd64 and arm64, as an app of its own beside the Mac one, with the engines on [Connect](/linux/connect). + +Use the repository for your distribution: apt or dnf then installs every update, and so do Software Updater and GNOME Software. Take a file from GitHub Releases for another distribution, through the Flatpak bundle, or to try one exact build. + +## Install the beta + +Enable both the stable and beta repositories, then install `tablepro`: + + + +```bash Ubuntu 26.04 and 26.10 +sudo add-apt-repository ppa:tablepro/tablepro +sudo add-apt-repository ppa:tablepro/tablepro-beta +sudo apt install tablepro +``` + +```bash Fedora 44 and later +sudo dnf copr enable @tablepro/tablepro +sudo dnf copr enable @tablepro/tablepro-beta +sudo dnf install tablepro +``` + + + +apt and dnf install the highest version the two hold, so a release replaces its betas and the next beta replaces that release. Without the stable repository, the last beta stays installed until the next beta. + +## Install a stable release + +From 0.1.0 on, the stable repository alone gets releases and no betas: + + + +```bash Ubuntu 26.04 and 26.10 +sudo add-apt-repository ppa:tablepro/tablepro +sudo apt install tablepro +``` + +```bash Fedora 44 and later +sudo dnf copr enable @tablepro/tablepro +sudo dnf install tablepro +``` + + + +To stop testing betas, remove the beta repository. The installed beta stays until the stable repository has a newer version. + + + +```bash Ubuntu +sudo add-apt-repository --remove ppa:tablepro/tablepro-beta +``` + +```bash Fedora +sudo dnf copr disable @tablepro/tablepro-beta +``` + + + +## Packages on GitHub Releases + +Each release and beta on [GitHub Releases](https://github.com/TableProApp/TablePro/releases) carries packages and their `SHA256SUMS`. A beta is a pre-release there. These files do not update themselves. + +| File | For | +|---|---| +| `tablepro--ubuntu--.deb` | Ubuntu 26.04 or 26.10, `amd64` or `arm64` | +| `tablepro--fedora--.rpm` | The Fedora release it names, `x86_64` or `aarch64` | +| `tablepro--.flatpak` | Any distribution with Flatpak, `x86_64` or `aarch64` | + +Check the download, then install the file for your system: + +```bash +sha256sum --check --ignore-missing SHA256SUMS +sudo apt install ./tablepro-0.1.0-beta.1-ubuntu-26.04-amd64.deb +sudo dnf install ./tablepro-0.1.0-beta.1-fedora-44-x86_64.rpm +flatpak install --user ./tablepro-0.1.0-beta.1-x86_64.flatpak +``` + +The Flatpak bundle fetches the GNOME 51 runtime from Flathub, and the next bundle installs over it. Flathub does not carry TablePro itself. The bundle keeps its files under `~/.var/app/app.tablepro.TablePro/`; [Troubleshooting](/linux/troubleshooting#where-the-files-are) lists them. + +Other distributions build from source with the [Quickstart](https://github.com/TableProApp/TablePro/blob/main/linux/README.md#quickstart) in the app repository. diff --git a/linux/keyboard-shortcuts.mdx b/linux/keyboard-shortcuts.mdx new file mode 100644 index 0000000..cefae4a --- /dev/null +++ b/linux/keyboard-shortcuts.mdx @@ -0,0 +1,138 @@ +--- +title: Keyboard shortcuts +description: Every key the Linux app binds, by where the focus is +tag: "Beta" +--- + +`Ctrl+?` opens the same list inside the app, as does **Keyboard Shortcuts** in the main menu. The keys are fixed; none can be rebound yet. + +Focus decides what some keys do. `Ctrl+F` searches the connection list, filters a table tab, finds in query results or finds in the editor, by where the focus is. `Escape` closes a dialog, stops a running query, or drops a selection or extra cursors. + + + The Keyboard Shortcuts dialog open on its General and Tabs sections + The Keyboard Shortcuts dialog open on its General and Tabs sections + + +## General + +| Action | Shortcut | +|---|---| +| New window | `Ctrl+Shift+N` | +| Preferences | `Ctrl+,` | +| Search connections | `Ctrl+F` | +| Query history | `Ctrl+Shift+H` | +| Show or hide the sidebar | `F9` | +| Show or hide the assistant | `Ctrl+Alt+A` | +| Keyboard shortcuts | `Ctrl+?` | +| Close a dialog | `Escape` | +| Quit | `Ctrl+Q` | + +## Tabs + +| Action | Shortcut | +|---|---| +| New SQL editor tab | `Ctrl+T` | +| Close the tab, or an empty window | `Ctrl+W` | +| Reopen the last closed tab | `Ctrl+Shift+T` | +| Switch to the recent tab. Hold `Ctrl` and press `E` again to go further back | `Ctrl+E` | +| View open tabs | `Ctrl+Shift+O` | +| Next tab | `Ctrl+Tab` or `Ctrl+Page Down` | +| Previous tab | `Ctrl+Shift+Tab` or `Ctrl+Page Up` | +| Move the tab right | `Ctrl+Shift+Page Down` | +| Move the tab left | `Ctrl+Shift+Page Up` | + +## Table tab + +| Action | Shortcut | +|---|---| +| Filter rows | `Ctrl+F` | +| Read the table again | `F5` or `Ctrl+R` | +| Save pending changes | `Ctrl+S` | +| Undo the last change | `Ctrl+Z` | +| Redo the last change | `Ctrl+Shift+Z` or `Ctrl+Y` | +| Previous page | `Alt+Page Up` | +| Next page | `Alt+Page Down` | +| Select all rows | `Ctrl+A` | +| Clear the selection | `Ctrl+Shift+A` | +| First row of the page | `Ctrl+Home` | +| Last row of the page | `Ctrl+End` | +| Extend the selection to the clicked row | `Shift+click` | +| Add or remove the clicked row | `Ctrl+click` | + +## Data grid + +| Action | Shortcut | +|---|---| +| Move between cells | Arrow keys | +| Edit a cell | `F2` or `Enter` | +| Toggle a boolean cell | `Space` | +| Show the cell menu | `Menu` or `Shift+F10` | +| Set the cell to NULL | `Ctrl+Backspace` | +| Open the referenced row | `Ctrl+J` | +| Widen the column | `Shift+Alt+Right` | +| Narrow the column | `Shift+Alt+Left` | +| Move the column left | `Alt+Left` | +| Move the column right | `Alt+Right` | +| Insert a row | `Ctrl+N` | +| Mark rows for deletion | `Delete` | +| Copy the cell or the selected rows | `Ctrl+C` | +| Paste | `Ctrl+V` | +| Clear the multi-row selection | `Escape` | +| Show or hide Row Details | `Alt+Enter` | +| Find in rows | `Ctrl+F` | +| Next match | `Ctrl+G` | +| Previous match | `Ctrl+Shift+G` | + +While a cell is being edited: + +| Action | Shortcut | +|---|---| +| Finish editing | `Enter` | +| Cancel editing | `Escape` | +| Finish and edit the next cell | `Tab` | +| Finish and edit the previous cell | `Shift+Tab` | +| Save the value in Row Details | `Ctrl+Enter` | + +## SQL editor + +| Action | Shortcut | +|---|---| +| Run the query or the selected text | `Ctrl+Enter` | +| Run the statement at the cursor | `Ctrl+Shift+Enter` | +| Cancel the running query | `Escape` | +| Move between the editor and the results | `F6` | +| Format SQL | `Ctrl+Shift+F` | +| Toggle line comment | `Ctrl+/` | +| Add a cursor at the next match | `Ctrl+D` | +| Add a cursor at every match | `Ctrl+Shift+L` | +| Add a cursor on the line above | `Shift+Alt+Up` | +| Add a cursor on the next line | `Shift+Alt+Down` | +| Add or remove a cursor | `Ctrl+click` | +| Return to one cursor | `Escape` | +| Open a SQL file | `Ctrl+O` | +| Save to the SQL file | `Ctrl+S` | +| Save to another SQL file | `Ctrl+Shift+S` | +| Find | `Ctrl+F` | +| Find and replace | `Ctrl+H` | +| Next match | `Ctrl+G` | +| Previous match | `Ctrl+Shift+G` | +| Accept the assistant's suggestion | `Tab` | +| Dismiss the assistant's suggestion | `Escape` | + +## Table structure + +| Action | Shortcut | +|---|---| +| Save pending changes | `Ctrl+S` | + +## ER diagram + +| Action | Shortcut | +|---|---| +| Zoom in | `Ctrl+Plus` or `Ctrl+=` | +| Zoom out | `Ctrl+Minus` | +| Reset zoom | `Ctrl+0` | +| Best fit | `F` | +| Read the tables again | `F5` or `Ctrl+R` | +| Open the selected table | `Enter` | +| Move the selected table | `Alt+Left`, `Alt+Right`, `Alt+Up`, `Alt+Down` | diff --git a/linux/sql-editor.mdx b/linux/sql-editor.mdx new file mode 100644 index 0000000..f6da3ab --- /dev/null +++ b/linux/sql-editor.mdx @@ -0,0 +1,87 @@ +--- +title: SQL editor +description: Run statements and scripts, read several result sets, and write with completion, snippets, multiple cursors and Vim mode in TablePro for Linux +tag: "Beta" +--- + +`Ctrl+T` opens an editor tab on the window's connection. In a window with no tab open, **Open SQL Editor** does the same. + + + A SQL editor tab with two SELECT statements above a results pane showing rows from the first one + A SQL editor tab with two SELECT statements above a results pane showing rows from the first one + + +## Run + +| Keys | Runs | +|---|---| +| `Ctrl+Enter` | The selection, or the whole text as a script | +| `Ctrl+Shift+Enter` | The statement at the cursor | +| `Escape`, or **Stop** | Stops the running query on the server | + +A script is split the way its engine reads it, `DELIMITER` on MySQL and `GO` on SQL Server included, and sent one statement at a time, or one batch at a time on SQL Server. A failed statement stops the script, except on SQL Server, where the next batch runs. + +Stopping cancels the statement on the server. Cassandra and ScyllaDB have no cancel, so the app stops waiting and the server runs the statement to its own timeout. + +The editor gives up on a query after 60 seconds. Change that under **Preferences > Editor > Query timeout (seconds)**, or per connection with **Custom Query Timeout** in its [Options](/linux/connect#options). 0 turns the timeout off. + +## Results + +Each result set, row count, notice and error of a run is its own entry in the results list. A result keeps 10,000 rows and a run 100,000; past that a banner offers **Export All…**, which runs the statement again on a separate read-only connection and writes every row to a file. After a failed statement, **Go to Error** puts the cursor where the server places the error. + +A statement that opens a transaction leaves **Commit** and **Roll Back** in the results pane until you pick one. Closing the window asks first while the transaction is open. + +## Completion and snippets + +Completion offers tables, views, columns, schemas, functions and keywords, and resolves aliases. Type a snippet's trigger, pick it in the list, then press `Tab` to move between its stops and `Shift+Tab` to go back. + +| Trigger | Writes | +|---|---| +| `sel` | `SELECT … FROM … WHERE` | +| `ins` | `INSERT INTO … VALUES` | +| `upd` | `UPDATE … SET … WHERE`, and `ALTER TABLE … UPDATE … WHERE` on ClickHouse | +| `del` | `DELETE FROM … WHERE` | +| `selj` | `SELECT … JOIN … ON`, except on Cassandra and ScyllaDB | +| `ctab` | `CREATE TABLE` with an `id` key column | +| `cidx` | `CREATE INDEX` | + +Your own snippets are `.snippets` files in GtkSourceView's snippet format, in the folder **Preferences > Editor > Snippets folder** shows. **Open Folder** creates it. A file added or changed takes effect without a restart, and a snippet with the same trigger replaces the built-in one. The format and the per-engine `languages` values are in the app's [README](https://github.com/TableProApp/TablePro/blob/main/linux/README.md#snippets). + +## Files and drafts + +`Ctrl+O` opens a `.sql` file into the tab, and so does dropping one on the editor. `Ctrl+S` saves back to it and `Ctrl+Shift+S` saves to another file. + +The text of every editor tab is kept as you type. A connection's tabs, editor tabs with their text and table tabs with their page and sort, reopen when the connection opens. + +## Multiple cursors + +| Keys | Does | +|---|---| +| `Ctrl+D` | Selects the word at the cursor, then adds a cursor at its next match | +| `Ctrl+Shift+L` | Adds a cursor at every match of the selection or the word | +| `Shift+Alt+Up`, `Shift+Alt+Down` | Adds a cursor on the line above or under the cursor, in the same column | +| `Ctrl+click` | Adds a cursor, or removes the one you click | +| `Escape` | Returns to one cursor, keeping its selection | + +Typing, deleting, pasting and moving work at every cursor, and one `Ctrl+Z` takes the edit back at all of them. A click, a find, **Format** or `Page Up` returns to one cursor. + +## Vim mode + +Turn on **Preferences > Editor > Vim Keybindings**. The line under the text shows the mode and the command you are typing, and the editor's own `Ctrl` shortcuts keep working in every mode. Every other key goes to Vim, `Escape` too, so use **Stop** to stop a running query. + +| Command | Does | +|---|---| +| `:w` | Saves the tab's file, asking for one when the tab has none | +| `:e` | Reads the tab's file again, asking first when that loses changes | +| `:q` | Closes the tab, asking first about unsaved changes or an open transaction | +| `:wq`, `:x` | Saves, then closes the tab | + +## Redis and MongoDB + +On a Redis connection the editor takes Redis commands, one per line, and shows each reply as `redis-cli` does. On MongoDB it takes mongosh statements such as `db.orders.find()`, `aggregate`, `runCommand`, `use` and `show`, and shows one document per row. + +## History and saved queries + +`Ctrl+Shift+H` opens **Query History**: every run from the editor, with full-text search, filters by connection, time and status, and export as SQL or CSV. A run that can carry a password is left out. + +**Save Query…** in the editor's menu keeps the text against the connection. **Saved Queries** in the main menu lists them, the window's connection first. diff --git a/linux/troubleshooting.mdx b/linux/troubleshooting.mdx new file mode 100644 index 0000000..fe46f05 --- /dev/null +++ b/linux/troubleshooting.mdx @@ -0,0 +1,124 @@ +--- +title: Troubleshooting on Linux +description: Saved passwords, SSH tunnels, Kerberos, logs, crash reports and bug reports for TablePro on Linux +tag: "Beta" +--- + +Paths here are for the .deb and .rpm packages. The Flatpak bundle keeps the same files under `~/.var/app/app.tablepro.TablePro/`, mapped in [Where the files are](#where-the-files-are). + +## Passwords + +Saved passwords live in the Secret Service, the desktop keyring that GNOME Keyring, KWallet and KeePassXC provide, and never in a file. + +### Every connect asks for the password + +No Secret Service is running, so there is nowhere to keep the password, and the prompt has no **Remember Password** switch. Check for one: + +```bash +busctl --user list | grep org.freedesktop.secrets +``` + +No line means none is installed or none can start. Install one, then log in again: + +- GNOME and most other desktops: `gnome-keyring` (`sudo apt install gnome-keyring`, `sudo dnf install gnome-keyring`). +- KDE Plasma: KWallet (`kwallet6` on Ubuntu, `kf6-kwallet` on Fedora), which Plasma installs by default. +- KeePassXC: turn on Secret Service Integration in its settings, and leave it running. + +The packages recommend one of these, so a normal install has one. A minimal install or a window manager session may not. + +### A saved password is asked for again + +The keyring is locked. The desktop asks to unlock it when a saved password is read; dismiss that prompt and the app asks for the password instead. A keyring that never unlocks at login usually has a different password from the account, after a password change or with automatic login. Passwords and Keys (Seahorse) or KWallet Manager changes the keyring password to the login password. + +The saved entries are named `TablePro database password for …`, `TablePro SSH password for …` and `TablePro SSH key passphrase for …`. + +## SSH tunnels + +The tunnel runs the system `ssh` and reads `~/.ssh/config`, `~/.ssh/known_hosts` and the SSH agent as a terminal does. When a tunnel fails, try the same hop in a terminal first: + +```bash +ssh -v -J jump.example.com user@bastion.example.com true +``` + +### Agent sign-in fails + +The app uses the agent that `SSH_AUTH_SOCK` names in the desktop session, and `ssh-add -l` lists the keys it holds. When the key works in a terminal and not in the app, the desktop session has a different agent or none: `systemctl --user show-environment | grep SSH_AUTH_SOCK` shows what apps started from the desktop get. + +### Unknown host key + +The server's SHA256 fingerprint shows before anything connects, even where `ssh_config` says `StrictHostKeyChecking accept-new` or `no`. Compare it with `ssh-keygen -lf` on the server's key, or with what the server's administrator gives you. + +### Changed host key + +**Review Key** in the connection's banner replaces the entry in `known_hosts`. Under `StrictHostKeyChecking yes` it cannot: run `ssh-keygen -R host`, then click **Retry**. A revoked key is refused, with no way past it in the app. + +## SQL Server with Kerberos + +**Windows (Kerberos)** uses the ticket `klist` shows. `kinit` and `klist` come in `krb5-user` on Ubuntu and `krb5-workstation` on Fedora. + +```bash +kinit you@EXAMPLE.COM +klist +``` + +### KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN + +The server's service principal, `MSSQLSvc/:`, is not in the realm the lookup used. It is built from the host and port you typed and looked up in `default_realm` of `/etc/krb5.conf` only. Type the host name the SPN is registered for, not an IP address or a CNAME. A server in another realm works only when your KDC answers with a referral, as Active Directory does inside a forest. + +A missing or expired ticket fails the same login: run `kinit` again, then retry. + +## Logs and crash reports + +Started from the desktop, the app writes its log to the journal: + +```bash +journalctl --user --boot | grep -i tablepro +``` + +For a detailed log, quit the app first, since a second launch hands over to the running one and exits. Then start it from a terminal: + +```bash +RUST_LOG=debug tablepro 2> tablepro.log +``` + +The log names your hosts, databases and tables, so read it before you attach it. It never holds passwords. + +Each crash writes a report to `~/.local/state/tablepro/crashes/`, and the next launch offers **Show Report**. Nothing is uploaded. + +## Reporting a bug + +Open an issue at [github.com/TableProApp/TablePro/issues](https://github.com/TableProApp/TablePro/issues) with: + +- The text from **About TablePro > Troubleshooting > Debugging Information**. **Copy Text** puts it on the clipboard. It holds versions and no connection details. +- Where the app came from (the PPA, COPR, a .deb, .rpm or Flatpak bundle from GitHub Releases, or a source build), the distribution and its version, and the desktop and session: `echo $XDG_CURRENT_DESKTOP $XDG_SESSION_TYPE`. +- The log and the newest crash report from the same time, when there is one. + +## After a downgrade + +An older version never changes a file a newer one wrote. It refuses the file until the newer version is installed again or you reset it: + +- The connection list shows "Saved connections were created by a newer version of TablePro". **Reset…** moves the file aside, under a name the toast shows, and starts an empty list. +- A connection's saved tabs do not reopen, and a toast says "Saved tabs could not be read", with **Reset**. +- The query history says it could not be read. + +Installing the newer version again brings all of it back, unless it was reset. + +## Where the files are + +| Path | Holds | +|---|---| +| `~/.config/tablepro/connections.json` | Saved connections, without passwords | +| `~/.config/tablepro/column_widths.json`, `filter_settings.json` | Column widths and filters per table | +| `~/.local/state/tablepro/history.db` | Query history and saved queries | +| `~/.local/state/tablepro/workspaces/` | Each connection's tabs, and the connections open at the last quit | +| `~/.local/share/tablepro/drafts/` | The text of each SQL editor tab | +| `~/.local/state/tablepro/crashes/` | Crash reports | + +Preferences are in GSettings: `gsettings list-recursively app.tablepro.TablePro` lists them, and `man tablepro` has the same list. + +The Flatpak bundle uses `~/.var/app/app.tablepro.TablePro/config/tablepro/`, `.local/state/tablepro/` and `data/tablepro/` in place of `~/.config/tablepro/`, `~/.local/state/tablepro/` and `~/.local/share/tablepro/`. There, the preferences and a detailed log come from: + +```bash +flatpak run --command=gsettings app.tablepro.TablePro list-recursively app.tablepro.TablePro +flatpak run --env=RUST_LOG=debug app.tablepro.TablePro 2> tablepro.log +``` From 2d7d137152523480d3afbeb0bbae5c1119cec437 Mon Sep 17 00:00:00 2001 From: Ngo Quoc Dat Date: Thu, 5 Nov 2026 12:19:46 +0700 Subject: [PATCH 2/2] docs(linux): address beta audit guide gaps --- linux/connect.mdx | 34 ++++++++++--- linux/data-grid.mdx | 2 +- linux/install.mdx | 100 +++++++++++++++++++++++++++++++++++++- linux/troubleshooting.mdx | 97 +++++++++++++++++++++++++++++++----- 4 files changed, 213 insertions(+), 20 deletions(-) diff --git a/linux/connect.mdx b/linux/connect.mdx index 8ee9dd4..d057613 100644 --- a/linux/connect.mdx +++ b/linux/connect.mdx @@ -4,7 +4,9 @@ description: The engines, the connect dialog, TLS, SSH tunnels and SQLite or Duc tag: "Beta" --- -Each connection opens in a window of its own. Opening one that is already open brings its window forward, and **New Window** (`Ctrl+Shift+N`) starts another with the connection list. +A window holds several connection sessions and their tabs. The selected tab decides the active connection for window actions, banners and the assistant. Check its connection and database labels before running a query or changing data. + +Opening a connection that is already open brings its window and session forward. **New Window** (`Ctrl+Shift+N`) starts another with the connection list. **Open Database…** on a connection's sidebar row opens another database as a session in the same window. The connect dialog with Connection, Authentication, Security, SSH Tunnel and Options groups for a PostgreSQL server @@ -29,6 +31,14 @@ Every driver is compiled into the app. Pick the one in **Driver**: The server releases each engine is tested against, and the ones it does not support, are in the app's [supported servers](https://github.com/TableProApp/TablePro/blob/main/linux/README.md#supported-servers) table. +Redshift, CockroachDB, TiDB, OceanBase and Databend are untested on Linux. Support through the PostgreSQL or MySQL drivers on Mac does not establish Linux compatibility. + +## Limits + +- Binary, array, spatial, composite and variant cells are read-only. Inspect or copy them in the grid; use a query to change them. +- Enter time and timestamp values as text, such as `13:45:00` or `2026-11-05 13:45:00`. Include an offset for types that store one. Invalid values stay in the editor with an error; correct them before saving. +- Redis Cluster and Sentinel are unsupported. Connect to a standalone Redis server instead. + ## Add a connection @@ -39,10 +49,10 @@ The server releases each engine is tested against, and the ones it does not supp Pick the **Driver**, then fill **Host** and **Database**. **Port** starts on the engine's default. - Fill **Username** and **Password**. With **Remember Password** on, the password goes to the keyring; with it off, every connect asks for it. + Fill **Username** and **Password**. With **Remember Password** on, the password goes to [secret storage](/linux/troubleshooting#passwords); with it off, every connect asks for it. - **Test** connects once to check the settings, then disconnects. **Connect** saves the connection and opens its window. + **Test** connects once to check the settings, then disconnects. **Connect** saves the connection and adds its session to the window. @@ -65,7 +75,7 @@ Safe Mode is also in the main menu while connected, and a change there is saved | **Confirm Writes** | Asks before every statement that changes the database, showing the SQL and the connection | | **Read-Only** | Opens the connection read-only, and refuses every editor statement that does not read | -Pick **Read-Only** for a production server you only read. Moving to or from it reconnects the window. +Pick **Read-Only** for a production server you only read. Moving to or from it reconnects that connection's sessions. ## TLS @@ -86,7 +96,7 @@ Keep **Verify full** unless the server has no certificate this computer can chec ## SSH tunnels -Turn on **Use SSH Tunnel** and fill **Host or alias**. The tunnel runs the system `ssh` client, so empty rows come from `~/.ssh/config`, and `known_hosts` and your SSH agent apply as they do in a terminal. +Turn on **Use SSH Tunnel** and fill **Host or alias**. Native packages run the system `ssh` client, so empty rows come from `~/.ssh/config`, and `known_hosts` and your SSH agent apply as they do in a terminal. For the bundle, check [Flatpak connections](#flatpak-connections). | Authentication | Uses | |---|---| @@ -111,7 +121,7 @@ A file also opens straight from Files, through **Open With** on a SQLite databas tablepro app.sqlite3 sales.duckdb ``` -The file's own header picks the engine, whatever its name. Each file opens in its own window. A file on a network or FUSE filesystem asks whether to open it read-only first, because neither engine's locking holds there. +The file's own header picks the engine, whatever its name. Each file opens as a session. A file on a network or FUSE filesystem asks whether to open it read-only first, because neither engine's locking holds there. ## SQL Server with Kerberos @@ -121,4 +131,14 @@ Set **Method** to **Windows (Kerberos)**. There is no username or password: the kinit you@EXAMPLE.COM ``` -The driver asks for `MSSQLSvc/:` from the host and port you typed, in the default realm of `/etc/krb5.conf`. Type the host name the SPN is registered for, not an IP address or a CNAME. A server in another realm works only when your KDC answers with a referral, as Active Directory does inside a forest. +The driver asks for `MSSQLSvc/:` from the host and port you typed. Native packages use the default realm of the host's `/etc/krb5.conf`. Type the host name the SPN is registered for, not an IP address or a CNAME. A server in another realm works only when your KDC answers with a referral, as Active Directory does inside a forest. + +## Flatpak connections + +The bundle runs inside a sandbox. Check these differences before copying a native connection setup: + +- Secrets use the Secret portal and an encrypted file inside the sandbox. Follow [keyring recovery](/linux/troubleshooting#passwords) if a password, MCP token or AI key cannot be stored. +- Kerberos uses the host's KCM ticket cache. The sandbox selects `/app/etc/krb5.conf`, with DNS realm and KDC lookup, instead of the host's `/etc/krb5.conf`. Obtain a ticket in KCM on the host; a file-backed ticket cache is not enough. +- SSH reads `~/.ssh/config`, keys and `known_hosts`, but not the host's `/etc/ssh` configuration. `ProxyCommand` and `Match exec` cannot run host-only helpers. Use a setup supported inside the sandbox or install a native package. +- File-backed FIDO keys cannot sign inside the sandbox. Load the key into the host SSH agent and choose **SSH agent**. +- A CA installed only on the host is absent from the runtime's trust store. Select its PEM file in **CA certificate** and keep **Verify full**. diff --git a/linux/data-grid.mdx b/linux/data-grid.mdx index bdea6dc..42c2606 100644 --- a/linux/data-grid.mdx +++ b/linux/data-grid.mdx @@ -32,7 +32,7 @@ A table's filter is kept, and so is each tab's across a restart. ## Edit rows -Editing works in a table tab on a table with a primary key. Rows a query returns in the SQL editor are read-only, and so are key, generated and auto-increment columns, and binary, spatial, array and composite values. +Editing works in a table tab on a table with a primary key. Rows a query returns in the SQL editor are read-only, and so are key, generated and auto-increment columns. Check the [cell type limits](/linux/connect#limits) before editing other columns. | To | Press | |---|---| diff --git a/linux/install.mdx b/linux/install.mdx index 3c4efed..a483a16 100644 --- a/linux/install.mdx +++ b/linux/install.mdx @@ -64,7 +64,9 @@ sudo dnf copr disable @tablepro/tablepro-beta ## Packages on GitHub Releases -Each release and beta on [GitHub Releases](https://github.com/TableProApp/TablePro/releases) carries packages and their `SHA256SUMS`. A beta is a pre-release there. These files do not update themselves. +Each release and beta on [GitHub Releases](https://github.com/TableProApp/TablePro/releases) carries packages and their `SHA256SUMS`. A beta is a pre-release there. A standalone .deb, .rpm or .flatpak bundle gets no app updates unless you install the next file or enable the PPA or COPR for native packages. + +New Linux betas and their fixes are announced on that releases page. Subscribe to its [Atom feed](https://github.com/TableProApp/TablePro/releases.atom) and filter entries for tags starting with `linux-v`. The feed also includes other platforms. PPA and COPR installs get updates through apt or dnf. | File | For | |---|---| @@ -84,3 +86,99 @@ flatpak install --user ./tablepro-0.1.0-beta.1-x86_64.flatpak The Flatpak bundle fetches the GNOME 51 runtime from Flathub, and the next bundle installs over it. Flathub does not carry TablePro itself. The bundle keeps its files under `~/.var/app/app.tablepro.TablePro/`; [Troubleshooting](/linux/troubleshooting#where-the-files-are) lists them. Other distributions build from source with the [Quickstart](https://github.com/TableProApp/TablePro/blob/main/linux/README.md#quickstart) in the app repository. + +## Move between native packages and Flatpak + +The two formats use different [data folders](/linux/troubleshooting#where-the-files-are) and [secret storage](/linux/troubleshooting#passwords). An empty connection list after switching does not mean the old data was deleted. + + + + Quit the app and [back up its files](/linux/troubleshooting#back-up-saved-work), including query history, saved queries and drafts, before changing formats. + + + Reopen the current installation. Choose **Export Connections…** from the main menu and save the file outside its app data folder. Quit it before starting the other installation. + + + Install the other format and choose **Import Connections…** from its main menu. Select the exported file and review the import. This transfers connection settings, not history, drafts or passwords. + + + Re-enter database and SSH passwords and key passphrases. Set up cloud AI keys and MCP clients again if you use them. Keep the backup until you have checked your connections and saved work. + + + +## Uninstall + +Quit the app first. Package removal keeps your connections, history, drafts, preferences and saved secrets. Use the command for your installation: + + + +```bash Ubuntu +sudo apt remove tablepro +``` + +```bash Fedora +sudo dnf remove tablepro +``` + +```bash Flatpak +flatpak uninstall --user app.tablepro.TablePro +``` + + + +The Flatpak commands here assume the `--user` installation in this guide. Use `--system` for a system-wide installation. For a full reset, follow the optional steps next while the app is still installed. + +## Optional full reset + +Resetting deletes saved work and credentials. [Back up saved work](/linux/troubleshooting#back-up-saved-work) first. The steps affect this desktop account, not your server databases or SQLite and DuckDB files stored elsewhere. + + + + Quit the app. Reset GSettings while the installed package still provides its schema: + + + ```bash Native package + gsettings reset-recursively app.tablepro.TablePro + ``` + ```bash Flatpak + flatpak run --command=gsettings app.tablepro.TablePro reset-recursively app.tablepro.TablePro + ``` + + + + For native packages, remove these folders. The commands respect custom XDG locations and delete connections, history, saved queries, tabs, drafts, snippets and crash reports: + + ```bash + rm -rf -- "${XDG_CONFIG_HOME:-$HOME/.config}/tablepro" \ + "${XDG_STATE_HOME:-$HOME/.local/state}/tablepro" \ + "${XDG_DATA_HOME:-$HOME/.local/share}/tablepro" \ + "${XDG_CACHE_HOME:-$HOME/.cache}/tablepro" + ``` + + In Passwords and Keys (Seahorse) or KWallet Manager, delete only the [TablePro secret entries](/linux/troubleshooting#saved-secret-entries). Removing the folders does not remove those keyring items. Then remove the native package with the uninstall command. + + For Flatpak, use this instead of the keep-data uninstall command: + + ```bash + flatpak uninstall --user --delete-data app.tablepro.TablePro + ``` + + [The delete-data option](https://docs.flatpak.org/en/latest/flatpak-command-reference.html#flatpak-uninstall) removes the sandbox's data and permissions, including its encrypted secret file. If the desktop keyring still lists a Secret portal item for this app, remove that item too. Native-installation keyring entries remain separate. + + + For native packages, remove both repositories if you enabled both: + + + ```bash Ubuntu + sudo add-apt-repository --remove ppa:tablepro/tablepro-beta + sudo add-apt-repository --remove ppa:tablepro/tablepro + ``` + ```bash Fedora + sudo dnf copr remove @tablepro/tablepro-beta + sudo dnf copr remove @tablepro/tablepro + ``` + + + For Flatpak, run `flatpak remotes --user`. Remove an unused bundle-origin remote with `flatpak remote-delete --user REPOSITORY`, replacing `REPOSITORY` with its listed name. Keep Flathub if other apps or runtimes use it. + + diff --git a/linux/troubleshooting.mdx b/linux/troubleshooting.mdx index fe46f05..3d0187e 100644 --- a/linux/troubleshooting.mdx +++ b/linux/troubleshooting.mdx @@ -8,11 +8,13 @@ Paths here are for the .deb and .rpm packages. The Flatpak bundle keeps the same ## Passwords -Saved passwords live in the Secret Service, the desktop keyring that GNOME Keyring, KWallet and KeePassXC provide, and never in a file. +Native packages keep saved passwords, the MCP server access token and cloud AI API keys in the Secret Service. GNOME Keyring, KWallet and KeePassXC provide this desktop service. + +For the bundle, see [Flatpak secret storage](/linux/connect#flatpak-connections). It needs a working desktop portal and keyring. There is no plain-text fallback when secret storage fails. ### Every connect asks for the password -No Secret Service is running, so there is nowhere to keep the password, and the prompt has no **Remember Password** switch. Check for one: +When the Secret Service or Flatpak's Secret portal is unavailable, the password prompt has no **Remember Password** switch. Check for a desktop keyring: ```bash busctl --user list | grep org.freedesktop.secrets @@ -30,11 +32,39 @@ The packages recommend one of these, so a normal install has one. A minimal inst The keyring is locked. The desktop asks to unlock it when a saved password is read; dismiss that prompt and the app asks for the password instead. A keyring that never unlocks at login usually has a different password from the account, after a password change or with automatic login. Passwords and Keys (Seahorse) or KWallet Manager changes the keyring password to the login password. -The saved entries are named `TablePro database password for …`, `TablePro SSH password for …` and `TablePro SSH key passphrase for …`. +After unlocking the keyring, retry the connection and accept the unlock prompt. If saving a newly entered password failed, enter it again with **Remember Password** on. + +### MCP and cloud AI cannot read or save a secret + +**Preferences > MCP** reports that the access token cannot be read or kept. **Preferences > AI** or the assistant reports the same problem for an API key. Entering a database password at each connect does not restore these features. + + + + If no keyring is running, install or start one as described in [Every connect asks for the password](#every-connect-asks-for-the-password). For Flatpak, also check that `xdg-desktop-portal` and your desktop's portal backend are installed and running, then log in again. + + + Unlock it in Passwords and Keys or KWallet Manager. If you dismissed an unlock prompt, retry the operation and accept the prompt. + + + In **Preferences > MCP**, click **Try Again**. In **Preferences > AI**, re-enter and apply an API key whose save failed, then retry the request. A key or token already stored does not need replacing after an unlock. + + + +### Saved secret entries + +Native-installation entries have these labels in the desktop keyring: + +- `TablePro database password for …` +- `TablePro SSH password for …` +- `TablePro SSH key passphrase for …` +- `TablePro MCP access token` +- `TablePro API key for …` + +Use these labels when removing saved credentials during a [full reset](/linux/install#optional-full-reset), which also covers removing Flatpak secrets. ## SSH tunnels -The tunnel runs the system `ssh` and reads `~/.ssh/config`, `~/.ssh/known_hosts` and the SSH agent as a terminal does. When a tunnel fails, try the same hop in a terminal first: +Native packages run the system `ssh` and read `~/.ssh/config`, `~/.ssh/known_hosts` and the SSH agent as a terminal does. For the bundle, check the [Flatpak connection limits](/linux/connect#flatpak-connections). When a tunnel fails, try the same hop in a terminal first: ```bash ssh -v -J jump.example.com user@bastion.example.com true @@ -54,7 +84,7 @@ The server's SHA256 fingerprint shows before anything connects, even where `ssh_ ## SQL Server with Kerberos -**Windows (Kerberos)** uses the ticket `klist` shows. `kinit` and `klist` come in `krb5-user` on Ubuntu and `krb5-workstation` on Fedora. +**Windows (Kerberos)** uses an existing ticket. `kinit` and `klist` come in `krb5-user` on Ubuntu and `krb5-workstation` on Fedora. For Flatpak, check the [KCM cache and sandbox configuration](/linux/connect#flatpak-connections) too. ```bash kinit you@EXAMPLE.COM @@ -63,7 +93,7 @@ klist ### KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN -The server's service principal, `MSSQLSvc/:`, is not in the realm the lookup used. It is built from the host and port you typed and looked up in `default_realm` of `/etc/krb5.conf` only. Type the host name the SPN is registered for, not an IP address or a CNAME. A server in another realm works only when your KDC answers with a referral, as Active Directory does inside a forest. +The server's service principal, `MSSQLSvc/:`, is not in the realm the lookup used. It is built from the host and port you typed and looked up in the default realm only. For native packages, check `default_realm` in `/etc/krb5.conf`; Flatpak uses its sandbox configuration. Type the host name the SPN is registered for, not an IP address or a CNAME. A server in another realm works only when your KDC answers with a referral, as Active Directory does inside a forest. A missing or expired ticket fails the same login: run `kinit` again, then retry. @@ -81,9 +111,35 @@ For a detailed log, quit the app first, since a second launch hands over to the RUST_LOG=debug tablepro 2> tablepro.log ``` -The log names your hosts, databases and tables, so read it before you attach it. It never holds passwords. +Before attaching any log, crash report or diagnostic text to a public issue, read it and remove private data. Logs name hosts, databases and tables. Panic messages may include SQL, values or file paths. Keep an unedited copy privately if needed. + +Rust panics on the main UI thread write a text report in the [crash report folder](#where-the-files-are). The next launch offers **Show Report**. Nothing is uploaded. These reports do not cover native segmentation faults, native aborts, out-of-memory kills or every worker-thread panic. + +### Native crashes -Each crash writes a report to `~/.local/state/tablepro/crashes/`, and the next launch offers **Show Report**. Nothing is uploaded. + + + Start with the user journal command in [Logs and crash reports](#logs-and-crash-reports). For a native crash or an out-of-memory kill, also inspect system messages: + + ```bash + journalctl --boot --since "10 minutes ago" | grep -iE 'tablepro|segfault|out of memory|killed process' + ``` + + Adjust the time to include the crash. If system journal access is denied, ask the system administrator for those messages. + + + On distributions running `systemd-coredump`, use [coredumpctl](https://www.freedesktop.org/software/systemd/man/latest/coredumpctl.html): + + ```bash + coredumpctl list tablepro + coredumpctl info PID + ``` + + Replace `PID` with the process ID from the row at the crash time. Read and redact the output before sharing it. If no entry exists or `coredumpctl` is unavailable, use your distribution's crash reporter and send the journal, app version and reproduction steps. + + + +A core dump holds process memory and may contain passwords, tokens, SQL and result rows. Never attach one publicly. Send redacted metadata first. If maintainers need a dump, email [hello@tablepro.app](mailto:hello@tablepro.app) to arrange a private transfer, as listed in [the security policy](https://github.com/TableProApp/TablePro/blob/main/SECURITY.md#reporting-a-vulnerability). ## Reporting a bug @@ -91,17 +147,33 @@ Open an issue at [github.com/TableProApp/TablePro/issues](https://github.com/Tab - The text from **About TablePro > Troubleshooting > Debugging Information**. **Copy Text** puts it on the clipboard. It holds versions and no connection details. - Where the app came from (the PPA, COPR, a .deb, .rpm or Flatpak bundle from GitHub Releases, or a source build), the distribution and its version, and the desktop and session: `echo $XDG_CURRENT_DESKTOP $XDG_SESSION_TYPE`. -- The log and the newest crash report from the same time, when there is one. +- The log and newest crash report from the same time, or native crash metadata, after the [privacy review](#logs-and-crash-reports). ## After a downgrade -An older version never changes a file a newer one wrote. It refuses the file until the newer version is installed again or you reset it: +An app refuses a saved file or history database whose storage format is newer than it understands. This checks the storage format, not the app's version number. An older app may read and change files from a newer app when both use the same format. + +[Back up saved work](#back-up-saved-work) before changing versions. When a storage format is too new: - The connection list shows "Saved connections were created by a newer version of TablePro". **Reset…** moves the file aside, under a name the toast shows, and starts an empty list. - A connection's saved tabs do not reopen, and a toast says "Saved tabs could not be read", with **Reset**. - The query history says it could not be read. -Installing the newer version again brings all of it back, unless it was reset. +Reinstall a version that supports that storage format to reopen the files. Avoid **Reset** if you need the saved work; it starts an empty replacement instead of converting the newer format. + +## Back up saved work + + + + Close every app window and wait for the process to exit. This stops history and draft writes during the copy. + + + Copy the config, state and data folders in [Where the files are](#where-the-files-are) to a private backup location. Keep the entire state folder, including `history.db` and any `history.db-wal` or `history.db-shm` files beside it. For Flatpak, copy the entire app folder. + + + Save the output of the GSettings command in [Where the files are](#where-the-files-are) with the backup as a reference for your settings. Native keyring items are separate; an export of connections does not include their secrets. + + ## Where the files are @@ -112,8 +184,11 @@ Installing the newer version again brings all of it back, unless it was reset. | `~/.local/state/tablepro/history.db` | Query history and saved queries | | `~/.local/state/tablepro/workspaces/` | Each connection's tabs, and the connections open at the last quit | | `~/.local/share/tablepro/drafts/` | The text of each SQL editor tab | +| `~/.local/share/tablepro/snippets/` | Custom SQL editor snippets | | `~/.local/state/tablepro/crashes/` | Crash reports | +These are the default paths. If you set `XDG_CONFIG_HOME`, `XDG_STATE_HOME` or `XDG_DATA_HOME`, use the `tablepro` folder under that location instead. + Preferences are in GSettings: `gsettings list-recursively app.tablepro.TablePro` lists them, and `man tablepro` has the same list. The Flatpak bundle uses `~/.var/app/app.tablepro.TablePro/config/tablepro/`, `.local/state/tablepro/` and `data/tablepro/` in place of `~/.config/tablepro/`, `~/.local/state/tablepro/` and `~/.local/share/tablepro/`. There, the preferences and a detailed log come from: