Skip to content

feat(compare): add TablePlus, and say plainly where it ties - #20

Merged
datlechin merged 1 commit into
mainfrom
feat/compare-tableplus
Aug 17, 2026
Merged

feat(compare): add TablePlus, and say plainly where it ties#20
datlechin merged 1 commit into
mainfrom
feat/compare-tableplus

Conversation

@datlechin

Copy link
Copy Markdown
Member

/compare/tableplus returned 410 Gone from this repository's first commit — route named .gone, plus three tests enforcing the exclusion. Nothing in the repo recorded why. It's a live page now, and TablePlus joins the homepage table as a fourth competitor.

The research changed what this page could honestly say

Two findings, each verified twice, that invalidate the obvious comparison:

TablePlus is native. Swift/Objective-C on AppKit — not Electron, not a JVM. The runtime argument that beats DBeaver, DataGrip and Beekeeper Studio simply does not apply to it.

TablePlus ships an MCP server. Changelog v7.1.8, 10 Jun 2026: "[AI] Introduced and reworked TablePlus MCP." Three releases are titled "MCP Server + macOS 27 Golden Gate", and issue TablePlus#3794 was closed by a maintainer with "we relased this feature on the production already". It also has an LLM chat panel (OpenAI, Anthropic, Copilot, local). Their homepage mentions AI nowhere, so surface-level research returns exactly the wrong answer here.

Also: their Safe Mode has five levels and unlocks with Touch ID against our six.

So four rows are stated as ties

TablePro TablePlus
Technology Native (SwiftUI) Native (AppKit)
AI Assistant
MCP Server
Touch ID

They're in the table as ties rather than quietly omitted, and the verdict says it outright: "The difference is not performance and it is no longer AI — both ship an MCP server. It is the licence."

What actually differs: free vs $99 one device / $129 two, one year of updates then $59 per device to keep them; AGPLv3 vs closed source; 25 drivers vs 16; XLSX export.

What's theirs — in prosCompetitor, because it's real: Windows and Linux builds, Setapp, a perpetual licence that never degrades, shipping since 2019. The table's Windows and Linux row is a ✗ for us.

Every figure comes from tableplus.com, their docs, changelog, GitHub org or the App Store. No competitor comparison page was used as a source — including this site's own, which is how circular numbers get laundered into facts.

No benchmarks block

TablePlus is native like us and nothing published about either app's cold start survives scrutiny. The entry ships without benchmarks; Compare.tsx:167 already guards on the key so "The numbers." doesn't render, and the homepage table shows an em-dash with a footnote saying the figures are not measured rather than estimated.

Cold start    <1s     ~8s      ~10s    ~3s            —
Idle memory   ~80 MB  ~800 MB  1-2 GB  ~200-400 MB    —
Runtime       Native  Java     Java    Electron       Native (AppKit)
Price         Free    /$99     $99/yr  /$108          $99 one device, $129 two

Worth flagging: I recommended page only, leaving the homepage table alone, since TablePlus ties on three of its four rows and the table exists to make the runtime argument. You chose to add the column after seeing the evidence. Noting it so the tradeoff is on the record, not to relitigate.

Guards updated, not deleted

The never-link rule is replaced by the invariant that would actually have caught this: the route constraint and comparisons.json must list the same slugs. A slug in the route with no entry renders blank; an entry with no slug is unreachable — which is what this page was for the project's entire history.

benchmarks is now treated as optional in the two tests that assumed every entry had one, and CompareTableTest gains a check that the fallback stays an em-dash rather than becoming a plausible-looking number someone adds later to tidy the column.

Verification

pint:      passed
Tests:     164 passed (2125 assertions)   ← REQUIRE_SSR=1, no skips
typecheck: only the 2 pre-existing ssr.tsx errors

Rendered and checked by hand: /compare/tableplus returns 200, correct H1, og:image present, FAQPage schema emitted, no "The numbers." block, footer link live, sitemap includes it.

OG image rendered and visually inspected — it reads "Both native. One is free and open source."

One note on tooling: og:generate needs puppeteer, which wasn't installed. I installed it globally (the command already sets NODE_PATH=$(npm root -g), so that's the intended path) and pointed it at your existing Chrome via PUPPETEER_EXECUTABLE_PATH to skip the 150 MB Chromium download.

/compare/tableplus returned 410 from this repository's first commit, with a
route named .gone and three tests enforcing the exclusion. Nothing recorded a
reason. It is a live comparison page now, and TablePlus joins the homepage table
as a fourth competitor.

The research changed what the page could honestly say. TablePlus is a native
AppKit app, not Electron and not a JVM, so the runtime argument that beats
DBeaver, DataGrip and Beekeeper Studio does not apply to it. It also ships an
LLM chat panel and, since 7.1.8 on 10 June 2026, an MCP server — verified in
their changelog and in a closed issue on their tracker — so "we have AI" is not
a difference either. Its Safe Mode has five levels and unlocks with Touch ID
against our six.

Those four are stated as ties in the comparison table rather than quietly left
out, and the verdict says so: the difference is the licence, not the speed.
$99 for one device or $129 for two, one year of updates, then $59 per device to
keep them, against free and AGPLv3. Their Windows and Linux builds, Setapp
listing and never-degrading perpetual licence are in prosCompetitor, because
they are real.

Every figure comes from tableplus.com, their docs, their changelog, their GitHub
org or the App Store. No competitor comparison page was used as a source, this
site's own included.

The entry ships without a `benchmarks` block. TablePlus is native like TablePro
and nothing published about either app's cold start survives scrutiny, so the
homepage table renders an em-dash and the footnote says the numbers are not
measured rather than estimated. Compare.tsx already guards on the key, so the
"The numbers." section does not render on the page.

Guards updated rather than deleted: the never-link rule is replaced by a check
that the route constraint and comparisons.json list exactly the same slugs,
which is the invariant that would have caught this page being unreachable for
the project's whole history. `benchmarks` is treated as optional in the two
tests that assumed every entry had one.
@datlechin
datlechin merged commit bc795f1 into main Aug 17, 2026
5 checks passed
@datlechin
datlechin deleted the feat/compare-tableplus branch August 17, 2026 13:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant