Skip to content

feat(bitwarden): add Bitwarden extension#271

Open
edmogeor wants to merge 4 commits into
vicinaehq:mainfrom
edmogeor:main
Open

feat(bitwarden): add Bitwarden extension#271
edmogeor wants to merge 4 commits into
vicinaehq:mainfrom
edmogeor:main

Conversation

@edmogeor

@edmogeor edmogeor commented May 13, 2026

Copy link
Copy Markdown

Summary

Keyboard-driven access to a Bitwarden vault. Unlock once with your master password, then search and copy passwords, usernames, TOTP codes, and manage Sends - all from the launcher.

Commands

  • Search Vault - browse items grouped by folder; copy passwords, usernames, TOTP, URLs, card numbers, and more with a keystroke.
  • Search TOTP - view live TOTP codes with countdown timers.
  • Search Sends - browse Sends and copy links or text.
  • Create Item - add new Login, Card, Identity, or Secure Note entries.
  • Create Send - create text or file Sends with optional password, expiration, and access limits.
  • Receive Send from Clipboard - receive a Send URL from your clipboard; text is copied, files are downloaded.
  • Generate Password - copy a random password using configurable generation options (length, uppercase, lowercase, numbers, symbols).
  • Log Out - clear the stored session and API key.

Requirements

The Bitwarden CLI (bw) must be installed and on PATH. libsecret-tools is required for secure session storage in the system keyring. Supports US cloud, EU cloud, and self-hosted servers (with optional custom CA certificate).

Configuration

  • Server Region - bitwarden.com (US), bitwarden.eu (EU), or Self-hosted
  • Custom Server URL - required when using Self-hosted, e.g. https://vault.example.com
  • Custom CA Certificate - optional CA cert bundle for self-hosted servers with a private CA
  • API Client ID / API Client Secret - generated from the Bitwarden web vault under Settings → Security → View API key
  • Auto-Lock Timeout - lock the vault after inactivity (default: 6 h)
  • Download Directory - where attached and received files are saved (default: ~/Downloads)
  • Password Generation - configurable length and character sets

Validation

npx vici lint      - manifest valid
npm test           - 307/307 passing
npm run typecheck  - clean
npm run build      - succeeds

Notes

@edmogeor

Copy link
Copy Markdown
Author

@asm0dey closed the other PR as was getting messy with all the changes, new PR here. Added sends support!

@edmogeor edmogeor force-pushed the main branch 2 times, most recently from 06d0244 to cd3ab9e Compare May 13, 2026 17:57
@asm0dey

asm0dey commented May 13, 2026

Copy link
Copy Markdown

@edmogeor I tried to use the TOTP functionality and got following error:

Bitwarden CLI Not Found

The bw binary is not installed or not on your PATH.

Install

Download the Bitwarden CLI from bitwarden.com/download.
Available as AppImage, Snap, or npm:

npm install -g @bitwarden/cli

After installing, restart Vicinae or reopen this command.

@asm0dey

asm0dey commented May 13, 2026

Copy link
Copy Markdown

Also, it takes incredible time to even try to copy it; it seemingly freezes or just thinks for a very long time

@edmogeor

Copy link
Copy Markdown
Author

@edmogeor I tried to use the TOTP functionality and got following error:

Bitwarden CLI Not Found

The bw binary is not installed or not on your PATH.

Install

Download the Bitwarden CLI from bitwarden.com/download.
Available as AppImage, Snap, or npm:

npm install -g @bitwarden/cli

After installing, restart Vicinae or reopen this command.

Also, it takes incredible time to even try to copy it; it seemingly freezes or just thinks for a very long time

@asm0dey Try rebuilding now from the source.

I couldn't replicate the CLI issue - I might suggest using the log out command to clear the cache, and running pkill vicinae && systemctl --user restart vicinae after rebuilding the new source.

To fix the issue with loading, I think it must've been because I was calling the bw cli directly for every item to get the TOTP code, instead of just using the secret to locally generate them (secrets stored using libsecret) - meaning with a long list multiple calls to the bw cli were happening at the same time. This new approach with otpauth seems to be a lot more performant and should fix your issues.

It's totally possible bw cli was crashing/timing out because of the multiple instances causing the error you saw so hopefully this fixes it.

@asm0dey

asm0dey commented May 14, 2026

Copy link
Copy Markdown

Nah, doesn't seem to work for me. I see "Loading…" constantly, and nothing ever copies

@edmogeor

Copy link
Copy Markdown
Author

Nah, doesn't seem to work for me. I see "Loading…" constantly, and nothing ever copies

Hey @asm0dey - can i ask you try again after a logout, rebuild from source and restart (i've made a changed to the caching as to my guess at the issue).

I've also added more robust error logging, so can i ask you run:
tail -F ~/.local/share/vicinae/support/bitwarden/.vicinae/stderr.txt

and submit a bug report on the main branch at https://github.com/edmogeor/vicinae-bitwarden/issues/new?template=bug_report.yml so we can diagnose further there? Much appreciated!

github-actions Bot added 2 commits May 14, 2026 20:56
…password

- Master password field clears its error on the next keystroke so a
  second attempt is no longer silently blocked.
- Logged-out cold open paints the unlock form immediately instead of
  waiting on `bw status`; falls back to a single login+retry if the
  CLI turns out to be unauthenticated.
- Reopening after Log Out no longer flashes a loading screen between
  the optimistic form and the post-login form.
- Split item-utils into focused modules (toast, item-list, item-actions,
  item-form) and removed the single-use json-utils helper.
- Collapsed 22 defensive catch blocks in bw-executor into two conversion
  seams, replaced the getLoginActions push ladder with a declarative
  spec, and extracted shared hooks/helpers (useCardFields,
  runInitialLoad, validateSendForm, requireApiCreds, parseDateFromHours).
- Tightened tsconfig (noUncheckedIndexedAccess, noImplicitOverride).
- CI: fallow health badge now reflects static code health only, not
  churn-weighted hotspots.
@edmogeor

Copy link
Copy Markdown
Author

@asm0dey did you manage to try the latest version? Would be great to see if we can fix your issue so we can get this merged ☺️

@asm0dey

asm0dey commented May 24, 2026 via email

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants