Skip to main content
Point TablePro at a checkout and it reads the database settings out of the config files already in it. Each set of credentials becomes one row, showing the file and key it came from.
Project folder scan sheet

The scan result listing each credential found and the file it came from

1

Open the folder

On the welcome window, choose Add from Existing > Open Project Folder… and pick the folder. Choose Another Folder… in the sheet points the scan somewhere else without starting over.
2

Pick one row

Each row shows the database type, host, port, user, and database, plus the file and key behind it. Select one and click Continue.
3

Review and save

The connection form opens filled in. Nothing is saved and nothing connects until you click Save.
One pass imports one row. Run it again for the next service, and again after you add a service to a compose file. Nothing is matched against the connections you already have, so importing one row twice gives you two connections.

What a row can tell you

Passwords are never displayed. A row says Password found when the file has one, and the value goes straight to your Keychain when you save. A connection starts at the Alert Safe Mode level rather than Silent when prod, production, or live appears as a whole word in the file path, the host, or the database name.

Files it reads

Template files are skipped, so .env.example, .env.sample, .env.template, and .env.dist never appear. .envrc is a shell script, so TablePro neither reads nor runs it.

What the scan skips

The walk goes four levels deep, ignores files over 1 MB, follows no symlinks, and stops after 20,000 entries. It skips node_modules, .git, vendor, dist, build and around twenty more directories of that kind, and never reads inside ~/.ssh, ~/.aws, ~/.gnupg, ~/.docker, ~/Library/Keychains, or /etc. The one file it reads outside the folder you picked is wp-config.php one level up, where many WordPress sites keep it. That row shows its path as ../wp-config.php.

When a value cannot be read

Some settings point elsewhere instead of holding a value, like ${{Postgres.DATABASE_URL}} on Railway or a Rails credential lookup. Those are left out rather than guessed at, so a row you expected can be missing. Fill those in by hand, or paste the URL with Import from URL.