Top Related Projects
Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs
Free cross-platform password manager compatible with KeePass
A modern, open source password manager for individuals and teams.
Passbolt Community Edition (CE) API. The JSON API for the open source password manager for teams!
Quick Overview
Bitwarden Server is the core infrastructure component of the Bitwarden password management system. It provides the backend services and APIs necessary for storing, syncing, and managing encrypted password vaults across multiple devices and platforms. This open-source project allows organizations and individuals to self-host their own Bitwarden instance for enhanced control and security.
Pros
- Self-hostable, providing complete control over data and infrastructure
- Open-source, allowing for community contributions and security audits
- Supports multiple deployment options, including Docker and traditional installations
- Integrates with various authentication providers and enterprise systems
Cons
- Requires technical expertise to set up and maintain
- Self-hosting may introduce additional security responsibilities
- Updates and maintenance can be time-consuming compared to the cloud-hosted version
- May lack some features available in the official Bitwarden cloud offering
Getting Started
To get started with self-hosting Bitwarden Server:
- Install Docker and Docker Compose on your server
- Clone the Bitwarden Server repository:
git clone https://github.com/bitwarden/server.git
- Navigate to the project directory:
cd server
- Copy the example environment file:
cp .env.example .env
- Edit the
.env
file to configure your installation - Start the Bitwarden services:
docker-compose up -d
- Access the Bitwarden web vault at
https://your-domain.com
For detailed instructions and additional configuration options, refer to the official Bitwarden documentation.
Competitor Comparisons
Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs
Pros of Vaultwarden
- Lightweight and resource-efficient, suitable for self-hosting on low-powered devices
- Written in Rust, offering improved performance and memory safety
- Simpler setup and maintenance process
Cons of Vaultwarden
- Lacks some advanced features present in the official Bitwarden server
- May have a slight delay in implementing new features compared to the official server
- Not officially supported by Bitwarden, Inc.
Code Comparison
Vaultwarden (Rust):
#[get("/sync")]
fn sync(headers: Headers, conn: DbConn, nt: Notify) -> JsonResult {
let user = headers.user;
let data = SyncData::build_json(&user, &conn, &nt, false)?;
Ok(Json(data))
}
Bitwarden Server (C#):
[HttpGet("sync")]
public async Task<SyncResponseModel> Sync()
{
var userId = _userService.GetProperUserId(User).Value;
var response = await _syncService.BuildSyncResponseAsync(userId);
return response;
}
The code snippets show similar sync endpoints, but Vaultwarden uses Rust's concise syntax and type system, while Bitwarden Server employs C# with async/await patterns.
Free cross-platform password manager compatible with KeePass
Pros of KeeWeb
- Lightweight and portable, runs entirely in the browser without server requirements
- Supports multiple password file formats (KeePass, 1Password, LastPass)
- Open-source and free to use, with no paid tiers or subscriptions
Cons of KeeWeb
- Lacks advanced features like secure sharing and team management
- No built-in sync functionality; relies on third-party services for syncing
- Less frequent updates and smaller community compared to Bitwarden
Code Comparison
KeeWeb (JavaScript):
const kdbxweb = require('kdbxweb');
const db = kdbxweb.Kdbx.create(credentials, 'My Database');
const entry = db.createEntry(db.getDefaultGroup());
entry.fields.Title = 'My Entry';
Bitwarden Server (C#):
var cipher = new Cipher
{
Type = CipherType.Login,
OrganizationId = organizationId,
Name = "My Login",
Login = new Login { Username = "myusername", Password = "mypassword" }
};
await _cipherRepository.CreateAsync(cipher);
Both repositories offer password management solutions, but with different approaches. KeeWeb focuses on client-side operations and file-based storage, while Bitwarden Server provides a full-featured backend for cloud-based password management with additional security features and team collaboration capabilities.
A modern, open source password manager for individuals and teams.
Pros of Padloc
- Fully open-source, including server and client components
- Lightweight and easy to self-host
- Modern, clean codebase using TypeScript
Cons of Padloc
- Smaller community and less mature ecosystem
- Fewer features and integrations compared to Bitwarden
- Limited enterprise-level functionality
Code Comparison
Padloc (TypeScript):
export class Vault extends Serializable {
@AsSerializable(Collection, { itemType: VaultItem })
items: Collection<VaultItem> = new Collection();
@AsSerializable(String)
name: string = "";
}
Bitwarden (C#):
public class Cipher : ITableObject<Guid>
{
public Guid Id { get; set; }
public Guid? UserId { get; set; }
public Guid? OrganizationId { get; set; }
public CipherType Type { get; set; }
public string Data { get; set; }
}
Both projects use strongly-typed languages and object-oriented principles. Padloc's codebase appears more modern with TypeScript decorators, while Bitwarden's C# code follows traditional .NET conventions.
Padloc's structure seems more focused on simplicity and ease of use, while Bitwarden's code suggests a more feature-rich and complex system, potentially offering greater flexibility for enterprise use cases.
Passbolt Community Edition (CE) API. The JSON API for the open source password manager for teams!
Pros of Passbolt
- Open-source and self-hosted, providing full control over data and infrastructure
- Built with PHP and CakePHP framework, which may be more familiar to some developers
- Focuses on team collaboration and sharing features
Cons of Passbolt
- Smaller community and ecosystem compared to Bitwarden
- Limited mobile app support and fewer client applications
- Steeper learning curve for setup and configuration
Code Comparison
Passbolt (PHP):
public function getPasswords()
{
$userId = $this->Auth->user('id');
$passwords = $this->Resource->findAllByUserId($userId);
return $passwords;
}
Bitwarden (C#):
public async Task<IEnumerable<Cipher>> GetAllAsync(Guid userId)
{
var ciphers = await _repository.GetManyByUserIdAsync(userId);
return ciphers.Select(c => new Cipher(c));
}
Both repositories implement password management functionality, but Passbolt uses PHP with CakePHP, while Bitwarden uses C# with ASP.NET Core. Passbolt's code structure follows CakePHP conventions, whereas Bitwarden utilizes more modern C# features like async/await and LINQ. The Bitwarden codebase tends to be more extensive and modular, reflecting its broader feature set and larger ecosystem.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
The Bitwarden Server project contains the APIs, database, and other core infrastructure items needed for the "backend" of all bitwarden client applications.
The server project is written in C# using .NET Core with ASP.NET Core. The database is written in T-SQL/SQL Server. The codebase can be developed, built, run, and deployed cross-platform on Windows, macOS, and Linux distributions.
Developer Documentation
Please refer to the Server Setup Guide in the Contributing Documentation for build instructions, recommended tooling, code style tips, and lots of other great information to get you started.
Deploy
You can deploy Bitwarden using Docker containers on Windows, macOS, and Linux distributions. Use the provided PowerShell and Bash scripts to get started quickly. Find all of the Bitwarden images on Docker Hub.
Full documentation for deploying Bitwarden with Docker can be found in our help center at: https://help.bitwarden.com/article/install-on-premise/
Requirements
- Docker
- Docker Compose (already included with some Docker installations)
These dependencies are free to use.
Linux & macOS
curl -s -L -o bitwarden.sh \
"https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" \
&& chmod +x bitwarden.sh
./bitwarden.sh install
./bitwarden.sh start
Windows
Invoke-RestMethod -OutFile bitwarden.ps1 `
-Uri "https://func.bitwarden.com/api/dl/?app=self-host&platform=windows"
.\bitwarden.ps1 -install
.\bitwarden.ps1 -start
We're Hiring!
Interested in contributing in a big way? Consider joining our team! We're hiring for many positions. Please take a look at our Careers page to see what opportunities are currently open as well as what it's like to work at Bitwarden.
Contribute
Code contributions are welcome! Please commit any pull requests against the main
branch. Learn more about how to contribute by reading the Contributing Guidelines. Check out the Contributing Documentation for how to get started with your first contribution.
Security audits and feedback are welcome. Please open an issue or email us privately if the report is sensitive in nature. You can read our security policy in the SECURITY.md
file. We also run a program on HackerOne.
No grant of any rights in the trademarks, service marks, or logos of Bitwarden is made (except as may be necessary to comply with the notice requirements as applicable), and use of any Bitwarden trademarks must comply with Bitwarden Trademark Guidelines.
Dotnet-format
Consider installing our git pre-commit hook for automatic formatting.
git config --local core.hooksPath .git-hooks
Top Related Projects
Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs
Free cross-platform password manager compatible with KeePass
A modern, open source password manager for individuals and teams.
Passbolt Community Edition (CE) API. The JSON API for the open source password manager for teams!
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot