NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #189 most downloaded on PyPI
Store and access your passwords safely.
Last release 10 months ago
16 Nov 2025
Release timing varies
gaps range from 9 days to 11 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
17 years old
203 releases · first in 2009
Update readme to include how-to use with Linux non-graphical environments.
Update readme to include how-to use with Linux non-graphical environments.
Nothing published for this version
Issue #197: Add __version__ attribute to keyring module.
Issue #197: Add __version__ attribute to keyring module.
One column per quarter.
Nothing published for this version
Issue #117: Removed all but the preferred keyring backends for each of the major desktop platforms:
Issue #117: Removed all but the preferred keyring backends for each of the major desktop platforms:
keyring.backends.kwallet.DBusKeyring
keyring.backends.OS_X.Keyring
keyring.backends.SecretService.Keyring
keyring.backends.Windows.WinVaultKeyring
All other keyrings have been moved to a new package, keyrings.alt and backward-compatibility aliases removed. To retain availability of these less preferred keyrings, include that package in your installation (install both keyring and keyrings.alt).
As these keyrings have moved, any keyrings indicated explicitly in configuration will need to be updated to replace "keyring.backends." with "keyrings.alt.". For example, "keyring.backends.file.PlaintextKeyring" becomes "keyrings.alt.file.PlaintextKeyring".
Issue #194: Redirect away from docs until they have something more than the changelog. Users seeking the changelog will want to follow the direct link
Issue #194: Redirect away from docs until they have something more than the changelog. Users seeking the changelog will want to follow the direct link.
Issue #117: Added support for filtering which backends are acceptable. To limit to only loading recommended keyrings (those with priority >= 1), call:
Issue #117: Added support for filtering which backends are acceptable. To limit to only loading recommended keyrings (those with priority >= 1), call:
keyring.core.init_backend(limit=keyring.core.recommended)
Pull Request #190: OS X backend now exposes a keychain attribute, which if set will be used by get_password when retrieving passwords. Useful in envir
Pull Request #190: OS X backend now exposes a keychain attribute, which if set will be used by get_password when retrieving passwords. Useful in environments such as when running under cron where the default keychain is not the same as the default keychain in a login session. Example usage:
keyring.get_keyring().keychain = '/path/to/login.keychain' pw = keyring.get_password(...)
Nothing published for this version
Nothing published for this version
Issue #186: Removed preference for keyrings based on XDG_CURRENT_DESKTOP as these values are to varied to be a reliable indicator of which keyring imp
Issue #186: Removed preference for keyrings based on XDG_CURRENT_DESKTOP as these values are to varied to be a reliable indicator of which keyring implementation might be preferable.
Issue #187: Restore Keyring name in kwallet backend. Users of keyring 6.1 or later should prefer an explicit reference to DBusKeyring or QtKeyring ins
Issue #187: Restore Keyring name in kwallet backend. Users of keyring 6.1 or later should prefer an explicit reference to DBusKeyring or QtKeyring instead.
Issue #183 and Issue #185: Gnome keyring no longer relies on environment variables, but instead relies on the GnomeKeyring library to determine viabil
Issue #183 and Issue #185: Gnome keyring no longer relies on environment variables, but instead relies on the GnomeKeyring library to determine viability.
Issue #99: Keyring now expects the config file to be located in the XDG_CONFIG_HOME rather than XDG_DATA_HOME and will fail to start if the config is
Issue #99: Keyring now expects the config file to be located in the XDG_CONFIG_HOME rather than XDG_DATA_HOME and will fail to start if the config is found in the old location but not the new. On systems where the two locations are distinct, simply copy or symlink the config to remain compatible with older versions or move the file to work only with 7.0 and later.
Replaced Pull Request #182 with a conditional SessionBus construction, based on subsequent discussion.
Pull Request #182: Prevent DBus from indicating as a viable backend when no viable X DISPLAY variable is present.
Pull Request #182: Prevent DBus from indicating as a viable backend when no viable X DISPLAY variable is present.
Pull Request #174: Add DBus backend for KWallet, preferred to Qt backend. Theoretically, it should be auto-detected based on available libraries and i
Pull Request #174: Add DBus backend for KWallet, preferred to Qt backend. Theoretically, it should be auto-detected based on available libraries and interchangeable with the Qt backend.
* Drop support for Python 2.6.
Drop support for Python 2.6.
Updated project metadata to match Github hosting and generally refreshed the metadata structure to match practices with other projects.
Updated project metadata to match Github hosting and generally refreshed the metadata structure to match practices with other projects.
Issue #177: Resolve default keyring name on Gnome using the API.
Issue #177: Resolve default keyring name on Gnome using the API.
Issue #145: Add workaround for password exposure through process status for most passwords containing simple characters.
Allow keyring to be invoked from command-line with python -m keyring.
Allow keyring to be invoked from command-line with python -m keyring.
Issue #156: Fixed test failures in pyfs keyring related to 0.5 release.
Issue #156: Fixed test failures in pyfs keyring related to 0.5 release.
Pull Request #176: Use recommended mechanism for checking GnomeKeyring version.
Pull Request #176: Use recommended mechanism for checking GnomeKeyring version.
Prefer setuptools_scm to hgtools.
Prefer setuptools_scm to hgtools.
Prefer hgtools to setuptools_scm due to setuptools_scm #21 _.
Prefer hgtools to setuptools_scm due to setuptools_scm #21.
Nothing published for this version
Prefer setuptools_scm to hgtools.
Prefer setuptools_scm to hgtools.
Host project at Github (repo _).
Host project at Github (repo).
Version numbering is now derived from the code repository tags via hgtools _.
Version numbering is now derived from the code repository tags via hgtools.
Build and install now requires setuptools.
The entry point group must look like a module name, so the group is now "keyring.backends".
The entry point group must look like a module name, so the group is now "keyring.backends".
Added preliminary support for loading keyring backends through setuptools entry points, specifically "keyring backends".
Added preliminary support for loading keyring backends through setuptools entry points, specifically "keyring backends".
Removed keyring_path parameter from load_keyring. See release notes for 3.0.3 for more details.
Removed keyring_path parameter from load_keyring. See release notes for 3.0.3 for more details.
Issue #22: Removed support for loading the config from the current directory. The config file must now be located in the platform-specific config location.
Issue #22: Deprecated loading of config from current directory. Support for loading the config in this manner will be removed in a future version.
Issue #22: Deprecated loading of config from current directory. Support for loading the config in this manner will be removed in a future version.
Issue #131: Keyring now will prefer pywin32-ctypes to pywin32 if available.
Gnome keyring no longer relies on the GNOME_KEYRING_CONTROL environment variable.
Gnome keyring no longer relies on the GNOME_KEYRING_CONTROL environment variable.
Issue #140: Restore compatibility for older versions of PyWin32.
Pull Request #1 (github) _: Add support for packages that wish to bundle keyring by using relative imports throughout.
Pull Request #1 (github): Add support for packages that wish to bundle keyring by using relative imports throughout.
Issue #49: Give the backend priorities a 1.5 multiplier bump when an XDG_CURRENT_DESKTOP environment variable matches the keyring's target environment
Issue #49: Give the backend priorities a 1.5 multiplier bump when an XDG_CURRENT_DESKTOP environment variable matches the keyring's target environment.
Issue #99: Clarified documentation on location of config and data files. Prepared the code base to treat the two differently on Unix-based systems. For now, the behavior is unchanged.
Extracted FileBacked and Encrypted base classes.
Extracted FileBacked and Encrypted base classes.
Add a pyinstaller hook to expose backend modules. Ref #124
Pull request #41: Use errno module instead of hardcoding error codes.
SecretService backend: correctly handle cases when user dismissed the collection creation or unlock prompt.
Pull request #40: KWallet backend will now honor the KDE_FULL_SESSION environment variable as found on openSUSE.
Pull request #40: KWallet backend will now honor the KDE_FULL_SESSION environment variable as found on openSUSE.
SecretService backend: use a different function to check that the backend is functional. The default collection may not exist, but the collection will
SecretService backend: use a different function to check that the backend is functional. The default collection may not exist, but the collection will remain usable in that case.
Also, make the error message more verbose.
Resolves https://bugs.launchpad.net/bugs/1242412.
Issue #120: Invoke KeyringBackend.priority during load_keyring to ensure that any keyring loaded is actually viable (or raises an informative exceptio
Issue #120: Invoke KeyringBackend.priority during load_keyring to ensure that any keyring loaded is actually viable (or raises an informative exception).
File keyring:
Issue #123: fix removing items.
Correctly escape item name when removing.
Use with statement when working with files.
Add a test for removing one item in group.
Issue #81: Added experimental support for third-party backends. See keyring.core._load_library_extensions for information on supplying a third-party backend.
All code now runs natively on both Python 2 and Python 3, no 2to3 conversion is required.
All code now runs natively on both Python 2 and Python 3, no 2to3 conversion is required.
Testsuite: clean up, and make more use of unittest2 methods.
Issue #114: Fix logic in pyfs detection.
Issue #114: Fix logic in pyfs detection.
Issue #114: Fix detection of pyfs under Mercurial Demand Import.
Issue #114: Fix detection of pyfs under Mercurial Demand Import.
It now uses __import__ instead of loading modules explicitly. The keyring_path parameter to load_keyring is now deprecated. Callers should instead ens…
Simplified the implementation of keyring.core.load_keyring. It now uses __import__ instead of loading modules explicitly. The keyring_path parameter to load_keyring is now deprecated. Callers should instead ensure their module is available on sys.path before calling load_keyring. Keyring still honors keyring-path. This change fixes Issue #113 in which the explicit module loading of keyring modules was breaking package-relative imports.
Renamed keyring.util.platform to keyring.util.platform_. As reported in Issue #112 and mercurial_keyring #31 _ and in Mercurial itself _, Mercurial's
Renamed keyring.util.platform to keyring.util.platform_. As reported in Issue #112 and mercurial_keyring #31 and in Mercurial itself, Mercurial's Demand Import does not honor absolute_import directives, so it's not possible to have a module with the same name as another top-level module. A patch is in place to fix this issue upstream, but to support older Mercurial versions, this patch will remain for some time.
Ensure that modules are actually imported even in Mercurial's Demand Import environment.
Ensure that modules are actually imported even in Mercurial's Demand Import environment.
Removed support for Python 2.5.
Removed support for Python 2.5.
Removed names in keyring.backend moved in 1.1 and previously retained for compatibility.
Restored Python 2.5 compatibility (lost in 2.0).
Restored Python 2.5 compatibility (lost in 2.0).
Issue #10: Added a 'store' attribute to the OS X Keyring, enabling custom instances of the KeyringBackend to use another store, such as the 'internet'
Issue #10: Added a 'store' attribute to the OS X Keyring, enabling custom instances of the KeyringBackend to use another store, such as the 'internet' store. For example:
keys = keyring.backends.OS_X.Keyring() keys.store = 'internet' keys.set_password(system, user, password) keys.get_password(system, user)
The default for all instances can be set in the class:
keyring.backends.OS_X.Keyring.store = 'internet'
GnomeKeyring: fix availability checks, and make sure the warning message from pygobject is not printed.
Fixes to GnomeKeyring and SecretService tests.
Issue #112: Backend viability/priority checks now are more aggressive about module presence checking, requesting __name__ from imported modules to for
Issue #112: Backend viability/priority checks now are more aggressive about module presence checking, requesting __name__ from imported modules to force the demand importer to actually attempt the import.
Issue #111: Windows backend isn't viable on non-Windows platforms.
Issue #111: Windows backend isn't viable on non-Windows platforms.
Issue #110: Fix issues with Windows.RegistryKeyring.
Issue #110: Fix issues with Windows.RegistryKeyring.
Issue #80: Prioritized backend support. The primary interface for Keyring backend classes has been refactored to now emit a 'priority' based on the cu
Issue #80: Prioritized backend support. The primary interface for Keyring backend classes has been refactored to now emit a 'priority' based on the current environment (operating system, libraries available, etc). These priorities provide an indication of the applicability of that backend for the current environment. Users are still welcome to specify a particular backend in configuration, but the default behavior should now be to select the most appropriate backend by default.
Only include pytest-runner in 'setup requirements' when ptr invocation is indicated in the command-line (Issue #105).
Only include pytest-runner in 'setup requirements' when ptr invocation is indicated in the command-line (Issue #105).
Use the same attributes (username / service) as the SecretService backend uses, allow searching for old ones for compatibility.
GNOME Keyring backend:
Use the same attributes (username / service) as the SecretService backend uses, allow searching for old ones for compatibility.
Also set application attribute.
Correctly handle all types of errors, not only CANCELLED and NO_MATCH.
Avoid printing warnings to stderr when GnomeKeyring is not available.
Secret Service backend:
Use a better label for passwords, the same as GNOME Keyring backend uses.
SecretService: allow deleting items created using previous python-keyring versions.
SecretService: allow deleting items created using previous python-keyring versions.
Before the switch to secretstorage, python-keyring didn't set "application" attribute. Now in addition to supporting searching for items without that attribute, python-keyring also supports deleting them.
Use secretstorage.get_default_collection if it's available.
On secretstorage 1.0 or later, python-keyring now tries to create the default collection if it doesn't exist, instead of just raising the error.
Improvements for tests, including fix for Issue #102.
Switch GnomeKeyring backend to use native libgnome-keyring via GObject Introspection, not the obsolete python-gnomekeyring module.
Switch GnomeKeyring backend to use native libgnome-keyring via GObject Introspection, not the obsolete python-gnomekeyring module.
Use the SecretStorage library _ to implement the Secret Service backend (instead of using dbus directly). Now the keyring supports prompting for and d
Use the SecretStorage library to implement the Secret Service backend (instead of using dbus directly). Now the keyring supports prompting for and deleting passwords. Fixes #69, #77, and #93.
Catch gnomekeyring.IOError per the issue reported in Nova client.
Issue #92 Added support for delete_password on Mac OS X Keychain.
Fix for Encrypted File backend on Python 3.
Fix for Encrypted File backend on Python 3.
Issue #97 Improved support for PyPy.
Fixed handling situations when user cancels kwallet dialog or denies access for the app.
Fixed handling situations when user cancels kwallet dialog or denies access for the app.
Fix for OS X backend on Python 3.
Fix for kwallet delete.
Fix for OS X backend on Python 3.
Issue #84: Fix for Google backend on Python 3 (use of raw_input not caught by 2to3).
Your coding agent can read these notes before it upgrades. Set up the MCP server →