An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

Submersion logo

# Submersion

*Own your dive log. Free and open-source, forever.*

**Download**

[![macOS](https://img.shields.io/badge/macOS-2ea44f?logo=apple&logoColor=white&style=for-the-badge)](https://github.com/submersion-app/submersion/releases)
[![Windows](https://img.shields.io/badge/Windows-2ea44f?logo=windows&logoColor=white&style=for-the-badge)](https://github.com/submersion-app/submersion/releases)
[![Linux](https://img.shields.io/badge/Linux-2ea44f?logo=linux&logoColor=white&style=for-the-badge)](https://github.com/submersion-app/submersion/releases)
[![Android](https://img.shields.io/badge/Android-2ea44f?logo=android&logoColor=white&style=for-the-badge)](https://github.com/submersion-app/submersion/releases)
[![iOS](https://img.shields.io/badge/iOS-2ea44f?logo=apple&logoColor=white&style=for-the-badge)](https://apps.apple.com/us/app/submersion-dive-log/id6757456915)

License & build status

[![License: GPL-3.0](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)
[![CI](https://img.shields.io/github/actions/workflow/status/submersion-app/submersion/ci.yaml?branch=main&label=CI&logo=githubactions&logoColor=white)](https://github.com/submersion-app/submersion/actions/workflows/ci.yaml)

Submersion on macOS and iOS

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

Dive logging

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

Profile and decompression analysis

Dive computer integration

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

Dive sites, GPS and conditions

Statistics and records

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.*