- Swift 98.3%
- Shell 1.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| Apps/ChefwardenMac | ||
| docs | ||
| Scripts | ||
| Sources | ||
| Tests/VaultCoreTests | ||
| .gitignore | ||
| build.sh | ||
| LICENSE | ||
| Package.swift | ||
| README.md | ||
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 viagpg-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.