Skip to main content
Two files in the repo root outrank these pages. CLAUDE.md holds the architecture invariants and the rules a change has to meet before it merges; CONTRIBUTING.md holds branch names, the commit format, and the pull request checklist. Both are maintained next to the code they describe, and where either disagrees with a page here, it wins. What these pages add is the part neither file carries: the exact commands, the tool versions behind them, and the plugin SDK.

Setup

Clone, download the libraries, generate the project, build.

Architecture

Module layout, plugin system, editor pipeline.

Building

Debug builds, the plugin compile check, tests, pull request CI.

Releasing

Release builds, notarization, DMG, static libraries, the release tag.

Code Style

Lint and format config, naming, the rules CI enforces.

Plugin Development

Write a driver plugin against TableProPluginKit.

Testing a Custom Plugin

Load a locally built plugin in a debug build.

Plugin Registry

Publish and distribute database driver plugins.

Translating the app

Translate through Xcode’s export and import, one XLIFF file per language. Never edit Localizable.xcstrings by hand: Xcode is the only tool that writes it, so a translation diff holds your language and nothing else.
Between the two commands, translate Localization/fr.xcloc in Xcode, or its Localized Contents/fr.xliff in any XLIFF editor. The export builds the app first. Commit the catalog and not the export: Localization/ is gitignored. For the iPhone and iPad app, run the same commands on TableProMobile/TableProMobile.xcodeproj with the TableProMobile scheme. Plugin and package strings live in the app’s catalog, marked “Managed Manually” so that Xcode keeps them. Run scripts/localization.py plugins --add after adding a String(localized:) to a plugin or a package.