Skip to content
Zeyu Zhao edited this page May 24, 2026 · 3 revisions

Plugins

Plugins extend the Password-Manager frontend UI.

v11.08 uses a static frontend. Plugins are loaded from password.html.

Do not follow old plugin instructions that mention editing password.php; that file is not part of the current frontend.

Built-in plugin files

Current plugin files live under:

src/frontend/js/plugins/

Bundled plugins include:

linkbutton.js
tags.js
passwordage.js
keyboardshortcuts.js
passwordhistory.js

The plugin framework is:

src/frontend/js/plugin.js

The password page loads plugins in:

src/frontend/password.html

Install a custom plugin

  1. Put your plugin file under:
src/frontend/js/plugins/

Example:

src/frontend/js/plugins/myplugin.js
  1. Add a script tag in src/frontend/password.html.

Place it after:

<script src="js/plugin.js"></script>
<script src="js/main.js"></script>

Example:

<script src="js/plugins/myplugin.js"></script>
  1. Redeploy the frontend.

  2. Clear browser cache or hard-refresh.

Disable a plugin

Remove or comment out the corresponding <script> tag in:

src/frontend/password.html

Then redeploy the frontend and clear browser cache.

Available hooks

The current plugin framework initializes these hooks:

preDataReady
dataReady
layoutReady
readField
readAccount
drawAccount
accountsReady
fieldsReady
editAccountDialog
showDetails
addAccountPreSend
updateAccountPreSend
logout
preLogout

Register a plugin hook

Example:

registerPlugin("showDetails", function (data) {
    console.log(data.account);
    console.log(data.out);
});

A hook can return a promise. The plugin framework waits for registered hook callbacks through Promise.all.

Common hook data

Examples:

registerPlugin("fieldsReady", function (data) {
    console.log(data.fields);
    console.log(data.accounts);
});
registerPlugin("drawAccount", function (data) {
    const account = data.account;
    const row = data.row;
    console.log(account, row);
});
registerPlugin("editAccountDialog", function (data) {
    console.log(data.account);
});

Security warning

Plugins run in the same browser context as Password-Manager.

A malicious plugin can compromise saved passwords after decryption.

Only install plugins you trust and review. Protect the static frontend host where plugins are deployed.

Clone this wiki locally