Vernet is a cross-platform network analyzer and monitoring tool built with Flutter. It provides comprehensive network diagnostics including device discovery, port scanning, DNS lookup, internet speed testing, and Wi-Fi information.
- Wi-Fi details (BSSID, MAC Address)
- Network device/host scanning
- Open port scanning for target IPs
- ISP details
- Internet speed test (speedtest.net)
- Ping and DNS tools
- Android (primary - published on F-Droid & Google Play)
- iOS (emulator only)
- macOS
- Linux
- Windows
- Web
- Framework: Flutter (Dart SDK >=3.2.0 <4.0.0)
- State Management: Provider, flutter_bloc (BLoC pattern)
- Dependency Injection: get_it + injectable
- Database: Drift (SQLite)
- Key Packages: dart_ping, network_tools_flutter, speed_test_dart, flutter_map
vernet/
├── lib/ # Main Flutter/Dart codebase
│ ├── main.dart # App entry point
│ ├── injection.dart # DI configuration
│ ├── api/ # API integrations
│ ├── database/ # Drift database schemas
│ │ └── drift/ # Generated database code
│ ├── helper/ # App helpers (settings, consent)
│ ├── models/ # Data models
│ │ ├── drift/ # Database models
│ │ ├── device_in_the_network.dart
│ │ ├── port.dart
│ │ └── wifi_info.dart
│ ├── pages/ # UI screens (feature-based)
│ │ ├── dns/ # DNS lookup page
│ │ ├── host_scan_page/ # Network scanner
│ │ ├── isp_page/ # ISP info
│ │ ├── network_troubleshoot/
│ │ ├── ping_page/ # Ping tool
│ │ ├── port_scan_page/ # Port scanner
│ │ ├── home_page.dart
│ │ ├── settings_page.dart
│ │ └── location_consent_page.dart
│ ├── providers/ # State management
│ │ ├── dark_theme_provider.dart
│ │ └── internet_provider.dart
│ ├── repository/ # Data repositories
│ │ └── notification_service.dart
│ ├── services/ # Business logic / networking
│ │ ├── impls/ # Service implementations
│ │ └── scanner_service.dart # Network scanner abstraction
│ ├── ui/ # UI components
│ ├── utils/ # Helper utilities
│ │ ├── custom_axis_renderer.dart
│ │ └── device_util.dart
│ └── values/ # Constants, keys, globals
├── test/ # Unit & widget tests
├── integration_test/ # Integration tests
├── coverage/ # Coverage reports
├── assets/ # App assets (images, configs)
├── android/ # Android platform code
├── ios/ # iOS platform code
├── macos/ # macOS platform code
├── linux/ # Linux platform code
├── windows/ # Windows platform code
├── web/ # Web platform code
├── installers/ # Distribution packages
├── fastlane/ # CI/CD configuration
├── scripts/ # Automation scripts
└── donation/ # Donation-related assets
Vernet follows a layered architecture:
UI Layer (pages/, widgets/)
↓
Feature Layer (providers/)
↓
Service Layer (services/)
↓
Network/System Utilities (packages)
- Separation of Concerns: UI components must NOT perform network operations directly
- Service Abstraction: All networking logic lives in
services/ - Feature-based Organization: Each network tool is a self-contained feature module
- Reusable Components: Common UI elements in
widgets/andui/ - Immutable Data Models: Data structures in
models/are immutable where possible
User taps Scan → HostScanPage → NetworkScannerService → Ping/ARP → List<Device>
- Flutter SDK (compatible with Dart >=3.2.0 <4.0.0)
- Platform-specific tools (Android Studio, Xcode, etc.)
# Install dependencies
flutter pub get
# Run code generation (for injectable, freezed, drift)
dart run build_runner build --delete-conflicting-outputs# Run on connected device/emulator
flutter run
# Run on specific platform
flutter run -d chrome # Web
flutter run -d macos # macOS
flutter run -d windows # Windows
flutter run -d linux # Linux
flutter run -d <device> # Android/iOSflutter build apk # Android
flutter build ios # iOS
flutter build macos # macOS
flutter build linux # Linux
flutter build windows # Windows
flutter build web # WebInstall net-tools package for arp command before running on Linux.
# Unit & widget tests
flutter test
# Integration tests (desktop)
flutter test integration_test/app_test.dart -d macos# Run the coverage script
bash generate_coverage.shThis script:
- Runs unit tests with coverage
- Runs integration tests with coverage
- Combines both coverage reports
- Excludes generated files (*.g.dart, drift files)
- Generates HTML report at
coverage/html/index.html
test/- Unit and widget tests organized by featureintegration_test/- End-to-end integration testscoverage/- Coverage reports (unit.lcov.info, integration.lcov.info, lcov.info)
- Linting: Uses
lintpackage (package:lint/analysis_options.yaml) - Formatting: Standard Dart/Flutter formatting
- Generated files excluded from analysis:
*.g.dart,*.freezed.dart,*.config.dart
- UI Logic: Keep in
pages/orwidgets/ - Network Logic: Always in
services/ - Data Models: In
models/, immutable where possible - Utilities: In
utils/ - State Management: Use Provider or BLoC, keep state local to features
- Uses
get_itwithinjectablefor code generation - Configuration in
lib/injection.dart - Environments:
prod,dev,test,demo
ARCHITECTURE.md- Detailed system architectureAGENTS.md- AI agent guidelinespubspec.yaml- Dependencies and Flutter configanalysis_options.yaml- Linting rulesflutter_native_splash.yaml- Splash screen config
When implementing a new network tool:
- Create Service -
lib/services/new_feature_service.dart - Create Models -
lib/models/new_feature_result.dart - Create UI Page -
lib/pages/new_feature_page/ - Connect UI to Service - Use Provider/BLoC for state
- Add Tests -
test/services/andtest/pages/
lib/
├── pages/ping_page/
├── services/ping_service.dart
└── models/ping_result.dart
- Primary platform (F-Droid + Google Play)
- Permissions handled via
permission_handler - Fastlane configuration in
fastlane/
- Not notarized yet
- Manual installation: Copy to Applications, use "Open" with Cmd+click
- Requires
net-toolspackage forarpcommand
- May require "Run anyway" on first launch
- Automatic permission requests
flutter_bloc- BLoC state managementprovider- Simple state managementget_it+injectable- Dependency injectiondrift+drift_flutter- Local database
dart_ping- Ping functionalitynetwork_tools_flutter- Network utilitiesspeed_test_dart- Speed testing (git dependency)http- HTTP requests
flutter_map+flutter_map_marker_cluster_plus- Mapssyncfusion_flutter_gauges- Gauges for speed testauto_size_text- Responsive textpercent_indicator- Progress indicators
flutter_local_notifications- Notificationsshared_preferences- Local storagepackage_info_plus- App version infourl_launcher- Open URLs
- Coverage reports generated in
coverage/ - HTML report:
coverage/html/index.html - LCOV format:
coverage/lcov.info - Generated files excluded from coverage metrics
- Email: fs0c19ty@protonmail.com
- GitHub: https://github.com/git-elliot/vernet
- F-Droid: https://f-droid.org/packages/org.fsociety.vernet
- Donations: Liberapay, Ko-Fi
| Task | Command |
|---|---|
| Install deps | flutter pub get |
| Run codegen | dart run build_runner build --delete-conflicting-outputs |
| Run app | flutter run |
| Run tests | flutter test |
| Generate coverage | bash generate_coverage.sh |
| Build APK | flutter build apk |
| Clean build | flutter clean |
Last updated: March 2026