Skip to content

Credential storage ​

Where a password goes ​

A password is written to the OS keyring under:

  • service: dbpinball
  • account: the connection profile id

It is never written to connections.json, never written to localStorage, and never passed as a command-line argument.

Why the account is the profile id ​

The keyring entry is keyed by the profile id, so renaming a profile does not orphan its credential. The id is stable for the life of the profile.

What the store contains ​

Metadata only:

json
{
  "id": "0f0c2f7e-...",
  "name": "Analytics",
  "engine": "postgres",
  "host": "analytics.example.com",
  "port": 5432,
  "database": "analytics",
  "username": "analyst",
  "useSsl": true,
  "target": "unknown"
}

A test asserts the serialized store never contains the string password.

Migration ​

The desktop migration from the old browser localStorage imports metadata only. It never reads, writes or regenerates a password. Existing keyring entries keep working because the service and account are unchanged.

Released under the MIT License.