{"id":43573174,"url":"https://github.com/cebem1nt/keeper","last_synced_at":"2026-02-03T22:38:38.198Z","repository":{"id":252294528,"uuid":"840007268","full_name":"cebem1nt/keeper","owner":"cebem1nt","description":"Keeper is a python password manager with git synchronization between multiple devices. ","archived":false,"fork":false,"pushed_at":"2025-12-17T16:37:28.000Z","size":141,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-21T05:06:53.851Z","etag":null,"topics":["argparse","cryptography","encryption","fernet-cryptography","password-generator","password-manager","password-store","python3","terminal-based","terminal-tool","termux"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cebem1nt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-08T19:16:16.000Z","updated_at":"2025-12-17T20:54:14.000Z","dependencies_parsed_at":"2024-08-12T21:22:05.516Z","dependency_job_id":"c142cb2a-5dea-49ba-bbcd-46a1c4cb7600","html_url":"https://github.com/cebem1nt/keeper","commit_stats":null,"previous_names":["cebem1nt/keeper"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cebem1nt/keeper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cebem1nt%2Fkeeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cebem1nt%2Fkeeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cebem1nt%2Fkeeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cebem1nt%2Fkeeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cebem1nt","download_url":"https://codeload.github.com/cebem1nt/keeper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cebem1nt%2Fkeeper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29060579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T22:28:58.191Z","status":"ssl_error","status_checked_at":"2026-02-03T22:28:56.515Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argparse","cryptography","encryption","fernet-cryptography","password-generator","password-manager","password-store","python3","terminal-based","terminal-tool","termux"],"created_at":"2026-02-03T22:38:32.875Z","updated_at":"2026-02-03T22:38:38.192Z","avatar_url":"https://github.com/cebem1nt.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Keeper\n\nKeeper is a local cli password manager writen in python. Keeper is oriented to extensibility and simplicity in code changing, while at the same time offering a good level of sequrity by default. \n\n## Tweaking\n\nBefore installation, you can tweak your build by modifying ```params.py```\n\n```py\n# Number of iterations used to generate unique key.\n# Key generated with '320000' iterations wont match a \n# key generated with '244444' iterations. \n# More iterations, more time it takes to unlock the locker.\n# Optimal number of iterations is from 300000 to 400000\niterations = 333000 \n\n# Same with token size, but it will affect only new generated token. In case \n# if actual token is longer than it's size, will use first amount of bytes\n# Optimal size: 32 to 64 \ntoken_size = 32\n\n# Same but size of the salt that's added at the beginning of each locker.\n# Warning! In case if locker's salt is less than number passed, will lead to\n# unexpected and fatal errors.\n# Optimal size: 16 to 32 \nsalt_size = 16\n\n# Extensions that are included in build. Leave list empty to disable any\nactive_extensions = ['GitManager']\n\n# Portable build. Will look for token, lokers in the directory\n# where the script is located.\n# Data like token should be located in keepr_dir/data/\n# .lk files should be located in keeper_dir/storage\n# Where keper_dir is the location where executable is located\n\n# Warning! Better compile it if using this param\n\nis_portable = False\n\n# Encryption backend to use, each backend encrypts passwords in different way\n# Passwords encrypted with fernet backend wont be decrypted with AES one\nbackend = 'fernet' # 'AES' \n```\n\n## Installation \n\nJust clone the repo:\n\n```sh\ngit clone https://github.com/cebem1nt/keeper.git\ncd keeper\n```\n\nAnd run the setup script:\n\n```python setup.py```\n\nThis will compile python code using pyinstaller and move compiled file to /usr/bin/ or leave compiled file in /dist/keeper.exe\n\n*Alternatively you can run the project directly:*\n\n```python keeper.py```\n\n## Usage\n\nIf using for the first time, then firstly run:\n\n```sh\nkeeper generate-token\n```\n\nIf you already have token you can put it into:\n\u003e ~/.local/share/keeper (linux, mac, termux)\n\u003e\n\u003e C:\\Users\\\u003cUsername\u003e\\AppData\\Local\\keeper (windows)\n\n```\n$ keeper --help\nusage: keeper [-h] {add,remove,get,edit,list,search,generate,change,copy,current,shred-locker,generate-token} ...\n\nKeeper is a Python password manager. Locker is a .lk file where passwords are stored, triplet is tag/login/password. More detailed info about each command can be seen\nby adding -h to the command.\n\npositional arguments:\n  {add,remove,get,edit,list,search,generate,change,copy,current,shred-locker,generate-token}\n                        Available commands\n    add                 Add a new triplet with provided tag or tags.\n    remove              Remove a triplet based on tag or tags.\n    get                 Retrieve login or password based on tag.\n    edit                Interactively edit parameters of a triplet.\n    list                List all stored triplets.\n    search              Search for a triplets with similar tag.\n    generate            Generates a password and stores it with provided tag\n    change              Changes current locker file to provided.\n    copy                Copy current .lk or token file to the provided directory.\n    current             Prints directory of the current locker in use.\n    shred-locker        Shreds current locker.\n    generate-token      Generates a new token.\n\noptions:\n  -h, --help            show this help message and exit\n```\n\n## lil' notes\n\nThis project is more like an attempt on doing a good password manager, and a fetus of my paranoia:)\nKeeper stores passwords in separate files with .lk extension, which is actually kinda useless, better way of it, is how it realized in pass. Anyways. \n\nYou can setup syncronization between devices by adding repository to the directory where passwords are stored, and enabling GitManager as extension. This will just push and pull changes from remote. \n\n__You can find your files with passwords in:__\n\u003e ~/.keeper_storage (on linux, mac, termux)\n\u003e\n\u003e C:\\Users\\\u003cUsername\u003e\\.keeper_storage (windows)\n\nOr alternatively you can set custom directory by setting __$KEEPER_STORAGE_DIR__ environment variable, for example:\n```sh\nexport KEEPER_STORAGE_DIR=\"$XDG_STATE_HOME/keeper_storage\"\n```\n\nToken is unique for each user and used like kind of salt or pepper for your encrypted passwords. If you want to use it between multiple devices, token must be equal on each device.\n\n__You can find your generated token in:__\n\u003e ~/.local/share/keeper (on linux, mac, termux)\n\u003e\n\u003e C:\\Users\\\u003cUsername\u003e\\AppData\\Local\\keeper (windows)\n\nInside, project seems to be commented well.\n\n## Todo\n\nStuff i will do: \n\n- [x]  Normal Readme\n- [x]  One .py setup script\n- [x]  Git integration for remote usage\n- [x]  Improve extensibility of the code\n- [x]  Event system for extensibility\n- [x]  Opening an .lk file out of working directory\n- [x]  Portable build for keeper, accessing and managing passwords on flashdrive\n- [x]  AES encryption backend\n- [ ]  Option for temporary key storing, so you dont have to enter master password every time\n- [x]  Improve git manager (seems fine for now)\n\nMay be:\n\n- Visual interface\n## What is done\n\n- All the main functionality: Searching, adding, editting, getting, removing passwords \n- Additional functionality: Generating passwords, coppying passwords files, changing between files\n- Basic comments / architecture for extensibility\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcebem1nt%2Fkeeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcebem1nt%2Fkeeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcebem1nt%2Fkeeper/lists"}