A Python-powered CLI for managing secure keyring collections on Linux β fast, flexible, and a little bit ferocious.
Keyraken is a command-line tool for managing secure credentials in keyring collections. Built for developers, hackers, and sysadmins, it provides full CRUD support for items with attribute filtering, logic-based queries, and optional secrets β all via Python and D-Bus.
- π Create new items in a keyring collection
- π Read items using label, path, or JSON attribute filters
- β»οΈ Update attributes or secrets with
--replaceor merge - π Delete items or individual attributes
- π List everything in a collection
- π§ Unlock, relock, or create new keyring collections
git clone https://github.com/circasee/keyraken.git
cd keyraken
pip install -r requirements.txtKeyraken requires a Linux system and depends on dbus-python and SecretStorage.
python keyraken.py --helppython keyraken.py new my_collectionThis will create a new keyring collection named my_collection.
By default, your system may trigger a password prompt via the GUI (e.g., GNOME Keyring).
This behavior can occur even without the --password flag, depending on the OS and backend implementation.
To explicitly request a password prompt (when supported):
python keyraken.py new my_collection --passwordπ‘οΈ Note: The
--passwordflag triggers your system's graphical prompt (via D-Bus) to set a password lock.
python keyraken.py create my_collection my_label \
--attributes '{"username": "user123", "email": "user@example.com"}' \
--secret "my_secret_password"If you omit the --secret option, Keyraken will prompt you securely for input using the command line:
python keyraken.py create my_collection my_label \
--attributes '{"username": "user123", "email": "user@example.com"}'Youβll see:
Enter secret (input will be hidden):
This ensures the secret is hidden during entry and not exposed in shell history.
python keyraken.py read my_collection --attributes '{"username": "user123"}'{
"label": "my_label",
"attributes": {
"email": "user@example.com",
"username": "user123",
"xdg:schema": "org.freedesktop.Secret.Generic"
},
"secret": "my_secret_password"
}python keyraken.py read my_collection \
--attributes '{"username": "user123"}' \
--multiple --logic OR[
{
"label": "my_label",
"attributes": {
"email": "user@example.com",
"username": "user123",
"xdg:schema": "org.freedesktop.Secret.Generic"
},
"secret": "my_secret_password"
},
{
"label": "my_label2",
"attributes": {
"email": "user@example.com",
"username": "user123",
"xdg:schema": "org.freedesktop.Secret.Generic"
},
"secret": "my_secret_password"
}
]python keyraken.py update my_collection \
--attributes '{"username": "user123"}' \
--new_secret "new_secret_password" \
--new_attributes '{"email": "new_email@example.com"}'python keyraken.py update my_collection \
--attributes '{"username": "user123"}' \
--new_attributes '{"email": "new_email@example.com"}' \
--replacepython keyraken.py delete my_collection --attributes '{"username": "user123"}'python keyraken.py delete my_collection \
--attributes '{"username": "user123"}' \
--delete_attributes '{"email": ""}'python keyraken.py list my_collection--help output
//######################\\
/#######qprjjl#qprjjl\#######\
#######qprjjl/qprjjl\qprjjl######
####/qprjjl/qprjjl#qprjjl\qprjjl\####
###7170726a6a6c////#####7170726a6a6c###
##7170726a6a6c 7170726a6a6c 7170726a6a6c##
##//0o161 0o160 0o162 0o152 0o152 0o154\\\##
##////0o161 0o160 0o162 0o152 0o152 0o154\\\##
##01110001#01110000 01110010 01101010#011010##
##10/01101:::::100#01110001#0111:::::0001\\##
##01110000:: :::01110010#0110::: ::1010\\##
##01101010#01101100#01110001#01110000//##
####01110010#01101010#01101010#######
#######01101100#00000000#########
## 00 0000 00# #00 0000####00## [ca.
### ## ### ### ### ## ## ##### see]
### ## ## #### ###### #### ## ##
## ## # ## # #### ### ## ## # ####
## ## # ## ## #### #### ### # ####
## # ## ### # ## # ## ## ### ## ## ##
## ## ## ## # ## ## # ## ## ## ##
## ## # ## ## ## ### ## # ## ##
## ## # ## ### # ## ## # ## ##
## ### # ## # # ## # ### ##
## ### # #### #### # ### ##
### ## # ##### ## ## # ## ###
### ## ### ### # ## ##
### ## # # ## ##
## #### ##### #
c ## ### ### ## e
ir ### # # e
ca s
~ Release [1.0.0] the Keyraken! ~
usage: keyraken.py [--help] [--unlock] [--relock] {create,read,update,delete,list,new} ...
Keyraken: The Keyring Kraken CLI (https://github.com/circasee/keyraken)
positional arguments:
{create,read,update,delete,list,new}
create Create a new item in the collection
read Read an item
update Update an item
delete Delete an item or specific attributes of an item
list List all items
new Create a new keyring collection
optional arguments:
--help Show this help message and exit
--unlock Unlock the collection via service prompt
--relock Relock the collection if unlocked
Written and created by circasee.
Β© 2025 circasee. Licensed under the Apache 2.0 License.
Support for this project was provided in part by artificial intelligences like
Chatty Kat.
This project is licensed under the Apache License, Version 2.0.
See the NOTICE file for important attribution information, including third-party materials and assets with different licensing terms.
Note: The
keyraken.pngimage is Β© 2025 circasee. All rights reserved.
It is not covered by the Apache License. Redistribution, modification, or reuse of the image is prohibited without prior written permission from the author.