DankPinentry

April 22, 2026 ยท View on GitHub

A pinentry implementation that displays a native DankMaterialShell modal for passphrase entry. Works with GPG, SSH, and RBW (Bitwarden CLI).

How it works

There are two parts that work together:

  • pinentry-dms: Go binary that speaks the Assuan protocol on stdin/stdout and communicates with DMS via IPC
  • DMS plugin: Daemon plugin that shows a themed FloatingWindow for passphrase entry

Pinentry client (gpg-agent or rbw) starts pinentry-dms and speaks to it with Assuan. When the client runs GETPIN (to request the password), pinentry-dms opens a Unix socket then sends an IPC call with the dms command to the DankPinentry plugin to show the modal requesting the password. Once the user enters the password, the plugin writes it to the socket which the pinentry-dms command picks up and prints for the pinentry client.

Installation

DMS Plugin

Follow instructions in dms-plugin-registry (id is dankPinentry.

Then enable the plugin in DMS settings.

Pinentry binary

Build with Nix:

nix build .#pinentry-dms

Or with Go:

CGO_ENABLED=0 go build ./cmd/pinentry-dms/

Configuration

Point your GPG agent or RBW to the binary:

RBW (~/.config/rbw/config.json):

{
  "pinentry": "/path/to/pinentry-dms"
}

GPG (~/.gnupg/gpg-agent.conf):

pinentry-program /path/to/pinentry-dms

Requirements

  • DankMaterialShell with the dankPinentry plugin enabled
  • dms binary on PATH (for IPC)