Bitwarden-compatible server running on Cloudflare Workers
Telegram Channel | Telegram Group
中文 | Contributing | Official wiki
Disclaimer
This project is for learning and discussion purposes only. Please back up your vault regularly.
This project is not affiliated with Bitwarden. Please do not report NodeWarden issues to the official Bitwarden team.
| Feature | Bitwarden Free | NodeWarden | Notes |
|---|---|---|---|
| Web vault | ✅ | ✅ | Original Web Vault UI |
| TOTP | ❌ | ✅ | Includes steam:// support |
| PWA / offline | ❌ | ✅ | Installable, offline |
| Passkey login | ✅ | ✅ | passwordless auth |
| API keys | ✅ | ✅ | CLI keys; create and rotate |
| Login 2FA | ✅ | ✅ | TOTP, YubiKey, Passkey |
| 2FA recovery codes | ✅ | ✅ | One-time 2FA disable codes |
| Real-time push sync | ✅ | ✅ | All device sync |
| Attachments / Send | ✅ | ✅ | Cloudflare R2 or KV |
| Import / export | ✅ | ✅ | Bitwarden JSON / CSV / ZIP |
| Cloud backup center | ❌ | ✅ | Scheduled WebDAV / S3 incrementals |
| Device management | ✅ | ✅ | Remove devices; trust controls |
| Login requests | ✅ | ✅ | Cross-device login approval/unlock |
| Multi-user | ✅ | ✅ | Invite-code registration |
| Domain rules | ✅ | ✅ | Equivalent domains, global exclusions |
| Fill-assist | ✅ | ✅ | POST /fill-assist |
| Organizations / collections / roles | ✅ | ❌ | Not implemented |
| SSO / SCIM / directory | ✅ | ❌ | Not implemented |
- ✅ Windows desktop
- ✅ Mobile app
- ✅ Browser extension
- ✅ Linux desktop
- ⚠️ macOS desktop not fully verified yet
- Fork the NodeWarden repository to your GitHub account
- Open Cloudflare Workers & Pages
- Choose Continue with GitHub and select your fork
- Set build command to
npm run buildand deploy command tonpm run deploy- For KV mode, change the deploy command to
npm run deploy:kv
- For KV mode, change the deploy command to
- After deployment finishes, open the generated Workers URL
-
The default Workers hostname may be unreachable on some networks. To use a custom domain, add it in Workers settings.
-
If the site reports a missing
JWT_SECRET, add it as a Secret in Workers settings. In production use a random string of at least 32 characters; do not use temporary or example values.