-
-
Notifications
You must be signed in to change notification settings - Fork 1
Browser Extension
LSPV's browser extension communicates with the desktop app via the Native Messaging API — a local named pipe, no network involved.
Browser Tab
│
▼
Content Script (content.js)
│ chrome.runtime.sendMessage
▼
Background Service Worker (background.js)
│ chrome.runtime.connectNative("com.vaultpass.native")
▼
Named Pipe (Windows) / Unix Socket (Linux)
│
▼
LSPV Desktop (native host binary)
│
▼
Vault (SQLCipher)
Every response from the desktop is Ed25519-signed. The extension verifies the signature before using the data. See Security Architecture — Layer 7 for details.
- Open LSPV desktop
- Go to Settings → Browser → Chrome / Edge
- Open
chrome://extensions, enable Developer mode, copy the extension ID - Paste the ID in LSPV and click Add, then Apply & Register
This writes the native messaging manifest to the Windows registry:
HKCU\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.vaultpass.native
-
chrome://extensions→ Load unpacked - Select the
extension/dist/folder from the LSPV repository - Pin the LSPV icon to the toolbar
Click the LSPV extension icon. If the vault is unlocked, you should see your items. If you see "LSPV desktop is not running," check that the desktop app is open.
- Open LSPV desktop → Settings → Browser → Firefox
- Click Add (the ID
lspv@lspv.appprefills automatically) - Click Apply & Register
This copies a native messaging manifest to:
-
Windows:
%APPDATA%\Mozilla\NativeMessagingHosts\com.vaultpass.native.json -
Linux:
~/.mozilla/native-messaging-hosts/com.vaultpass.native.json
-
about:debugging→ This Firefox → Load Temporary Add-on - Select
extension/dist/manifest.json
Note: Temporary add-ons are removed when Firefox closes. For persistent install, the extension needs to be signed via AMO or installed as a policy.
- You open a web page
- The content script detects visible login forms
- It sends a
DETECT_FORMmessage to the background worker with the current URL - The background worker queries the desktop: "do you have a login for this domain?"
- If yes, an inline prompt appears near the username/password fields
- Clicking a suggestion injects the credentials using the native input value setter (not tracked by browser history)
LSPV matches on eTLD+1 (effective top-level domain + one), not the full URL. Examples:
| Vault URL | Page URL | Match? |
|---|---|---|
https://google.com |
https://accounts.google.com |
✅ |
https://google.com |
https://google.com.evil.ru |
❌ |
https://paypal.com |
https://paypa1.com |
❌ |
https://github.com |
https://github.io |
❌ |
https://amazon.co.uk |
https://www.amazon.co.uk |
✅ |
- The extension never caches passwords in memory, localStorage, or
chrome.storage - Every credential request is a fresh IPC call to the desktop
- Credentials are injected and immediately discarded — no variable holds them after fill
- The content script runs in an isolated world — page JavaScript cannot read its variables
| Symptom | Fix |
|---|---|
| "LSPV desktop is not running" | Open the desktop app and unlock your vault |
| Extension can't find the native host | Re-register in Settings → Browser → Apply & Register |
| Extension shows items but Fill doesn't work | Make sure LSPV has permission to activeTab in chrome://extensions
|
| Popup is blank / spinner forever | Check DevTools console in the extension popup for errors |
| Auto-fill prompt doesn't appear | Some sites block content script injection — use the popup manually |
Each Chrome profile (e.g., personal, work) that connects to LSPV gets its own entry in Settings → Browser → Connected profiles. You can give each profile a friendly name to identify which machine or account it belongs to.