Skip to main content

1Password sidecar daemon for qutebrowser

Project description

qute-1pass-sidecar

Sidecar daemon for qutebrowser's experimental 1Password integration. Listens on a Unix socket, speaks JSON-RPC 2.0, and delegates to a pluggable backend — either the official op CLI (default, ToS-clean) or an experimental native-protocol backend that speaks the 1Password desktop app IPC directly.

Companion browser-side code lives in the validate-8642-webauthn branch of gianlucamazza/qutebrowser. See doc/onepassword.asciidoc for the browser-side setup and command reference.

The copy in misc/onepassword-sidecar/ of that branch mirrors this repository and is kept in sync; either is installable via pip/pipx.

Requirements

  • Python 3.10+
  • 1Password CLI v2 (op) installed and signed in with biometric unlock enabled
  • Linux (macOS support untested; Windows not supported)

Install

# From source (recommended for development)
pip install -e .

# Or with pipx for an isolated environment
pipx install .

This installs the qute-1pass-sidecar executable.

Native backend launcher (optional, required for --backend native)

The native backend communicates with 1Password by spawning /opt/1Password/1Password-BrowserSupport — the same helper process used by the official browser extension. BrowserSupport verifies its caller's binary via /proc/<ppid>/exe and requires it to be root-owned and listed in /etc/1password/custom_allowed_browsers.

The bundled launcher/ directory contains a small C bridge program that forks BrowserSupport as a child and proxies stdin/stdout via poll(). Build and install it with:

# Compile
make -C launcher

# Install root-owned to /usr/local/bin (required for native backend)
make -C launcher install-system
# Then register as a trusted browser (one-time, requires root):
echo qute-1pass-sidecar | sudo tee -a /etc/1password/custom_allowed_browsers

make install (without -system) installs to ~/.local/bin for development/testing, but that path does not satisfy 1Password's root-owned binary requirement, so the native backend will still degrade to op-cli with a clear error message.

If the launcher is not installed at all, starting the sidecar with --backend native automatically falls back to op-cli and reports the reason via ping() (visible via :onepassword status in qutebrowser).

Run

qute-1pass-sidecar [--backend op-cli|native] [--socket-path PATH]

Options:

Flag Default Description
--backend op-cli Backend to use. native is experimental and requires onepassword.experimental_bridge = true in qutebrowser.
--socket-path $XDG_RUNTIME_DIR/qute-1pass.sock Unix socket path. Must match onepassword.socket_path in qutebrowser config if set.

The easiest way to start the sidecar from qutebrowser itself is:

:onepassword restart-sidecar

This reads onepassword.backend and onepassword.socket_path from the browser's config and spawns the sidecar with the matching arguments.

systemd user unit

Create ~/.config/systemd/user/qute-1pass-sidecar.service:

[Unit]
Description=qutebrowser 1Password sidecar
After=graphical-session.target

[Service]
ExecStart=%h/.local/bin/qute-1pass-sidecar --backend op-cli
Restart=on-failure
RestartSec=5

[Install]
WantedBy=graphical-session.target

Enable and start:

systemctl --user enable --now qute-1pass-sidecar.service

Troubleshooting

Socket file collision — if qute-1pass.sock already exists from a previous crashed run and the sidecar refuses to bind, remove the stale file:

rm "$XDG_RUNTIME_DIR/qute-1pass.sock"

op CLI not signed in — the op-cli backend will fail with "locked" if you haven't authenticated. Run:

op signin

and confirm biometric unlock is configured (op account list should show your account).

Checking sidecar status from qutebrowser — use:

:onepassword status

This sends a ping RPC and displays the backend name, capability set, and lock status.

Logs — start the sidecar with --log-level debug (if supported by your install) or run it in a terminal to see JSON-RPC traffic on stderr.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qute_1pass_sidecar-0.1.0.tar.gz (27.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qute_1pass_sidecar-0.1.0-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

Details for the file qute_1pass_sidecar-0.1.0.tar.gz.

File metadata

  • Download URL: qute_1pass_sidecar-0.1.0.tar.gz
  • Upload date:
  • Size: 27.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qute_1pass_sidecar-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a331a2e89c6ad5147015101cf4e0f59211572e26380273dfaf5a8cea28008de1
MD5 461a284dcaf664ba4622b09868155d4a
BLAKE2b-256 0fab4dd258dc56d82a6415deda05b18037aa6300f0be68eb12060ba4fb076bbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for qute_1pass_sidecar-0.1.0.tar.gz:

Publisher: release.yml on gianlucamazza/qute-1pass-sidecar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qute_1pass_sidecar-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for qute_1pass_sidecar-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 06108e89552e976d369a8b9d91e2f47742ec53eee7d2ffdd81c59e16300f6beb
MD5 d1ec6d764910e5e6de1714b96a530fe5
BLAKE2b-256 a95ac2eb5171a3216285b72c3162e7a205f5377173e6c206a0f75f1e1a14e431

See more details on using hashes here.

Provenance

The following attestation bundles were made for qute_1pass_sidecar-0.1.0-py3-none-any.whl:

Publisher: release.yml on gianlucamazza/qute-1pass-sidecar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page