A secure, offline-first password manager built with Flutter.
Features β’ Screenshots β’ Installation β’ Architecture β’ Tech Stack
- AES-256 Encryption - All passwords are encrypted locally using industry-standard encryption via Hive CE
- Biometric Authentication - Secure access with Face ID, Touch ID, or fingerprint
- Offline-Only Storage - Your data never leaves your device. No cloud, no sync, no risk
- Material Design 3 - Beautiful, adaptive UI following the latest design guidelines
- Multiple Themes - Light, Dark, and AMOLED (Pure Black) modes
- Smooth Animations - Delightful micro-interactions and transitions
- Smart Password Generator - Create strong passwords with customizable settings:
- Adjustable length (12-64 characters)
- Uppercase, lowercase, numbers, special characters
- Exclude ambiguous characters (I, l, 1, O, 0)
- Password Strength Indicator - Real-time strength estimation
- Import/Export - Backup and restore data in JSON or CSV format
- Quick Copy - One-tap copy to clipboard
- Search & Filter - Quickly find your credentials
| Light Mode | Dark Mode | AMOLED Mode |
|---|---|---|
![]() |
![]() |
![]() |
- Flutter SDK
^3.38.5 - Dart SDK
^3.10.4 - Android Studio / Xcode
- VS Code (Recommended)
# Clone the repository
git clone https://github.com/dhruvanbhalara/passvault.git
cd passvault
# Install dependencies
flutter pub get
# Generate files (localization, DI, adapters)
make generate
# Run the app
make run_dev # Development flavor
make run_prod # Production flavorPassVault supports two flavors:
| Flavor | Description | Command |
|---|---|---|
| dev | Development build with debug tools | flutter run --flavor dev |
| prod | Production build, optimized | flutter run --release --flavor prod |
PassVault follows Clean Architecture principles with a feature-first structure:
lib/
βββ app.dart # App entry & DI setup
βββ main.dart # Main entry point
βββ core/
β βββ constants/ # App-wide constants
β βββ di/ # Dependency Injection (GetIt + Injectable)
β βββ router/ # GoRouter navigation
β βββ services/ # Core services (Database, Biometrics)
β βββ theme/ # App theming & design system
βββ features/
β βββ auth/ # Authentication & biometrics
β β βββ presentation/ # AuthBloc, AuthScreen
β βββ home/ # Dashboard & password list [NEW]
β β βββ presentation/ # PasswordBloc, HomeScreen
β βββ onboarding/ # First-run intro flow
β β βββ presentation/ # OnboardingBloc, IntroScreen
β βββ password_manager/ # Core password CRUD
β β βββ data/ # Repositories, data sources
β β βββ domain/ # Entities, use cases
β β βββ presentation/ # AddEditScreen, AddEditPasswordBloc
β βββ settings/ # App preferences & export/import
β βββ presentation/ # SettingsScreen, ThemeCubit
βββ l10n/ # Localization files
Presentation β Domain β Data
β β β
BLoC UseCases Repositories
| Package | Purpose |
|---|---|
| Flutter | Cross-platform UI framework |
| Dart | Programming language |
| Package | Purpose |
|---|---|
flutter_bloc |
State management (BLoC pattern) |
get_it |
Dependency injection container |
injectable |
Code generation for DI |
go_router |
Declarative navigation |
equatable |
Value equality for state objects |
| Package | Purpose |
|---|---|
hive_ce |
Local NoSQL database with encryption |
hive_ce_flutter |
Flutter bindings for Hive |
flutter_secure_storage |
Secure key storage |
local_auth |
Biometric authentication |
| Package | Purpose |
|---|---|
google_fonts |
Custom typography |
lucide_icons_flutter |
Modern icon set |
lottie |
Vector animations |
animate_do |
Micro-animations |
| Package | Purpose |
|---|---|
password_engine |
Password generation & strength estimation |
uuid |
Unique ID generation |
| Package | Purpose |
|---|---|
share_plus |
Native share functionality |
file_picker |
File selection for import |
csv |
CSV parsing for import/export |
path_provider |
Access to app directories |
# Code Generation
make generate # Generate l10n, DI, and Hive adapters
# Running
make run_dev # Run development flavor
make run_prod # Run production flavor
# Testing
make test # Run all tests
make test_coverage # Run tests with coverage
# Launcher Icons
make icons # Generate icons for both flavors
make icons_dev # Generate launcher icons (dev)
make icons_prod # Generate launcher icons (prod)
# Git Hooks
make setup_hooks # Configure git hooks (run once after clone)
# Quality
make lint # Run Flutter analyze
make format # Format Dart code
make clean # Clean build artifactsPassVault uses Git hooks to maintain code quality. The hooks are stored in .github/hooks/ and must be enabled after cloning.
Setup (one-time):
make setup_hooks
# or manually: git config core.hooksPath .github/hooks| Hook | Trigger | Checks |
|---|---|---|
| pre-commit | Before each commit | dart format (auto-formatting) + dart analyze (static analysis) |
| pre-push | Before each push | flutter test (all tests must pass) |
Note: If a hook fails, the git operation is aborted. Fix the issues and retry.
The app uses flavor-based configuration:
| File | Purpose |
|---|---|
flutter_launcher_icons-dev.yaml |
Dev app icon configuration |
flutter_launcher_icons-prod.yaml |
Prod app icon configuration |
| Measure | Status |
|---|---|
| Zero Network Access | β Implemented |
| Biometric Gating | β Implemented |
| Secure Key Storage | β Implemented |
| Encrypted Storage | π Planned |
PassVault supports internationalization via Flutter's intl package.
- Current Languages: English (en)
- Adding Languages: Add a new
.arbfile inlib/l10n/
79 tests covering unit, BLoC, and widget layers.
# Run all tests
flutter test
# Run with coverage
flutter test --coveragetest/features/
βββ auth/presentation/{bloc,screens}/
βββ onboarding/presentation/{bloc,screens}/
βββ password_manager/{domain,presentation}/
βββ settings/presentation/screens/
| Category | Tests |
|---|---|
| Unit (UseCases, Entities) | 30 |
| BLoC | 13 |
| Widget/Screen | 36 |
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please read our contributing guidelines before submitting a PR.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Dhruvan Bhalara
- GitHub: @dhruvanbhalara
Made with β€οΈ and Flutter


