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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a331a2e89c6ad5147015101cf4e0f59211572e26380273dfaf5a8cea28008de1
|
|
| MD5 |
461a284dcaf664ba4622b09868155d4a
|
|
| BLAKE2b-256 |
0fab4dd258dc56d82a6415deda05b18037aa6300f0be68eb12060ba4fb076bbc
|
Provenance
The following attestation bundles were made for qute_1pass_sidecar-0.1.0.tar.gz:
Publisher:
release.yml on gianlucamazza/qute-1pass-sidecar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qute_1pass_sidecar-0.1.0.tar.gz -
Subject digest:
a331a2e89c6ad5147015101cf4e0f59211572e26380273dfaf5a8cea28008de1 - Sigstore transparency entry: 1566552669
- Sigstore integration time:
-
Permalink:
gianlucamazza/qute-1pass-sidecar@e929a64faa4401c75b8255763d72fcc37e7ade1b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gianlucamazza
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e929a64faa4401c75b8255763d72fcc37e7ade1b -
Trigger Event:
push
-
Statement type:
File details
Details for the file qute_1pass_sidecar-0.1.0-py3-none-any.whl.
File metadata
- Download URL: qute_1pass_sidecar-0.1.0-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06108e89552e976d369a8b9d91e2f47742ec53eee7d2ffdd81c59e16300f6beb
|
|
| MD5 |
d1ec6d764910e5e6de1714b96a530fe5
|
|
| BLAKE2b-256 |
a95ac2eb5171a3216285b72c3162e7a205f5377173e6c206a0f75f1e1a14e431
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qute_1pass_sidecar-0.1.0-py3-none-any.whl -
Subject digest:
06108e89552e976d369a8b9d91e2f47742ec53eee7d2ffdd81c59e16300f6beb - Sigstore transparency entry: 1566552699
- Sigstore integration time:
-
Permalink:
gianlucamazza/qute-1pass-sidecar@e929a64faa4401c75b8255763d72fcc37e7ade1b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gianlucamazza
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e929a64faa4401c75b8255763d72fcc37e7ade1b -
Trigger Event:
push
-
Statement type: