> ## Documentation Index
> Fetch the complete documentation index at: https://ngquct-feat-import-remembered-column-mapping.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Open Project Folder

> Create a connection from the database settings already in your project's config files

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.

<Frame caption="The scan result listing each credential found and the file it came from">
  <img className="block dark:hidden" src="https://mintcdn.com/ngquct-feat-import-remembered-column-mapping/YuSKJwSv6f7lHwL3/images/project-folder-scan.png?fit=max&auto=format&n=YuSKJwSv6f7lHwL3&q=85&s=a4dba2235824eb0980f02333bb7eb72a" alt="Project folder scan sheet" width="1560" height="960" data-path="images/project-folder-scan.png" />

  <img className="hidden dark:block" src="https://mintcdn.com/ngquct-feat-import-remembered-column-mapping/YuSKJwSv6f7lHwL3/images/project-folder-scan-dark.png?fit=max&auto=format&n=YuSKJwSv6f7lHwL3&q=85&s=f477a41ca02a104a3aa48a0fb49e155e" alt="Project folder scan sheet" width="1560" height="960" data-path="images/project-folder-scan-dark.png" />
</Frame>

<Steps>
  <Step title="Open the folder">
    Choose **File > Import > Open Project Folder…**, or **Open Project Folder…** from the **Import** menu on the welcome window, and pick the folder. **Choose Another Folder…** in the sheet points the scan somewhere else without starting over.
  </Step>

  <Step title="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**.
  </Step>

  <Step title="Review and save">
    The connection form opens filled in. Nothing is saved and nothing connects until you click **Save**.
  </Step>
</Steps>

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.

| Note | Meaning |
| - | - |
| Password found | The file has a password. It is not displayed. |
| Looks like a placeholder value | The value matches a known template, such as `!ChangeMe!` or `password_here`. |
| Container service name, may be unreachable | The host is a name like `db` or `postgres`, which usually only resolves inside Docker. |
| Host and port assumed | The file had credentials but no address, so `127.0.0.1` and the default port were used. |
| No published port, may be unreachable | A Compose service with no `ports:` mapping, so your Mac may not reach it. |

A connection starts at the **Alert** [Safe Mode](/features/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

| File | What it reads |
| - | - |
| `.env` and friends | `DATABASE_URL`, `MONGODB_URI`, `REDIS_URL`, `TURSO_DATABASE_URL` and similar URL keys; Laravel `DB_*` keys; Postgres, MySQL, MariaDB, Mongo and SQL Server container variables; `PG*` variables |
| `wp-config.php` | `DB_NAME`, `DB_USER`, `DB_PASSWORD`, `DB_HOST` |
| `prisma/schema.prisma` | The `datasource` provider and url, including `env("…")` references |
| `config/database.yml` | The Rails development section, following anchors and `<<` merge keys, and resolving `ENV["…"]` |
| `docker-compose.yml`, `compose.yaml` | Database services, using the published host port |
| `application.properties`, `application.yml` | `spring.datasource.url`, username, and password |
| `appsettings.json` | The `ConnectionStrings` entries |

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](/connections/urls).

## Related

* [Connection Sharing](/features/connection-sharing) for importing from other database apps
* [Safe Mode](/features/safe-mode) for guarding production connections
