ende is a Go CLI for secure developer-to-developer secret exchange using:
- recipient public-key encryption (
age/ X25519) - sender authentication (Ed25519 signature)
- local trust root (pinned keyring)
- trusted sender pinning (
sender_key_id+ signing public key)
- A encrypts to B's recipient key -> B can decrypt.
- C cannot decrypt without matching private key.
- Signed envelopes detect tampering and sender spoofing.
- Plaintext output to stdout is blocked by default unless
--out -is explicitly passed.
go build ./cmd/endebrew tap DevopsArtFactory/ende https://github.com/DevopsArtFactory/homebrew-ende
brew install endeUpgrade:
brew update
brew upgrade endeVerify:
ende --versionReplace vX.Y.Z with the release tag.
Linux (auto-detect architecture):
VERSION=vX.Y.Z
ARCH="$(uname -m)"
case "$ARCH" in
x86_64) ARCH="amd64" ;;
aarch64|arm64) ARCH="arm64" ;;
*) echo "Unsupported arch: $ARCH" >&2; exit 1 ;;
esac
curl -fL "https://github.com/DevopsArtFactory/ende/releases/download/${VERSION}/ende-linux-${ARCH}" -o ende
chmod +x ende
sudo mv ende /usr/local/bin/ende
ende --versionWindows (auto-detect architecture, PowerShell):
$Version = "vX.Y.Z"
$ArchRaw = [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString().ToLower()
switch ($ArchRaw) {
"x64" { $Arch = "amd64" }
"arm64" { $Arch = "arm64" }
default { throw "Unsupported arch: $ArchRaw" }
}
Invoke-WebRequest -Uri "https://github.com/DevopsArtFactory/ende/releases/download/$Version/ende-windows-$Arch.exe" -OutFile "ende.exe"
.\ende.exe --versionBuild with containerized Go toolchain (host env independent):
make vendor
make docker-test
make docker-build
make docker-build-allYou can pin image:
make docker-build-all GO_DOCKER_IMAGE=golang:1.25New to ende? Run the built-in tutorial for a step-by-step walkthrough:
ende tutorialThe tutorial guides you through:
- Language selection (English / Korean)
- Key generation — creates your sender key pair
- Peer registration — paste a peer's share token, or generate a local test key
- Encrypt — interactive secret input (masked) with password policy guidance
- Decrypt — automatically decrypts the result from step 4
- Generate local key material:
./ende key keygen --name alice --export-public --export-dir .
./ende key keygen --name bob --export-public --export-dir .- Alice shares
share:token from keygen output to Bob.
You can re-print a share token later:
./ende key share --name alice- Bob registers interactively in one command (recipient + sender):
./ende register
# share token (ENDE-PUB-1:...): ENDE-PUB-1:...
# alias override (optional, Enter to use token id):To remove a registered alias later:
./ende unregister alice- Encrypt + sign (default: text to stdout):
echo 'TOKEN=abc123' | ./ende encrypt -t bob4-0. Encrypt from file input:
./ende encrypt -t bob -f secrets.env -o secret.txt4-1. Save text output to file (optional):
echo 'TOKEN=abc123' | ./ende encrypt -t bob --text -o secret.txt4-2. Raw binary output (optional):
echo 'TOKEN=abc123' | ./ende encrypt -t bob --binary -o secret.ende- Verify and decrypt:
./ende verify -i secret.ende
./ende decrypt -i secret.ende -o decrypted.txtText envelope input is also supported:
./ende verify -i secret.txt
./ende decrypt -i secret.txt -o decrypted.txt
./ende decrypt -i secret.txt --text-outende enc=ende encryptende dec=ende decryptende v=ende verifyende k=ende keyende rcpt=ende recipientende snd=ende senderende key kg=ende key keygenende key ls=ende key list
~/.config/ende/keyring.yaml~/.config/ende/keys/*.agekey~/.config/ende/keys/*.signkey
Override location (for virtual env/project-local use):
ENDE_HOME=.ende ./dist/ende key keygen --name alice
# or
ENDE_CONFIG_DIR=.ende ./dist/ende key keygen --name aliceGitHub mode is optional and pin-based:
./ende recipient add --github octocat --key <age-recipient> --key-index 0This performs GitHub SSH key lookup for identity pinning (TOFU) and stores a pin in local keyring. Encryption still uses the provided age recipient key.
See the generated options table and raw --help output:
- License: LICENSE
- Contributing guide: CONTRIBUTING.md
- Code of Conduct: CODE_OF_CONDUCT.md
- Security policy: SECURITY.md
- Changelog: CHANGELOG.md