https://github.com/submersion-app/submersion
Submersion Dive Log
https://github.com/submersion-app/submersion
dart dive-computer dive-log diving flutter scuba scuba-diving scuba-logbook
Last synced: 27 days ago
JSON representation
Submersion Dive Log
- Host: GitHub
- URL: https://github.com/submersion-app/submersion
- Owner: submersion-app
- License: other
- Created: 2026-01-01T01:29:53.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2026-06-22T05:09:51.000Z (about 1 month ago)
- Last Synced: 2026-06-22T06:10:47.686Z (about 1 month ago)
- Topics: dart, dive-computer, dive-log, diving, flutter, scuba, scuba-diving, scuba-logbook
- Language: Dart
- Homepage: https://submersion.app
- Size: 74.5 MB
- Stars: 35
- Watchers: 3
- Forks: 15
- Open Issues: 81
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: docs/contributing/README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README

# Submersion
*Own your dive log. Free and open-source, forever.*
**Download**
[](https://github.com/submersion-app/submersion/releases)
[](https://github.com/submersion-app/submersion/releases)
[](https://github.com/submersion-app/submersion/releases)
[](https://github.com/submersion-app/submersion/releases)
[](https://apps.apple.com/us/app/submersion-dive-log/id6757456915)
License & build status
[](LICENSE)
[](https://github.com/submersion-app/submersion/actions/workflows/ci.yaml)

Submersion gives scuba divers full ownership of their logbooks — no proprietary formats, no cloud lock-in, no subscription fees. Track analytics, stats, records, and trends across your dives, all stored locally and exportable to open standards. Free and open-source, forever.
## See it in action

Comprehensive Dive Logging
Every dive, fully detailed and in your control.
- Depth, duration, temperatures, conditions
- Multi-tank gas mixes: air, nitrox, trimix
- Buddies, trips, tags, and ratings
- Sortable table or card views
Profile & Decompression Analysis
Serious technical-diving instrumentation.
- Interactive depth / temperature / pressure profile
- 16-compartment tissue loading visualization
- Bühlmann ZH-L16C with gradient factors
- CNS%, OTU, and ppO₂ tracking


300+ Dive Computers
Download dives directly from your computer.
- USB and Bluetooth LE connectivity
- Shearwater, Suunto, Mares, Aqualung, and more
- Incremental downloads with duplicate detection
- Powered by libdivecomputer
Sites, GPS & Conditions
Location and environment for every dive.
- GPS entry/exit with interactive maps
- Tide and weather integration
- Reverse-geocoded country and region


Statistics & Records
See your diving life at a glance.
- Totals, averages, and personal records
- Breakdowns by year, country, and site
- SAC trends and depth distribution
## Why Submersion?
Most dive logging software falls into two categories: desktop applications stuck in the past, or mobile apps that lock your data in proprietary clouds. Submersion is different:
- **You Control Your Data** — All data is stored locally in SQLite and can be synced across devices through cloud storage. No account required. No cloud dependency. Export everything, anytime.
- **Truly Cross-Platform** — One app for iOS, Android, macOS, Windows, and Linux. Your logbook works everywhere, with the same details and analytics on all platforms. Available in 10 languages.
- **Open Standards** — Full UDDF 3.2 import/export. CSV support. No proprietary formats trapping your dive history.
- **300+ Dive Computers supported** — Connect via USB or Bluetooth. Powered by [libdivecomputer](https://www.libdivecomputer.org/).
- **Technical Diving Ready** — Bühlmann ZH-L16C decompression, multi-gas support, CNS/OTU tracking, trimix blending, CCR/SCR rebreather support.
- **Sync Across Devices** — Optional cloud sync via iCloud or Google Drive. No account required — sync is opt-in and your data stays yours.
- **Free Forever** — Open source under GPL-3.0. No premium tiers for core features. No ads.
## Data Philosophy
Submersion is built on these principles:
1. **Local-First** — Your data lives on your device. The app works offline, always.
2. **No Lock-In** — Export your entire logbook to UDDF or CSV at any time. Switch apps without losing history.
3. **No Account Required** — Use the app immediately. No sign-up, no email, no tracking.
4. **Open Source** — Audit the code. Fork it. Improve it. Your dive log software should be transparent.
## Features
### Dive Logging
- Comprehensive dive entry with depth, duration, temperatures, conditions
- Automatic dive numbering with gap detection and renumbering
- Entry/exit times with surface interval calculation
- Multi-tank support with gas mixes (air, nitrox, trimix)
- Buddy tracking with roles (buddy, guide, instructor, student)
- Trip organization for multi-dive expeditions
- Tags, favorites, and star ratings
- Free-text notes
### Dive Sites
- Full site database with GPS coordinates
- Interactive maps with clustering
- Capture location from device GPS
- Reverse geocoding for country/region
- Depth ranges, difficulty ratings, hazard notes
- Weather and tide data integration
### Dive Computer Integration
- **300+ supported dive computers** via libdivecomputer
- Bluetooth LE and USB connectivity
- Manufacturer protocols: Shearwater, Suunto, Mares, Aqualung, and more
- Incremental downloads (new dives only)
- Duplicate detection with fuzzy matching
- Multi-computer support with profile selection
> **Confirmed working:** Shearwater Teric, Aqualung i300C, Aqualung i330R. Have a different dive computer? [Help us expand this list](https://github.com/submersion-app/submersion/issues) - we're looking for testers!
### Profile Analysis
- Interactive depth/temperature/pressure/SAC charts with zoom and pan
- Touch markers showing various metrics
- Ascent rate calculation with color-coded warnings
- Profile event markers (descent, safety stop, gas switch)
- SAC/RMV overlay
### Decompression & Technical Diving
- Bühlmann ZH-L16C algorithm with gradient factors
- Real-time NDL, ceiling, and TTS calculations
- 16-compartment tissue loading visualization
- CNS% and OTU oxygen toxicity tracking
- ppO₂ curve with warning thresholds
- MOD/END/EAD calculations
- CCR (closed circuit) and SCR (semi-closed) rebreather support
- Dive planner with multi-level profiles, gas planning, and deco schedules
### Equipment Management
- Track all gear with serial numbers, purchase dates, service intervals
- Service reminders with visual warnings
- Equipment sets ("bags") for quick selection
- Weight calculator based on exposure suit and tank type
- Per-dive gear tracking
### Certifications & Training
- Store all certifications with card numbers and dates
- Agency support: PADI, SSI, NAUI, SDI/TDI, GUE, RAID, and more
- Expiry tracking with warnings
- Instructor and dive center records
### Statistics & Records
- Total dives, bottom time, depth statistics
- Breakdown by year, country, site, dive type
- Personal records: deepest, longest, coldest, warmest
- Depth distribution histograms
### Import & Export
- **UDDF 3.2** — Universal Dive Data Format, the open standard
- **CSV** — Spreadsheet-compatible with configurable columns
- **Excel** — Multi-sheet .xlsx with statistics
- **PDF** — Printable logbook pages with multiple templates
- **KML** — Google Earth export with dive site placemarks
- **Universal Import** — Import from Subsurface, MacDive, Diving Log, DiveMate, and more
- Full database backup and restore (local, iCloud, or Google Drive)
## Getting Started
### Prerequisites
- [Flutter SDK](https://flutter.dev/docs/get-started/install) 3.5.0 or higher
### Quick Start
```bash
# Clone the repository
git clone https://github.com/submersion-app/submersion.git
cd submersion
# Initialize submodules (required for libdivecomputer)
git submodule update --init --recursive
# Install dependencies
flutter pub get
# Generate database and serialization code
dart run build_runner build --delete-conflicting-outputs
# Run the app
flutter run -d macos # or: windows, linux, ios, android
```
## Building from Source
Build for release (iOS, Android, macOS, Windows, Linux)
```bash
# iOS
flutter build ios
# Android
flutter build apk
# macOS
flutter build macos
# Windows
flutter build windows
# Linux
flutter build linux
```
macOS: building without a developer certificate
If you don't have an Apple Developer certificate, you can still build and run the app locally using ad-hoc signing. This creates a non-sandboxed build that works on any Mac.
```bash
# Run the no-sandbox build script
./scripts/release/build_nosandbox_macos.sh
```
This script:
1. Builds the macOS app with Flutter
2. Re-signs it with an ad-hoc signature (no Apple certificate required)
3. Applies no-sandbox entitlements for full file system access
The built app will be at `build/macos/Build/Products/Release/submersion.app`.
**Running the app:** macOS Gatekeeper will block unsigned apps by default. To run:
1. Right-click (or Control-click) on `submersion.app`
2. Select "Open" from the context menu
3. Click "Open" in the dialog that appears
You only need to do this once — subsequent launches will work normally.
> **Note:** This build cannot be distributed via the Mac App Store (which requires sandboxing). It's intended for local testing and direct distribution.
Windows: building from source
Windows builds require no code signing for local use. You need [Visual Studio](https://visualstudio.microsoft.com/) with the **Desktop development with C++** workload installed (the free Community edition works).
```bash
# Build the app
flutter build windows --release
```
The built app will be at `build\windows\x64\runner\Release\`.
> **Note:** Windows SmartScreen may show an "unrecognized app" warning for unsigned executables. Click "More info" then "Run anyway" to proceed.
Linux: building from source (distro dependencies)
Linux builds require GTK3 and several native development libraries. Install them first:
**Debian/Ubuntu:**
```bash
sudo apt-get update
sudo apt-get install -y \
clang cmake ninja-build pkg-config \
libgtk-3-dev liblzma-dev libstdc++-12-dev \
libsqlite3-dev libsecret-1-dev
```
**Fedora:**
```bash
sudo dnf install -y \
clang cmake ninja-build pkg-config \
gtk3-devel xz-devel libstdc++-devel \
sqlite-devel libsecret-devel
```
**Arch Linux:**
```bash
sudo pacman -S --needed \
clang cmake ninja pkg-config \
gtk3 xz sqlite libsecret
```
Then build:
```bash
flutter build linux --release
```
The built app will be at `build/linux/x64/release/bundle/`.
Architecture & tech stack
Submersion follows clean architecture principles with clear separation of concerns:
```
lib/
├── core/ # Shared infrastructure
│ ├── database/ # Drift ORM schema and migrations
│ ├── deco/ # Decompression algorithms
│ ├── router/ # Navigation (go_router)
│ ├── services/ # Location, weather, database services
│ └── theme/ # Material 3 theming
├── features/ # Feature modules
│ ├── dive_log/ # Core dive logging
│ ├── dive_sites/ # Site management & maps
│ ├── dive_computer/ # Device connectivity
│ ├── equipment/ # Gear tracking
│ ├── statistics/ # Analytics & records
│ └── ... # Additional features
└── shared/ # Reusable widgets
```
**Tech Stack:**
- **Flutter** — Cross-platform UI framework
- **Riverpod** — Reactive state management
- **Drift** — Type-safe SQLite ORM with migrations
- **go_router** — Declarative navigation
- **fl_chart** — Interactive charts for profiles and statistics
- **flutter_map** — OpenStreetMap integration
- **libdivecomputer** — FFI bindings for dive computer communication
See [ARCHITECTURE.md](docs/ARCHITECTURE.md) for detailed documentation.
## Roadmap
| Version | Status | Highlights |
|---------|--------|------------|
| **v1.0** | Complete | Core logging, sites, gear, statistics, UDDF/CSV/PDF |
| **v1.1** | Complete | GPS integration, maps, tags, profile zoom/pan |
| **v1.5** | Nearly Complete | Dive computer connectivity, deco algorithms, O₂ tracking, cloud sync, photos, 10 languages |
| **v2.0** | Planned | Community features, social sharing, advanced analytics, partner integrations |
See [FEATURE_ROADMAP.md](docs/FEATURE_ROADMAP.md) for the complete development plan.
## Contributing
Contributions are welcome! Submersion is built by divers, for divers.
1. Fork the repository
2. Clone and initialize submodules: `git clone --recurse-submodules `
3. Create a feature branch: `git checkout -b feature/your-feature`
4. Make your changes with tests
5. Submit a pull request
Please run `flutter analyze` and `flutter test` before submitting.
## License
Submersion is free software, released under the **GNU General Public License v3.0**.
You are free to use, modify, and distribute this software. If you distribute modified versions, you must also release the source code under GPL-3.0.
See [LICENSE](LICENSE) for the full text.
## Acknowledgments
Submersion builds on the work of the dive logging community:
- **[libdivecomputer](https://www.libdivecomputer.org/)** — The open-source library powering dive computer communication
- **[Subsurface](https://subsurface-divelog.org/)** — Inspiration and the UDDF format
- **[Flutter](https://flutter.dev/)** — Cross-platform framework making this possible
---
*Dive safe. Log everything. Own your data.*