2.1 KiB
verstak-browser-extension
Verstak Browser Extension captures pages, selected text, and links and sends them to a local Verstak browser inbox receiver.
The extension does not know Notes, Files, Activity, or Journal internals. It only sends capture events through the public local receiver protocol. If the receiver is offline, captures stay in the extension pending queue.
Build
npm ci
npm test
npm run build
Build output:
dist/chromiumdist/firefox
Firefox Release
Firefox signing uses web-ext and AMO credentials from an env file. The script
requires WEB_EXT_API_PROXY; AMO upload and approval polling run through that
proxy.
VERSTAK_BROWSER_ENV=/home/mirivlad/git/verstak/.env npm run release:firefox
Release output:
release/firefox/verstak-firefox-<version>.xpirelease/firefox/updates.json
The XPI is signed as an unlisted/self-distributed Firefox extension. Build and release artifacts are local outputs and are not committed.
Manual Check
- Start Verstak desktop with the
verstak.browser-inboxplugin installed. - Open the
Browser Inboxworkspace item so it subscribes to capture events. - Install/load
dist/firefoxor the signed XPI in Firefox. - Use the popup
Send Pageaction, or use page context menu actions for selection/link captures.
Local Receiver Protocol
Default endpoint:
POST http://127.0.0.1:47731/api/browser-inbox/v1/captures
Headers:
Content-Type: application/jsonX-Verstak-Receiver-Token: <token>optional, once pairing is implemented
Payload:
{
"schemaVersion": 1,
"captureId": "uuid-or-generated-id",
"capturedAt": "2026-06-27T00:00:00.000Z",
"source": "verstak-browser-extension",
"kind": "page",
"page": {
"url": "https://example.com/article",
"title": "Example Article",
"domain": "example.com"
},
"browser": {
"name": ""
}
}
Supported kind values:
pageselection, withselection.textlink, withlink.urland optionallink.text
Expected success response:
{ "status": "accepted", "captureId": "uuid-or-generated-id" }