Skip to content

tablen 1.21.1 (new cask)#258262

Open
ahmetbarut wants to merge 2 commits intoHomebrew:mainfrom
ahmetbarut:add-tablen
Open

tablen 1.21.1 (new cask)#258262
ahmetbarut wants to merge 2 commits intoHomebrew:mainfrom
ahmetbarut:add-tablen

Conversation

@ahmetbarut
Copy link
Copy Markdown

After making any changes to a cask, existing or new, verify:

Additionally, if adding a new cask:

  • Named the cask according to the token reference.
  • Checked the cask was not already refused (add your cask's name to the end of the search field).
  • brew audit --cask --new <cask> worked successfully.
  • HOMEBREW_NO_INSTALL_FROM_API=1 brew install --cask <cask> worked successfully.
  • brew uninstall --cask <cask> worked successfully.

About the cask

Tablen is a native macOS SQL client. Website: https://tablen.app. Current stable release: 1.21.1 (build 32), published via the vendor's own CDN at https://cdn.tablen.app/releases/Tablen-1.21.1.dmg and surfaced over Sparkle's appcast feed at https://tablen.app/api/appcast.xml, which is the same feed the app's in-app updater already uses (SUFeedURL in Info.plist).

Manual verification I performed

  1. brew style Casks/t/tablen.rb → "1 file inspected, no offenses detected".
  2. brew audit --cask --online --new tablen → clean, no problems detected. The audit required two iterations: the first run flagged depends_on macos: ">= :sonoma" as too permissive (the app's LSMinimumSystemVersion is 15.0, so it must be :sequoia), and it flagged a version/livecheck mismatch because the Sparkle feed surfaces both sparkle:shortVersionString=1.21.1 and sparkle:version=32. Both were fixed: depends_on is now :sequoia, and the livecheck block uses strategy :sparkle, &:short_version to extract only the marketing version.
  3. HOMEBREW_NO_INSTALL_FROM_API=1 brew install --cask tablen → installed cleanly.
  4. brew uninstall --cask tablen → uninstalled cleanly.
  5. curl -sI https://cdn.tablen.app/releases/Tablen-1.21.1.dmgHTTP/2 200, content-length: 44296728 (matches the local DMG byte count exactly).
  6. shasum -a 256 ~/Downloads/Tablen-v1.21.1.dmg8e4ff369e3d440f75c222581e8db9e2995f16f629569771a081160bcad61f23d — identical to the sha256 in the cask.
  7. curl -s https://tablen.app/api/appcast.xml → valid Sparkle RSS, sparkle:shortVersionString=1.21.1, sparkle:version=32, sparkle:minimumSystemVersion=14.0.
  8. /usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" ~/Downloads/Tablen.app/Contents/Info.plistapp.tablen.macos.
  9. /usr/libexec/PlistBuddy -c "Print :LSMinimumSystemVersion" ~/Downloads/Tablen.app/Contents/Info.plist15.0 — confirming depends_on macos: ">= :sequoia".
  10. /usr/libexec/PlistBuddy -c "Print :SUFeedURL" ~/Downloads/Tablen.app/Contents/Info.plisthttps://tablen.app/api/appcast.xml — matches the livecheck url.
  11. find ~/Library -iname "*tablen*" -o -iname "app.tablen.macos*" on a machine where Tablen had been launched multiple times, to enumerate every real path the app writes to. I used this as the ground truth for the zap stanza.

  • AI was used to generate or assist with generating this PR. Please specify below how you used AI to help you, and what steps you have taken to manually verify the changes, including zap stanza paths.

How AI was used

Claude (Opus 4.6) assisted with drafting the cask file and this PR description. Specifically:

  • Generated the initial cask "tablen" do ... end skeleton using Casks/t/tableplus.rb as a local style reference in this repo.
  • Suggested the :sparkle livecheck strategy pointing at Tablen's existing SUFeedURL.
  • Caught a rubocop Cask/Desc violation on the first draft (desc "Native SQL client for macOS" — descriptions shouldn't mention the platform) and corrected it to "Native SQL client".
  • Proposed a first-pass zap trash: list, which I then corrected after running a real filesystem scan (see below — the final list differs materially from the first proposal).
  • Diagnosed both brew audit failures (:sonoma vs :sequoia and the version/livecheck mismatch) and proposed the fixes I verified.

Manually verified zap stanza paths

The seven paths in the zap trash: stanza are exactly the app-owned locations the find enumeration returned. Each is described below with how I confirmed ownership and what it contains.

  • ~/Library/Application Support/CrashReporter/Tablen_*.plist — per-app CrashReporter plist (e.g. Tablen_D3087F88-A67F-5F7A-9838-20B7F6290113.plist on my machine). Globbed because the suffix is a stable per-install UUID generated by the OS for that specific app bundle.
  • ~/Library/Application Support/DBClient — primary data directory. Contains connections.json, query_history.json, ai_conversations.json, session_cache.json, snapshots/, plugins/, query-autosave/. I confirmed ownership by reading DBClient/Core/Services/ConnectionManager.swift, which explicitly builds the path with appSupport.appendingPathComponent("DBClient"). The folder name differs from the product name because the Xcode project was originally named DBClient before the product was renamed to Tablen.
  • ~/Library/Caches/app.tablen.macos — standard macOS NSURLCache directory + the io.sentry crash-reporter working directory + a fsCachedData/ WebKit filesystem cache.
  • ~/Library/HTTPStorages/app.tablen.macos — cookies and HTTP storage used by in-app WKWebViews (license activation, release notes, docs browser).
  • ~/Library/Mobile Documents/iCloud~app~tablen~macos — the app's iCloud container. Tablen ships the com.apple.developer.icloud-container-identifiers entitlement (verified in DBClient/DBClient.entitlements and in the signed binary's entitlements blob) for CloudKit-backed connection sync. Omitting this would leave user data in iCloud Drive after an uninstall.
  • ~/Library/Preferences/app.tablen.macos.plist — standard UserDefaults preferences plist.
  • ~/Library/Saved Application State/app.tablen.macos.savedState — standard macOS window restoration state.

Paths I deliberately did NOT include

  • ~/Library/Logs/DiagnosticReports/Retired/Tablen-*.ipsfind returned around thirty of these files on my machine. They are crash dumps that macOS writes and rotates itself under /Library/Logs/DiagnosticReports, and are not owned by the app bundle. Per Homebrew's convention for system-owned locations, zap should not touch them.
  • Keychain entries under the app.tablen.macos service. Tablen stores database passwords and its Sparkle EdDSA key reference there. Following common cask practice, zap does not remove Keychain credentials so users who uninstall and reinstall do not lose stored database passwords. Users who want a full wipe can delete those items manually via Keychain Access.
  • ~/Library/WebKit/app.tablen.macos — did not exist on my machine (Tablen does not currently use persistent WebKit storage beyond what HTTPStorages already covers). Not included to avoid listing a path that is never actually created.

Copilot AI review requested due to automatic review settings April 8, 2026 20:46
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new Homebrew cask for Tablen (a macOS SQL client) at version 1.21.1.

Changes:

  • Introduces Casks/t/tablen.rb defining Tablen’s download URL, livecheck, macOS requirement, and zap stanza.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@ahmetbarut ahmetbarut changed the title Add Tablen 1.21.1 Add Tablen (new cask) Apr 8, 2026
@bevanjkay bevanjkay changed the title Add Tablen (new cask) tablen 1.21.1 (new cask) Apr 9, 2026
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants