Convert Figma logo to code with AI

dani-garcia logovaultwarden

Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs

39,897
1,924
39,897
17

Top Related Projects

15,861

Bitwarden infrastructure/backend (API, database, Docker, etc).

12,381

Free cross-platform password manager compatible with KeePass

2,657

A modern, open source password manager for individuals and teams.

:key: Cross-Platform Passwords & Secrets Vault

Quick Overview

Vaultwarden is an unofficial Bitwarden server implementation written in Rust. It aims to be a lightweight, fast, and feature-rich alternative to the official Bitwarden server, suitable for self-hosting and designed to work with existing Bitwarden clients.

Pros

  • Lightweight and resource-efficient, making it ideal for self-hosting on low-powered devices
  • Compatible with all official Bitwarden clients (web vault, mobile apps, browser extensions)
  • Written in Rust, providing enhanced security and performance
  • Supports most Bitwarden features, including organizations and sharing

Cons

  • Unofficial implementation, which may lag behind official Bitwarden server updates
  • Limited support for some enterprise features
  • Potential compatibility issues with future Bitwarden client updates
  • Smaller community compared to the official Bitwarden project

Getting Started

To get started with Vaultwarden, follow these steps:

  1. Install Docker on your system
  2. Run the following command to start Vaultwarden:
docker run -d --name vaultwarden \
  -v /vw-data/:/data/ \
  -p 80:80 \
  vaultwarden/server:latest
  1. Access the Vaultwarden web interface at http://your-server-ip
  2. Create an admin account and start using Vaultwarden with your preferred Bitwarden clients

For more advanced configuration options and deployment methods, refer to the official Vaultwarden documentation on GitHub.

Competitor Comparisons

15,861

Bitwarden infrastructure/backend (API, database, Docker, etc).

Pros of Bitwarden Server

  • Official implementation with full feature support
  • Extensive documentation and community support
  • Regular updates and security audits

Cons of Bitwarden Server

  • Higher resource requirements
  • More complex setup and maintenance
  • Requires a license for some enterprise features

Code Comparison

Bitwarden Server (C#):

public class User : ITableObject<Guid>
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool EmailVerified { get; set; }
}

Vaultwarden (Rust):

#[derive(Debug, Identifiable, Queryable, Insertable)]
#[table_name = "users"]
pub struct User {
    pub uuid: String,
    pub created_at: NaiveDateTime,
    pub updated_at: NaiveDateTime,
    pub email: String,
    pub name: String,
}

The code snippets show differences in language and structure between the two projects. Bitwarden Server uses C# with a more concise class definition, while Vaultwarden employs Rust with additional attributes and fields.

Vaultwarden, being a third-party implementation, aims for API compatibility with Bitwarden while offering a lighter resource footprint and easier deployment. It's particularly suitable for self-hosting scenarios but may lack some advanced features found in the official Bitwarden Server.

12,381

Free cross-platform password manager compatible with KeePass

Pros of Keeweb

  • Cross-platform compatibility: Works on web, desktop, and mobile devices
  • Offline functionality: Can be used without an internet connection
  • User-friendly interface: Intuitive design for easy password management

Cons of Keeweb

  • Limited server-side features: Lacks advanced server management capabilities
  • No built-in synchronization: Requires third-party services for syncing across devices
  • Less extensive API support: Fewer integration options compared to Vaultwarden

Code Comparison

Keeweb (JavaScript):

const kdbxweb = require('kdbxweb');
const db = kdbxweb.Kdbx.create(credentials, 'My Database');
const group = db.createGroup(db.getDefaultGroup(), 'My Group');
const entry = db.createEntry(group);
entry.fields.Title = 'My Entry';

Vaultwarden (Rust):

use vaultwarden::db::DbConn;
use vaultwarden::api::EmptyResult;

pub fn create_cipher(conn: &DbConn, cipher: &NewCipher) -> EmptyResult {
    cipher.save(conn)
}

The code snippets demonstrate the basic operations for creating entries in each system. Keeweb uses JavaScript and focuses on client-side operations, while Vaultwarden utilizes Rust for server-side functionality.

2,657

A modern, open source password manager for individuals and teams.

Pros of Padloc

  • Built with modern web technologies (TypeScript, Web Components)
  • Offers a more user-friendly and visually appealing interface
  • Supports multiple vaults and organization features out of the box

Cons of Padloc

  • Less mature and battle-tested compared to Vaultwarden
  • Smaller community and fewer third-party integrations
  • May require more resources to run due to its tech stack

Code Comparison

Padloc (TypeScript):

export class Vault extends Serializable {
  @AsSerializable(Field)
  name: string = "";

  @AsSerializable(VaultItem)
  items: VaultItem[] = [];
}

Vaultwarden (Rust):

#[derive(Debug, Serialize, Deserialize)]
pub struct Cipher {
    pub uuid: String,
    pub folder_uuid: Option<String>,
    #[serde(rename = "type")]
    pub type_: i32,
    pub name: String,
    pub notes: Option<String>,
}

This comparison highlights the different programming languages and approaches used in each project. Padloc uses TypeScript with decorators for serialization, while Vaultwarden employs Rust with derive macros for struct definitions.

:key: Cross-Platform Passwords & Secrets Vault

Pros of Buttercup

  • Cross-platform desktop application with a user-friendly GUI
  • Supports multiple vault formats and cloud storage options
  • Offers a browser extension for easy password autofill

Cons of Buttercup

  • Less robust server-side implementation compared to Vaultwarden
  • May have fewer advanced features for enterprise use cases
  • Smaller community and potentially slower development pace

Code Comparison

Buttercup (TypeScript):

export function createVault(name: string, password: string): Vault {
    const vault = Vault.createWithDefaults();
    vault.setPassword(password);
    vault.setAttribute(Vault.Attribute.Name, name);
    return vault;
}

Vaultwarden (Rust):

pub fn create_cipher(
    &self,
    user_uuid: &str,
    data: CipherData,
    headers: &Headers,
    conn: &DbConn,
) -> ApiResult<Cipher> {
    let mut cipher = Cipher::new(data.Type);
    cipher.user_uuid = Some(user_uuid.to_string());
    cipher.save(conn)?;
    Ok(cipher)
}

The code snippets show different approaches to creating secure storage objects. Buttercup focuses on client-side vault creation, while Vaultwarden demonstrates server-side cipher creation with database integration.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Vaultwarden Logo

An alternative server implementation of the Bitwarden Client API, written in Rust and compatible with official Bitwarden clients [disclaimer], perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.


GitHub Release ghcr.io Pulls Docker Pulls Quay.io
Contributors Forks Stars Issues Open Issues Closed AGPL-3.0 Licensed
Dependency Status GHA Release GHA Build
Matrix Chat GitHub Discussions Discourse Discussions

[!IMPORTANT] When using this server, please report any bugs or suggestions directly to us (see Get in touch), regardless of whatever clients you are using (mobile, desktop, browser...). DO NOT use the official Bitwarden support channels.


Features

A nearly complete implementation of the Bitwarden Client API is provided, including:


Usage

[!IMPORTANT] Most modern web browsers disallow the use of Web Crypto APIs in insecure contexts. In this case, you might get an error like Cannot read property 'importKey'. To solve this problem, you need to access the web vault via HTTPS or localhost.

This can be configured in Vaultwarden directly or using a third-party reverse proxy (some examples).

If you have an available domain name, you can get HTTPS certificates with Let's Encrypt, or you can generate self-signed certificates with utilities like mkcert. Some proxies automatically do this step, like Caddy or Traefik (see examples linked above).

[!TIP] For more detailed examples on how to install, use and configure Vaultwarden you can check our Wiki.

The main way to use Vaultwarden is via our container images which are published to ghcr.io, docker.io and quay.io.

There are also community driven packages which can be used, but those might be lagging behind the latest version or might deviate in the way Vaultwarden is configured, as described in our Wiki.

Docker/Podman CLI

Pull the container image and mount a volume from the host for persistent storage.
You can replace docker with podman if you prefer to use podman.

docker pull vaultwarden/server:latest
docker run --detach --name vaultwarden \
  --env DOMAIN="https://vw.domain.tld" \
  --volume /vw-data/:/data/ \
  --restart unless-stopped \
  --publish 80:80 \
  vaultwarden/server:latest

This will preserve any persistent data under /vw-data/, you can adapt the path to whatever suits you.

Docker Compose

To use Docker compose you need to create a compose.yaml which will hold the configuration to run the Vaultwarden container.

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vw.domain.tld"
    volumes:
      - ./vw-data/:/data/
    ports:
      - 80:80

Get in touch

Have a question, suggestion or need help? Join our community on Matrix, GitHub Discussions or Discourse Forums.

Encountered a bug or crash? Please search our issue tracker and discussions to see if it's already been reported. If not, please start a new discussion or create a new issue. Ensure you're using the latest version of Vaultwarden and there aren't any similar issues open or closed!


Contributors

Thanks for your contribution to the project!

Contributors Count
Contributors Avatars


Disclaimer

This project is not associated with Bitwarden or Bitwarden, Inc.

However, one of the active maintainers for Vaultwarden is employed by Bitwarden and is allowed to contribute to the project on their own time. These contributions are independent of Bitwarden and are reviewed by other maintainers.

The maintainers work together to set the direction for the project, focusing on serving the self-hosting community, including individuals, families, and small organizations, while ensuring the project's sustainability.

Please note: We cannot be held liable for any data loss that may occur while using Vaultwarden. This includes passwords, attachments, and other information handled by the application. We highly recommend performing regular backups of your files and database. However, should you experience data loss, we encourage you to contact us immediately.


Bitwarden_RS

This project was known as Bitwarden_RS and has been renamed to separate itself from the official Bitwarden server in the hopes of avoiding confusion and trademark/branding issues.
Please see #1642 - v1.21.0 release and project rename to Vaultwarden for more explanation.