{"id":13554974,"url":"https://github.com/passff/passff","last_synced_at":"2025-12-18T11:21:49.703Z","repository":{"id":39717415,"uuid":"13519594","full_name":"passff/passff","owner":"passff","description":"Read-only mirror of https://codeberg.org/PassFF/passff Pull requests and issues on GitHub cannot be accepted and will be automatically closed. ","archived":false,"fork":false,"pushed_at":"2024-06-14T17:32:42.000Z","size":1340,"stargazers_count":1244,"open_issues_count":14,"forks_count":86,"subscribers_count":37,"default_branch":"main","last_synced_at":"2025-03-31T22:22:59.629Z","etag":null,"topics":["firefox-extension","javascript","password-manager","password-store","zx2c4-pass"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/passff.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","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}},"created_at":"2013-10-12T09:42:57.000Z","updated_at":"2025-03-26T11:14:46.000Z","dependencies_parsed_at":"2022-09-21T03:01:09.330Z","dependency_job_id":"de61d81f-5e3f-40e0-b495-12c96e24164d","html_url":"https://github.com/passff/passff","commit_stats":null,"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passff%2Fpassff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passff%2Fpassff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passff%2Fpassff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passff%2Fpassff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/passff","download_url":"https://codeload.github.com/passff/passff/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247744335,"owners_count":20988783,"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":["firefox-extension","javascript","password-manager","password-store","zx2c4-pass"],"created_at":"2024-08-01T12:02:58.941Z","updated_at":"2025-12-18T11:21:44.367Z","avatar_url":"https://github.com/passff.png","language":"JavaScript","readme":"# passff\n\n[![Join the chat at https://gitter.im/jvenant/passff](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jvenant/passff?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n**[zx2c4 pass](http://www.zx2c4.com/projects/password-store/)** management extension for **Mozilla Firefox**.\n\n**Official signed version can be found on the [Mozilla add-on page](https://addons.mozilla.org/firefox/addon/passff)**\n\n![passff](https://user-images.githubusercontent.com/1518387/33810636-8c95df16-de07-11e7-8857-283e7300ecff.png)\n\n## Overview\n\nThis extension will allow you to access your **[zx2c4 pass](http://www.zx2c4.com/projects/password-store/)** repository directly from your web browser.\n\nYou can choose to automatically fill and submit login forms if a matching password entry is found.\n\n## Browser compatibility\n\n- Firefox 50+ (or 54 for [full support](#troubleshooting))\n\n## Installation\n\n### zx2c4 pass repository\n\nThis extension requires **[zx2c4 pass](http://www.zx2c4.com/projects/password-store/)** to be installed and set up with a password repository. Make sure you can execute `pass show some-password-name` in a terminal before continuing.\n\n### Host application\n\nFor the extension to communicate with your system's `pass` script, you need to install what's called the host application from [the official git repository](https://codeberg.org/PassFF/passff-host).\nThe host application allows the extension to communicate with `pass` on your system.\n\n### PassFF extension\n\nInstall the current release of PassFF for your browser:\n\n- [Firefox](https://addons.mozilla.org/firefox/addon/passff)\n\nPrevious releases are available for download as XPI files from [our releases page](https://codeberg.org/PassFF/passff/releases). However, this is strongly discouraged for security reasons!\n\n### A graphical _pinentry_ program\n\nThis program prompts you for your passphrase. One is probably already installed.\nIf PassFF does not work, install one of these programs:\n\n- For Ubuntu/Debian: `pinentry-gtk` or `pinentry-qt` or `pinentry-fltk`\n- For CentOS/RHEL: `pinentry-qt4` or `pinentry-qt`\n- For MacOS: `pinentry-mac`\n\nIf that does not work for you, you may have to configure GnuPG to use the right pinentry program. See the [Troubleshooting](#troubleshooting) section.\n\nNote: Since the host app runs non-interactively, **a console _pinentry_ such as `pinentry-ncurses` is useless** and may render PassFF unusable if this is the default pinentry.\n\n### One-time-password (OTP) Authentication\n\nPassFF can generate tokens to fill OTP input fields if the [pass-otp](https://github.com/tadfisher/pass-otp) extension is installed and the key URI is configured in the password file.\n\n## Password formats\n\nTo make the most of the extension, you should format your password files according to our expected formats.\n\nIf you only want the extension to fill out passwords, you don't need any special format for your password files. But if you follow our formats, the extension can also visit the website's URL and fill out the username and other input fields for you.\n\n### Multi-line format\n\nThis is the _preferred organizational scheme used by the author_ of [pass](https://www.passwordstore.org/).\n\n```\n\u003cthe_password\u003e\nlogin: \u003cthe_login\u003e\nurl: \u003cthe_url\u003e\n\u003cother_inputfield_name\u003e: \u003cinputfield_value\u003e\n```\n\nYou can change or configure additional names for the `login` and `url` fields in preferences.\n\nIf there are no colons (`:`) on the second or third line, they are assumed to contain the username\nand URL respectively (unless those lines are left empty):\n\n```\n\u003cthe_password\u003e\n\u003cthe_login\u003e\n\u003cthe_url\u003e\n\u003cmore_content\u003e\n```\n\nIf there is only a single line, or none of the provided fields matches a login field name, the username is taken from\nthe filename, e.g. `example.com/janedoe` will have a default username of `janedoe`:\n\n```\n\u003cthe_password\u003e\nurl: \u003cthe_url\u003e\n\u003cother_inputfield_name\u003e: \u003cinputfield_value\u003e\n```\n\nIf there is no `url` field, but a `login` field, the URL is taken from the filename, assuming a secure protocol,\ne.g. `shopping/example.com` will have a default URL of `https://example.com`:\n\n```\n\u003cthe_password\u003e\nlogin: \u003cthe_login\u003e\n\u003cother_inputfield_name\u003e: \u003cinputfield_value\u003e\n```\n\nIf there is neither a `url` nor a `login` field, the filename is used as username and the parent directory's\nname is used as URL, e.g. `example.com/janedoe` will have a default username of `janedoe` and a default URL\nof `https://example.com`:\n\n```\n\u003cthe_password\u003e\n\u003cother_inputfield_name\u003e: \u003cinputfield_value\u003e\n```\n\nIf your login credentials do not include any login name information (only a password), you can instruct PassFF to omit\nfilling any login name by adding `login: PASSFF_OMIT_FIELD` to your pass entry. The same keyword can be used for\ncredentials without password, but only login name, or to prevent PassFF from filling specific (other) input fields.\n\nUse symbolic links in your password store directory if the data is identical across pass entries. When you do, make sure\nto use relative (instead of absolute) links since PassFF cannot resolve paths beyond the password store directory.\nIf individual fields are equal across pass entries, you can store the data in one entry and reference that entry from\nothers. For example, in order to instruct PassFF to use the password and login name stored in `shopping/example.com`\nwhen dealing with `shopping/example2.com`, you can use the syntax `-\u003e` followed by a relative or absolute path:\n\n```\n-\u003e /shopping/example.com\nlogin: -\u003e example.com\nurl: https://example2.com\n```\n\nLines besides the login and URL that match the format `\u003cother_inputfield_name\u003e: \u003cvalue\u003e` can be used to fill in input\nfields besides the login and password fields. The left hand side of the colon should match the input field's `name`,\n`id`, `autocomplete`, or `placeholder` attribute. You can instruct PassFF to fill your login name, password, or\nOTP token, by setting `\u003cvalue\u003e` to one of `PASSFF_FIELD_LOGIN`, `PASSFF_FIELD_PASSWORD`, or `PASSFF_FIELD_OTP`.\nAlternatively, you can instruct PassFF explicitly not to fill the specified input field by using the\nkeyword `PASSFF_OMIT_FIELD`.\n\nOptionally, you can store your username, the URL, and additional (less sensitive) meta-data separate\nfrom the password. For example, you can create the two entries `shopping/example.com`\nand `shopping/example.com.meta`. Whenever you select `shopping/example.com` in PassFF, it will\nautomatically append the contents of the corresponding entry with `.meta` extension before parsing\nthe multi-line format specified in this section.\n\n#### Examples\n\n```\nnu8kzeo2Aese\nlogin: bob\nurl: https://codeberg.org/login\n```\n\n```\nSae7gohsooquahCoh3ie\nalice\n```\n\n```\nAephieryZ2Ya\nlogin: kevin\nurl: example.com\notpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP\u0026issuer=Example\npin: 1234\nloginkey: PASSFF_FIELD_OTP\nfancyinput: PASSFF_FIELD_LOGIN\n```\n\n### File-structure format\n\nAlternatively, you can organize your login information with file structure. For example, if you have this file structure:\n\n- www\n  - supersite.com\n    - login\n    - password\n    - url\n    - totp\n  - mysite.com\n\nPassFF will\n\n- get the login from the \"login\", the url from the \"url\" and the password from the \"password\" file under supersite.com\n- get the login from the \"login\" field inside the mysite.com entry for mysite.com (see [format above](#multi-line-format))\n\nThe file structure approach does not support custom input fields.\n\nNote that the file structure format is recognized and assumed by PassFF whenever a file name matches a reserved field name such as `user`, `url`, `password` or `login`. This might cause unexpected behavior in cases where there is a file in [multi-line format](#multi-line-format) whose name happens to be a reserved field name.\n\n### Improve suggestions (contextual entries)\n\nUnless you activate the preference \"Index URL fields on startup\", the auto-suggestions in the menus are based on matches of the current web page's URL against the _names_ of password store entries. In the following, you find an explanation how you can improve matching quality by adapting the names and paths of your password store entries.\n\nGenerally speaking, the match quality is best if the exact hostname as well as all alphanumeric parts of the URL's path appear exactly in your entry's name. An entry is excluded from the matching if no part of the hostname is contained in its name. Matching (parts of) the hostname is more important than matching parts from the rest of the URL.\n\nFor the URL `https://bugs.gentoo.org/index.cgi?GoAheadAndLogIn=1`, best match quality is reached if your password store entry contains the strings `bugs.gentoo.org`, `index` and `GoAheadAndLogIn` in arbitrary order, but for it to be ranked in the matching process at all, it's enough for it to contain the strings `bugs` or `gentoo`.\n\n#### Example with only one entry per hostname\n\nIf you don't have multiple credentials for one hostname in your password store, you get the best results from naming the entries after the exact hostname. In this scenario, if you name an entry `/some/arbitrary/path/bugs.gentoo.org`, it will always rank highest on `https://bugs.gentoo.org/index.cgi?GoAheadAndLogIn=1`.\n\n#### Examples with more than one entry per hostname\n\nIf you happen to have several credentials for one hostname, you could name a directory in your password store after the hostname and list the different credentials inside that directory. Suppose you have different credentials for each of the following URLs:\n\n```\nhttps://my.example.com/cloud\nhttps://my.example.com/blog?login\nhttps://my.example.com/blog?admin\n```\n\nYou could store them in your password store as\n\n```\n/some/path/my.example.com/cloud\n/some/path/my.example.com/blog-login\n/some/path/my.example.com/blog-admin\n```\n\nHowever, the following will work equally well:\n\n```\n/business/cloud/my.example.com\n/personal/my.example.com-blog-login\n/personal/my.example.com-blog-admin\n```\n\nFor the rare case where you need several entries for one hostname but with different ports (e.g. if you have different\nentries for `http://example.com:2000/` and `http://example.com/`), you might want to include the port number `2000`\ninto the name of the entry for `http://example.com:2000/`:\n\n```\n/business/cloud/example.com:2000\n/business/cloud/example.com-2000\n/business/cloud/example.com/port2000\n```\n\n## Configuration and preferences\n\n### Extension preferences\n\nAccessible from the gear button in the toolbar menu, preferences let you fine-tune the behaviour of PassFF.\n\n### Host application preferences\n\nIf you use a customized `pass` installation: environment variables, customized repository path or extensions, you may have to [configure the host application accordingly](https://codeberg.org/PassFF/passff-host#preferences).\n\n## Usage\n\nOnce installed, you should have a new icon in your toolbar. Click the icon to browse your password repository or search using a **fuzzy matching** algorithm.\n\n### Keyboard shortcuts\n\nThe default shortcut to open the menu is \u003ckbd\u003ectrl\u003c/kbd\u003e+\u003ckbd\u003ey\u003c/kbd\u003e.\n\nWith the menu open, you can press \u003ckbd\u003eenter\u003c/kbd\u003e to execute one of the following commands, according to your preferences:\n\n- Goto, fill and submit\n- Goto and fill\n- Fill and submit\n- Fill\n\n### Input menu\n\nPassFF can _mark fillable input fields with the PassFF icon_. It adds an icon in the fields that PassFF can automatically fill. The icon is clickable and pops up a menu to select the password.\nPassFF fills the input fields and optionally submit depending on your preferences. You can always override this behavior by clicking the pencil (Fill) or the paper plane (Fill \u0026 Submit).\n\nThis feature can be disabled in the preferences.\n\n### Contextual menu\n\nIn _any_ input field, fillable or not, you can access a contextual menu (right-click) in order to:\n\n- Add the input field's name in the _Login input names_ for (auto)filling,\n- Add the input field's name in the _OTP input names_ for (auto)filling,\n- Select a password to fill the input fields.\n\n### Adding new passwords\n\nIn order to add a password in your repository, select the 'plus' (+) icon in the toolbar menu.\n\n## Issues\n\nIf you're having problems, the most common causes are misconfigured preferences or an incorrect installation of the host application. You can get more information by [debugging the extension](docs/CONTRIBUTING.md).\n\nFirst, [make sure the host application is installed correctly](https://codeberg.org/PassFF/passff-host).\n\nConfigure the script's execution parameters appropriately in the host app `passff.py`: E.g., set `COMMAND` to the path to the `pass` binary (if installed with homebrew, the default location is `/usr/local/bin/pass`). With those settings in place, the extension should be able to find your passwords.\n\n## Troubleshooting\n\n- **I use an old version of Firefox and I experience weird behaviour**\n  - PassFF is developed for the [latest version of **Firefox**](https://en.wikipedia.org/wiki/Firefox_version_history#Current_and_future_releases). PassFF should also work on previous versions above Firefox 50, which introduced [_native messaging_](https://blog.mozilla.org/addons/2016/08/25/webextensions-in-firefox-50/) for WebExtensions. However, HTTP authentication is available from Firefox 54 onwards.\n- **I get a window saying: _gpg: decryption failed: No secret key_**\u003cbr\u003e\n  **Nothing happens when I click on a password and select an action**\u003cbr\u003e\n  **PassFF does not prompt me for the passphrase**\u003cbr\u003e\n  **PassFF works but only intermittently**\n  - It may be a problem with your pin-entry program, while your gpg-agent sometimes caches your passphrase. Possible solutions:\n    - [Install a graphical pinentry program](#a-graphical-pinentry-program)\n    - Configure GnuPG to call your pinentry program\n      - Add the line `pinentry-program /path/to/your/pinentry` to `~/.gnupg/gpg-agent.conf`\n      - You may need to create this file.\n      - See https://wiki.archlinux.org/index.php/GnuPG#pinentry\n  - Related issues:\n    - [No dialog opening up on Arch Linux](https://codeberg.org/PassFF/passff/issues/330)\n    - [Decryption failed on MacOS](https://codeberg.org/PassFF/passff/issues/325)\n    - [Script execution failed on CentOS](https://codeberg.org/PassFF/passff/issues/367)\n- **The icon/toolbar menu suggests no or the wrong entries**\n  - See the section [Improve suggestions (contextual entries)](https://codeberg.org/PassFF/passff#improve-suggestions-contextual-entries) above.\n\n## Contributing\n\n### Is the documentation too obscure?\n\nOpen a new issue. We will gratefully clarify the doc.\n\n### Would you like to translate PassFF?\n\nOpen a new issue to tell us about it, or make a pull request.\n\n### Would you like to code?\n\nSee [CONTRIBUTING](docs/CONTRIBUTING.md).\n\n## Thanks\n\nDevelopment and improvements\n\n- [Johan Venant](https://github.com/jvenant)\n- [Tobias Umbach](https://github.com/sometoby)\n- [Lenz Weber](https://github.com/phryneas)\n- [Thomas Vogt](https://codeberg.org/tuxor1337)\n\nRussian translation : [Grigorii Horos](https://github.com/horosgrisa)\n","funding_links":[],"categories":["JavaScript","Interfaces","javascript","chrome-extension"],"sub_categories":["All other extensions"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassff%2Fpassff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpassff%2Fpassff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassff%2Fpassff/lists"}