{"id":17886521,"url":"https://github.com/vpksoft/passwordkeeper","last_synced_at":"2026-01-15T22:50:05.508Z","repository":{"id":163119444,"uuid":"633514264","full_name":"VPKSoft/PasswordKeeper","owner":"VPKSoft","description":"A software to store login information into an encrypted file.","archived":false,"fork":false,"pushed_at":"2024-04-08T03:55:14.000Z","size":11023,"stargazers_count":2,"open_issues_count":4,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2024-04-08T04:31:15.217Z","etag":null,"topics":["2fa","2fa-security","credential-manager","credential-storage","cross-platform","react","rust","tauri-app","typescript","vite"],"latest_commit_sha":null,"homepage":"https://www.vpksoft.net/2023/07/11/passwordkeeper/","language":"TypeScript","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/VPKSoft.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}},"created_at":"2023-04-27T17:02:58.000Z","updated_at":"2024-04-15T03:52:05.527Z","dependencies_parsed_at":"2023-09-29T19:17:26.657Z","dependency_job_id":"cfa3398e-f6b0-42dd-a049-19ba0b70066e","html_url":"https://github.com/VPKSoft/PasswordKeeper","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VPKSoft%2FPasswordKeeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VPKSoft%2FPasswordKeeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VPKSoft%2FPasswordKeeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VPKSoft%2FPasswordKeeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VPKSoft","download_url":"https://codeload.github.com/VPKSoft/PasswordKeeper/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247036185,"owners_count":20872912,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["2fa","2fa-security","credential-manager","credential-storage","cross-platform","react","rust","tauri-app","typescript","vite"],"created_at":"2024-10-28T13:07:12.256Z","updated_at":"2026-01-15T22:50:05.469Z","avatar_url":"https://github.com/VPKSoft.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PasswordKeeper\nA software to store login information into an encrypted file. \n\n[![Lint \u0026 Test deployment package](https://github.com/VPKSoft/PasswordKeeper/actions/workflows/main-lint-test-deploy.yml/badge.svg)](https://github.com/VPKSoft/PasswordKeeper/actions/workflows/main-lint-test-deploy.yml) [![Crowdin](https://badges.crowdin.net/passwordkeeper/localized.svg)](https://crowdin.com/project/passwordkeeper)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper?ref=badge_shield)\n\n![image](https://github.com/user-attachments/assets/e3444679-6b38-4a3a-9bde-44b788e72fa8)\n\nFor instructions, see: [Help](https://vpksoft.github.io/PasswordKeeper/).\n\n# The encryption\nThe encryption algorithm used is [AES-GCM-SIV](https://en.wikipedia.org/wiki/AES-GCM-SIV) with [Argon2](https://en.wikipedia.org/wiki/Argon2) / Argon2id key derivation function.\n\n# The file structure\n|Entry|Length|\n|---|---|\n|Random [salt](https://en.wikipedia.org/wiki/Salt_(cryptography))|32 bytes|\n|Random [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce)|12 bytes|\n|The length of the encrypted data|8 bytes (64-bit) unsigned integer|\n|The encrypted data|N bytes|\n\n## The data structure within the file\nThe login information data is stored as an [JSON](https://en.wikipedia.org/wiki/JSON) array to the with the following [TypeScript](https://www.typescriptlang.org) type definition:\n```typescript\n/**\n * The entry / category data format for the program.\n */\nexport type DataEntry = {\n    /** The name of the entry or a category. */\n    name: string;\n    /** The optional domain for the login credentials. */\n    domain?: string | undefined;\n    /** The host address where the login information is to be used. */\n    address?: string | undefined;\n    /** The user name for the credentials. */\n    userName?: string | undefined;\n    /** The password for the login credentials. */\n    password?: string | undefined;\n    /** Additional notes for the login information. */\n    notes?: string | undefined;\n    /** An unique identifier for an entry or a category. */\n    id: number;\n    /** In case of an entry the parent category for the entry. Otherwise -1. */\n    parentId: number;\n    /** The key \u003c--\u003e URL for OTP authentication. */\n    otpAuthKey?: string;\n    /** A value indicating whether to use markdown for the {@link DataEntry.notes} rendering. */\n    useMarkdown?: boolean;    \n};\n```\n\n# Install\n## Windows\nDownload the [PasswordKeeper_X.Y.Z_x64-setup.exe](https://github.com/VPKSoft/PasswordKeeper/releases/), ignore the warnings and install the software.\nIf the installation fails you may need to install webview2, See: https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section\n\n## Linux\n1. Download the [password-keeper_X.Y.Z_amd64.AppImage](https://github.com/VPKSoft/PasswordKeeper/releases/)\n2. Run `chmod +x password-keeper_X.Y.Z_amd64.AppImage` on the file.\n3. Run the password-keeper_X.Y.Z_amd64.AppImage file.\n\n## macOS\n1. Download the [PasswordKeeper_x64.app.tar.gz](https://github.com/VPKSoft/PasswordKeeper/releases/)\n2. Extract the `PasswordKeeper.app` from the file\n3. Run `xattr -c PasswordKeeper.app` on the file.\n4. Run the `PasswordKeeper.app`\n\n# Getting started with the source code\n* Install [rust](https://www.rust-lang.org) \u0026 cargo.\n* Install [Node.js](https://nodejs.org)\n* Run the init script, `init.ps1` for Windows, `init.sh` for Linux \u0026 Mac.\nFor linux Mint I needed to install the following packages for the rust build:\n```sh\nsudo apt-get install webkit2gtk-4.0\nsudo apt-get install libjavascriptcoregtk4.0\nsudo apt-get install libsoup2.4\n```\n* Install [VS Code](https://code.visualstudio.com)\n* Add plugins to [VS Code](https://code.visualstudio.com)\n  - [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)\n  - [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)\n  - [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode)\n\n* Debug with \u003ckbd\u003eF5\u003c/kbd\u003e\n\n# Hosted store\nA backend is also under development and it is comming when ready, see: [PasswordKeeperServer](https://github.com/VPKSoftOrg/PasswordKeeperServer)\n\n# Why this software\nI know there are a million password managers available already. The current solution I'm using is [VeraCrypt](https://www.veracrypt.fr/code/VeraCrypt/) virtual disk with an encrypted [LibreOffice](https://www.libreoffice.org) Calc file inside the disk. This is challenging to open for a quick review and I always forget to close the file or unmount the virtual disk - feel free to use the tip though 😄\nWell, that was background noise - the reasons:\n1. Keeping it simple, see: [The KISS Principle](https://en.wikipedia.org/wiki/KISS_principle)\n2. I want to learn [rust](https://www.rust-lang.org)\n3. To have the code base working fully cross platform\n4. Have a simple structure with strong encryption for the file the data is stored into.\n\n# Thanks to\n[Tauri](https://tauri.app), [Node.js](https://nodejs.org), [React](https://react.dev), [Font Awesome *Free*](https://fontawesome.com/search?o=r\u0026m=free), [Weblate](https://weblate.org), [i18next](https://www.i18next.com), [React Countdown Circle Timer](https://www.npmjs.com/package/react-countdown-circle-timer), [Html5-QRCode](https://www.npmjs.com/package/html5-qrcode), [totp-rs](https://crates.io/crates/totp-rs), [qrcode](https://www.npmjs.com/package/qrcode), [google-authenticator-exporter](https://github.com/krissrex/google-authenticator-exporter), [protobufjs](https://www.npmjs.com/package/protobufjs), [html-react-parser](https://www.npmjs.com/package/html-react-parser), [DOMPurify](https://www.npmjs.com/package/dompurify), [Marked](https://www.npmjs.com/package/marked), [Jodit](https://github.com/xdan/jodit) and [React Jodit WYSIWYG Editor](https://github.com/jodit/jodit-react)\n\n* *UX Powered by* **[Ant Design](https://ant.design)**\n\n  ![image](https://github.com/VPKSoft/PasswordKeeper/assets/40712699/7f9c19fe-4b38-499a-9cfe-f3cba79347b8)\n\n\n* Localization powered by [Crowdin](https://crowdin.com) (for Open-source project)\n\n  \u003cimg src=\"https://github.com/VPKSoft/PasswordKeeper/assets/40712699/0dc92fca-9763-4376-bd05-70c1c5c92780\" width=\"200px\" /\u003e\n\n\n## License\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvpksoft%2Fpasswordkeeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvpksoft%2Fpasswordkeeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvpksoft%2Fpasswordkeeper/lists"}