Skip to content

Repository files navigation

BrewVault

A desktop TOTP authenticator app built with Dioxus and Rust.

Prerequisites

Dev workflow

Build the app in dev

tailwindcss -i assets/tailwind.css -o assets/main.css --watch & dx serve --desktop

Release build

dx bundle --desktop

The bundled app will be placed under target/dx/brew-vault/bundle/<platform>.

Releases

Tagged releases are built automatically via GitHub Actions for macOS, Linux, and Windows.

To publish a new release:

  1. Update the version in Cargo.toml
  2. Add a ## [x.y.z] section with content to CHANGELOG.md
  3. Tag and push:
git tag vx.y.z
git push --tags

The workflow validates that the tag matches Cargo.toml, builds installers on all three platforms, and publishes a GitHub Release with the CHANGELOG notes attached. Pre-release tags (e.g. v1.0.0-beta.1) are automatically marked as pre-releases.

Project structure

brew-vault/
├── assets/
│   ├── tailwind.css      # Tailwind source (edit this)
│   ├── colors.css        # Design token CSS variables
│   └── main.css          # Generated output (do not edit)
├── src/
│   ├── main.rs           # App entry point
│   ├── components/       # Dioxus UI components
│   │   ├── account_row.rs
│   │   ├── app_shell.rs
│   │   ├── auto_lock_picker.rs
│   │   ├── bottom_nav.rs
│   │   ├── button.rs
│   │   ├── change_password_modal.rs
│   │   ├── context_menu.rs
│   │   ├── delete_confirm_modal.rs
│   │   ├── export_modal.rs
│   │   ├── icons.rs
│   │   ├── import_modal.rs
│   │   ├── input.rs
│   │   ├── radio.rs
│   │   ├── rename_modal.rs
│   │   ├── ring.rs
│   │   ├── section_label.rs
│   │   ├── strength_bar.rs
│   │   ├── text_divider.rs
│   │   └── toast.rs
│   ├── views/            # Route-level page components
│   ├── models/           # Data models and app state
│   ├── routes.rs
│   ├── storage.rs
│   ├── backup.rs
│   ├── file_picker.rs
│   └── totp.rs
├── tests/
│   └── storage_roundtrip.rs  # Integration tests
├── Cargo.toml
└── Dioxus.toml

Tests

Run the full test suite (unit + integration):

cargo test

Run only unit tests:

cargo test --lib

Run only integration tests:

cargo test --test storage_roundtrip

Run a specific test by name:

cargo test test_wrong_key_fails

Filter by module:

cargo test storage
cargo test totp

Tests cover:

  • storage (unit) — schema init, insert/load round-trip, sort_order ordering, delete, rename, group update, sort_order swap, migration idempotency, wrong-key rejection, first-run state (no-password vault), password setup + unlock, rekey, Argon2 hash/verify round-trip, and meta-table operations
  • totp (unit) — code generation (SHA-1, SHA-256), output format, invalid secrets, and seconds_remaining range
  • backup (unit) — export/import round-trip, wrong passphrase rejection, corrupt ciphertext detection, empty vault export, Aegis envelope structure, 50 MB file size guard
  • storage_roundtrip (integration) — persists 3 entries to a real encrypted file, reopens with the same key, and asserts all fields (including sort_order) survive the round-trip

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages