No description
  • Swift 98.3%
  • Shell 1.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-30 12:22:19 +02:00
Apps/ChefwardenMac feat: Enhance SSH agent functionality with multi-socket support and public key listing 2026-08-30 12:22:19 +02:00
docs feat: Enhance README and add SSH agent documentation for vault SSH-key management 2026-08-28 16:55:59 +02:00
Scripts feat: Implement PinUnlocker for user key wrapping and unwrapping with a PIN 2026-08-30 11:50:33 +02:00
Sources feat: Enhance SSH agent functionality with multi-socket support and public key listing 2026-08-30 12:22:19 +02:00
Tests/VaultCoreTests feat: Implement PinUnlocker for user key wrapping and unwrapping with a PIN 2026-08-30 11:50:33 +02:00
.gitignore Add .gitignore file to exclude build artifacts and sensitive information 2026-08-28 12:52:29 +02:00
build.sh feat: Enhance SSH agent functionality with multi-socket support and public key listing 2026-08-30 12:22:19 +02:00
LICENSE Add comprehensive unit tests for VaultCore functionality 2026-08-28 12:52:44 +02:00
Package.swift feat: Add app icon rendering and include icon in ChefwardenMac bundle 2026-08-28 15:00:11 +02:00
README.md feat: Implement PinUnlocker for user key wrapping and unwrapping with a PIN 2026-08-30 11:50:33 +02:00

Chefwarden

A native macOS (and eventually iOS) password manager client for Bitwarden and Vaultwarden servers, built with Swift and SwiftUI instead of Electron.

Chefwarden speaks the same REST API as the official Bitwarden clients, so it works against your existing self-hosted Vaultwarden instance (or bitwarden.com) with no migration, no new backend, and no changes to your vault. It's a client, not a fork of the server.

Not affiliated with Bitwarden Inc. "Bitwarden" is a trademark of Bitwarden, Inc. Chefwarden is an independent, community client implementing the same open wire protocol.

Why

The official Bitwarden desktop app is Electron-based. Chefwarden is 100% native Swift/SwiftUI — smaller, faster to launch, and able to integrate with macOS the way Electron apps can't (native Password AutoFill via ASCredentialProviderExtension, once that milestone lands).

Status

Actively developed, pre-release. It already does real work against a real server, but has not had a security audit — see Security before trusting it with anything you can't afford to lose access to.

Works today:

  • Login against a self-hosted Vaultwarden or bitwarden.com server (email + master password, 2FA)
  • Full vault sync, decrypted client-side (logins, cards, identities, secure notes, SSH keys, folders)
  • Sidebar navigation (all items, favorites, per-type filters, folders, trash)
  • Add / edit / move-to-trash / restore / permanently delete items, writing back to the server
  • Reveal/copy fields (with clipboard auto-clear), favorites, folder creation
  • A local, cryptographically-secure password generator, plus an Ed25519 SSH key generator
  • Saving multiple server/account combinations and switching between them
  • Idle lock timeout with a real lock/unlock flow (including a "Never" option that skips the master password across a full quit/relaunch too)
  • A local SSH agent exposing vault SSH-key items to ssh/git, with optional chaining to a hardware key's agent (e.g. a YubiKey via gpg-agent) — see docs/ssh-agent.md
  • PIN unlock (device-local, separate from the master password) as a faster alternative after an idle lock
  • A local password health check (weak/reused passwords), and unencrypted JSON vault export/import
  • File attachments on items (upload/download/delete)
  • Text Send — create a self-destructing, no-account-needed share link

Not yet:

  • Organizations, collections, and shared vaults
  • File Sends (text Send only, for now)
  • Archive
  • Offline local cache (currently syncs fresh on every login/mutation)
  • Biometric unlock / Keychain-backed quick unlock
  • Native Password AutoFill extension
  • iOS app

Requirements

  • macOS 13+
  • Xcode 15+ / Swift 5.9+
  • A Bitwarden-compatible server: a self-hosted Vaultwarden instance, or bitwarden.com

Building & running

swift build          # debug build
swift test           # run the test suite
swift run ChefwardenMac

For a signed, notarized, universal (arm64 + x86_64) release build:

export CODESIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export NOTARY_PROFILE="your-notarytool-keychain-profile"
./build.sh

See the comments at the top of build.sh for how to set up the signing identity and notary profile. Pass --skip-sign or --skip-notarize for faster local iteration.

Architecture

A Swift Package Manager workspace, split so the platform-agnostic core can eventually back an iOS app too:

Sources/
  VaultCore/       # crypto, networking, models, sync/write-path, password generator
    Crypto/        # KDF (PBKDF2), HKDF stretching, AES-256-CBC+HMAC ("EncString")
    Networking/     # REST client for the Bitwarden API
    Models/         # Cipher, Folder, decrypted item models
    Auth/           # login/2FA flow, session
    Sync/           # vault repository: sync, decrypt, create/update/delete
    Generator/      # password generator
  VaultUI/          # shared SwiftUI views (login, vault shell, item editor, generator)
Apps/
  ChefwardenMac/    # macOS app entry point
Tests/
  VaultCoreTests/   # crypto vectors, encrypt/decrypt round-trips, mocked-network tests

VaultCore has no UI dependencies; VaultUI's views take a VaultCore.AppState and work the same on any Apple platform, so an iOS target is mostly a matter of adding a thin app shell later.

A note on server JSON casing

The official Bitwarden API documentation implies PascalCase field names. In practice, real self-hosted Vaultwarden servers send camelCase for at least some responses. Chefwarden's decoders accept both (see AnyCodingKey/decodeFlexible in Networking/BitwardenJSON.swift) rather than assuming one casing — worth knowing if you're debugging a decode error against your own server.

Documentation

  • SSH Agent — exposing vault SSH-key items to ssh/git, chaining to a hardware key's agent, and using a vault key as a Git commit-signing backup.

Security

Chefwarden implements Bitwarden's client-side encryption scheme (PBKDF2/HKDF key derivation, AES-256-CBC + HMAC-SHA256 for vault data) independently from the official clients' source, using only the public wire format as a specification — see License for why. It has not been independently security-reviewed. Treat it as experimental: fine for testing against a disposable account or a self-hosted instance you control, but don't rely on it as your only password manager yet.

If you find a security issue, please open an issue (or, for anything sensitive, contact the maintainer directly rather than filing it publicly).

Contributing

Issues and PRs welcome. If you're picking up one of the "not yet" items above, check the open issues first so work doesn't overlap.

License

GNU Affero General Public License v3.0 — the same license Vaultwarden itself uses. Bitwarden's own official clients are AGPLv3 too; Chefwarden's code was written independently against the public API/wire-format, not by copying their source, but ships under the same copyleft license by choice, in the same spirit.