feat(compare): add TablePlus, and say plainly where it ties - #20
Merged
Conversation
/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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
/compare/tableplusreturned 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
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'sWindows and Linuxrow 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:167already 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.Guards updated, not deleted
The never-link rule is replaced by the invariant that would actually have caught this: the route constraint and
comparisons.jsonmust 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.benchmarksis now treated as optional in the two tests that assumed every entry had one, andCompareTableTestgains a check that the fallback stays an em-dash rather than becoming a plausible-looking number someone adds later to tidy the column.Verification
Rendered and checked by hand:
/compare/tableplusreturns 200, correct H1,og:imagepresent, 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:generateneeds puppeteer, which wasn't installed. I installed it globally (the command already setsNODE_PATH=$(npm root -g), so that's the intended path) and pointed it at your existing Chrome viaPUPPETEER_EXECUTABLE_PATHto skip the 150 MB Chromium download.