pwdx apt repository

Stateless, offline password derivation. Debian and Ubuntu (22.04 or newer). Current version: 0.1.0-1.

The screenshot below shows that the apt repository works. A real install over HTTPS from your GitHub Pages address succeeded, apt verified the signature, and pwdx-cli selftest printed selftest ok (spec v1). It ran on Ubuntu “resolute” (26.04), which your output shows.


Install

sudo install -d -m 0755 /usr/share/keyrings
curl -fsSL https://dhirajpatra.github.io/pwdx-apt/pwdx-archive-keyring.gpg | sudo tee /usr/share/keyrings/pwdx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/pwdx-archive-keyring.gpg] https://dhirajpatra.github.io/pwdx-apt ./" | sudo tee /etc/apt/sources.list.d/pwdx.list
sudo apt update
sudo apt install pwdx-cli

Then run pwdx-cli selftest. Updates arrive through sudo apt update && sudo apt upgrade.

Verify the signing key

Fingerprint: 3D93F64918CBBD3B580A4418D52F43A7C1D85283

gpg --show-keys --fingerprint /usr/share/keyrings/pwdx-archive-keyring.gpg

Compare it with the fingerprint published in the project README.


How to Use

Linux

Use pwdx-cli get. Since you installed it with apt, the command is pwdx-cli, not pwdx.

Once, before your first site: create your key. Skip this if you already did.

pwdx-cli key new

It asks for a key-file passphrase (at least 12 characters). Then back up the file at ~/.config/pwdx/key.pwdxkey somewhere safe. To use your existing SSH key instead, run pwdx-cli key import-ssh ~/.ssh/id_ed25519.

For each site: run

pwdx-cli get github.com --user you@example.com

It asks for two things, and typing is hidden:
1. Key-file passphrase: the one you chose when you created the key.
2. Memorable password: the short password you remember.

It then prints the password for that site. Paste it into the site's sign-up or change-password page. The next time you log in, run the same command with the same inputs, and you get the same password.

What you can change:

pwdx-cli get github.com --user you@example.com --profile alnum        # letters and digits only
pwdx-cli get github.com --user you@example.com --length 16            # shorter
pwdx-cli get github.com --user you@example.com --counter 2            # new password after a forced change

Copy to the clipboard instead of showing it (Linux):

pwdx-cli get github.com --user you@example.com | xclip -selection clipboard

Install xclip with sudo apt install xclip if you don't have it. On Wayland, use wl-copy instead.

Windows

On Windows there are three places to think about: the program, the key file and your backups.

1. The program folder

Put it somewhere permanent that you control, not Downloads or Desktop:

# in PowerShell, from the folder where you downloaded the zip
Expand-Archive .\pwdx-0.1.0-windows-x86_64.zip -DestinationPath C:\Tools
Rename-Item C:\Tools\pwdx-0.1.0-windows-x86_64 pwdx

You now have C:\Tools\pwdx\pwdx.exe along with LICENSE, NOTICE and the README. Only pwdx.exe is needed to run it. Keep the other files next to it, because the license requires them. If you don't have rights to C:\Tools, use C:\Users\<you>\Tools\pwdx instead.

To type pwdx from any folder, add that folder to your PATH. This works without admin rights:

$u = [Environment]::GetEnvironmentVariable("Path","User")
[Environment]::SetEnvironmentVariable("Path", "$u;C:\Tools\pwdx", "User")

Then close and reopen PowerShell. To upgrade later, replace pwdx.exe in that folder.

2. The key file

You don't choose its location unless you want to. pwdx key new saves it automatically at %APPDATA%\pwdx\key.pwdxkey, which is C:\Users\<you>\AppData\Roaming\pwdx\key.pwdxkey. The command prints the exact path when it creates the file. The AppData folder is hidden, so to open it in File Explorer, paste %APPDATA%\pwdx into the address bar.

Two things to consider:

setx PWDX_KEY_FILE "D:\secure\key.pwdxkey"

After this, reopen PowerShell and use that path. Or add --key D:\secure\key.pwdxkey to each command. pwdx never overwrites an existing key file.

3. Backups

Copy key.pwdxkey to at least two safe places, such as a USB stick kept somewhere else, and a copy in a password manager or other private storage. Check each copy with pwdx key id --key <path>; the 8-character code must match.

Never store these where someone could find them:

4. A private notes file

pwdx doesn't remember how you set up each site. Keep a private note with the site, your username, and any options you changed from the defaults, such as github.com, me@example.com, --profile alnum --length 20, counter 2. That note contains no passwords. Put it in a password manager or any private file, and don't put it in the pwdx program folder.

Rules to remember:

Switching an existing account to a pwdx password: log in to the site as usual, go to its change-password page, and use the new password from the command above. Keep the old one until the site confirms the change.

If you get stuck, send me the exact error and what you typed (not your passwords).

Windows

Both pieces are installed. I'm cross-building the Windows .exe now.

The Windows .exe builds (1.7 MB). To test that it actually runs, I'm installing Wine (a Windows compatibility layer) in the background.

The Windows build runs under Wine and passes its self-test. Now the full flow, with the SSH-key import and password derivation, checked against the independent Python reference.

Yes, the command-line tool works on Windows. I built a Windows version, pwdx-0.1.0-windows-x86_64.zip, which has not run on a real Windows computer yet. I ran it under Wine, a Windows-compatibility layer on Linux, where it passed:

Not tested:

How to use it on Windows:

  1. Unzip the file anywhere, for example C:\Tools\pwdx. There is no installer.
  2. Open PowerShell in that folder and run .\pwdx.exe selftest, then .\pwdx.exe key new.
  3. Get a password with .\pwdx.exe get github.com --user you@example.com. Add | clip at the end to copy it to the clipboard.

The key file is saved at %APPDATA%\pwdx\key.pwdxkey, and it is the same format as on Linux. You can copy your Linux key file over and get the same passwords. A README with these steps is inside the zip, and I added a Windows section to INSTALL.md.

Windows warnings:

Next steps:

The project zip also has scripts/build-windows-zip.sh, which rebuilds the Windows zip on Linux. The Windows app version still depends on the Flutter app, which hasn't been built yet.

Repository creator: Dhiraj Patra

Terms of use and your responsibilities. pwdx is free software released under the MIT License and is provided “as is”, without warranty of any kind, express or implied, including any warranty of merchantability, fitness for a particular purpose, security, or non-infringement. It has not been independently security-audited, and no software can guarantee that an account or device cannot be compromised. You use it entirely at your own risk and are solely responsible for how you use it. This includes keeping your key file and its backup safe, keeping your key-file passphrase and memorable password secret, choosing a memorable password that is long and hard to guess, securing the devices you use it on, remembering the site, username, counter, password type and length you used for each account, and verifying downloads and the repository signing key fingerprint. If you lose your key file without a backup, or forget your memorable password, your derived passwords cannot be recovered by anyone, including the author. You are also responsible for complying with each website’s terms and with the laws that apply to you. To the maximum extent permitted by applicable law, the author and contributors are not liable for any loss, damage, lockout, data loss, unauthorized access, or other claim arising from the use of, or inability to use, this software, even if advised of the possibility of such damage. Nothing here limits any liability that cannot be excluded by law.