Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# CHANGELOG

**v0.1.1 - 09-05-2026**

- Cross-platform keychain fix


**v0.1.0 - 09-01-2026**

- Initial release
3 changes: 2 additions & 1 deletion keystore/keychain_index.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ import "sync"
// index. The keychain stores the identity-name list as a single JSON blob (no
// atomic list primitive), so concurrent identity creation/removal would
// otherwise race on ListNames→mutate→Set and lose an entry, making a stored key
// invisible to ListNames. Shared by the linux and darwin keychain backends.
// invisible to ListNames. Shared by the darwin (native) and go-keyring
// (all other platforms) keychain backends.
var keychainIndexMu sync.Mutex
11 changes: 9 additions & 2 deletions keystore/keychain_linux.go → keystore/keychain_keyring.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build linux
//go:build !darwin

package keystore

Expand All @@ -11,7 +11,14 @@ import (
"github.com/zalando/go-keyring"
)

// KeychainStore stores keys in the OS keychain via go-keyring (D-Bus Secret Service).
// KeychainStore stores keys in the OS keychain via go-keyring, which is pure Go
// (no cgo) and self-dispatches per platform: D-Bus Secret Service on Linux and
// the BSDs (OpenBSD/NetBSD unconditionally; FreeBSD/DragonFly when cgo is on),
// the Credential Manager (wincred) on Windows, and a graceful
// ErrUnsupportedPlatform fallback everywhere else. On platforms with no live
// backend, KeychainAvailable() returns false and callers fall back to the
// encrypted file store — so this one file safely covers every non-macOS target.
// macOS uses the native Security.framework via keychain_darwin.go instead.
type KeychainStore struct{}

// NewKeychainStore creates a new KeychainStore.
Expand Down
Loading