| Crates.io | vaultmux |
| lib.rs | vaultmux |
| version | 0.1.0 |
| created_at | 2026-01-09 15:02:16.308409+00 |
| updated_at | 2026-01-09 15:02:16.308409+00 |
| description | Unified async interface for password managers and cloud secret vaults - write once, support pass, Bitwarden, AWS, GCP, Azure |
| homepage | https://github.com/blackwell-systems/vaultmux-rs |
| repository | https://github.com/blackwell-systems/vaultmux-rs |
| max_upload_size | |
| id | 2032217 |
| size | 389,789 |
Write once, run anywhere - unified secret management for Rust
One async interface for 8 secret backends. Switch from pass to AWS Secrets Manager without changing your code.
let config = Config::new(BackendType::Pass).with_prefix("myapp");
let mut backend = factory::new_backend(config)?;
Change one line, support any vault.
Your application needs secrets. But which vault?
Without vaultmux, you write 8 different integrations. With vaultmux, you write one.
Rust port of the Go vaultmux library.
Backend trait works with any vault| Backend | Feature Flag | CLI Required | Platform | Status |
|---|---|---|---|---|
| Mock | mock (default) |
None | All | Implemented |
| pass | pass |
pass, gpg |
Unix | Implemented |
| Bitwarden | bitwarden |
bw |
All | Implemented |
| 1Password | onepassword |
op |
All | Implemented |
| AWS Secrets Manager | aws |
None (SDK) | All | Implemented |
| GCP Secret Manager | gcp |
None (SDK) | All | Implemented |
| Azure Key Vault | azure |
None (SDK) | All | Implemented |
| Windows Credential Manager | wincred |
PowerShell | Windows | Implemented |
[dependencies]
vaultmux = { version = "0.1", features = ["bitwarden", "aws"] }
Available features: mock, pass, bitwarden, onepassword, aws, gcp, azure, wincred, or full for all backends.
use vaultmux::{factory, Backend, Config, BackendType};
#[tokio::main]
async fn main() -> vaultmux::Result<()> {
// Create backend
let config = Config::new(BackendType::Pass)
.with_prefix("myapp");
let mut backend = factory::new_backend(config)?;
backend.init().await?;
// Authenticate
let session = backend.authenticate().await?;
// Store a secret
backend.create_item("api-key", "secret-value", &*session).await?;
// Retrieve it
let secret = backend.get_notes("api-key", &*session).await?;
println!("Secret: {}", secret);
Ok(())
}
Use the mock backend to test without real vaults:
use vaultmux::backends::mock::MockBackend;
#[tokio::test]
async fn test_my_code() {
let mut backend = MockBackend::new();
backend.set_item("test-key", "test-value").await;
// Test your code...
}
Run tests: cargo test --all-features
See User Guide for integration testing with LocalStack.
Or generate docs locally:
cargo doc --open
| Feature | Go | Rust |
|---|---|---|
| Type Safety | Runtime | Compile-time |
| Memory Safety | GC | Ownership system |
| Concurrency | Goroutines | async/await + tokio |
| Error Handling | (T, error) |
Result<T, E> |
| Dependencies | Modules | Crates + features |
Contributions welcome! Current priorities:
Licensed under either of:
at your option.
Rust port by Dayna Blackwell (Blackwell Systems™).
Original Go implementation: https://github.com/blackwell-systems/vaultmux