{"id":44670654,"url":"https://github.com/submersion-app/submersion","last_synced_at":"2026-06-27T06:03:16.718Z","repository":{"id":331926076,"uuid":"1126056317","full_name":"submersion-app/submersion","owner":"submersion-app","description":"Submersion Dive Log","archived":false,"fork":false,"pushed_at":"2026-06-22T05:09:51.000Z","size":78118,"stargazers_count":35,"open_issues_count":81,"forks_count":15,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-06-22T06:10:47.686Z","etag":null,"topics":["dart","dive-computer","dive-log","diving","flutter","scuba","scuba-diving","scuba-logbook"],"latest_commit_sha":null,"homepage":"https://submersion.app","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/submersion-app.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/contributing/README.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-01T01:29:53.000Z","updated_at":"2026-06-22T05:09:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"aa8c0d64-6f94-458a-8fb3-776f40f7c52e","html_url":"https://github.com/submersion-app/submersion","commit_stats":null,"previous_names":["submersion-app/submersion"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/submersion-app/submersion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/submersion-app%2Fsubmersion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/submersion-app%2Fsubmersion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/submersion-app%2Fsubmersion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/submersion-app%2Fsubmersion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/submersion-app","download_url":"https://codeload.github.com/submersion-app/submersion/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/submersion-app%2Fsubmersion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34843149,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","dive-computer","dive-log","diving","flutter","scuba","scuba-diving","scuba-logbook"],"created_at":"2026-02-15T02:04:35.238Z","updated_at":"2026-06-27T06:03:16.711Z","avatar_url":"https://github.com/submersion-app.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"assets/icon/icon.png\" alt=\"Submersion logo\" width=\"80\"\u003e\n\n# Submersion\n\n*Own your dive log. Free and open-source, forever.*\n\n**Download**\n\n[![macOS](https://img.shields.io/badge/macOS-2ea44f?logo=apple\u0026logoColor=white\u0026style=for-the-badge)](https://github.com/submersion-app/submersion/releases)\n[![Windows](https://img.shields.io/badge/Windows-2ea44f?logo=windows\u0026logoColor=white\u0026style=for-the-badge)](https://github.com/submersion-app/submersion/releases)\n[![Linux](https://img.shields.io/badge/Linux-2ea44f?logo=linux\u0026logoColor=white\u0026style=for-the-badge)](https://github.com/submersion-app/submersion/releases)\n[![Android](https://img.shields.io/badge/Android-2ea44f?logo=android\u0026logoColor=white\u0026style=for-the-badge)](https://github.com/submersion-app/submersion/releases)\n[![iOS](https://img.shields.io/badge/iOS-2ea44f?logo=apple\u0026logoColor=white\u0026style=for-the-badge)](https://apps.apple.com/us/app/submersion-dive-log/id6757456915)\n\n\u003csub\u003eLicense \u0026amp; build status\u003c/sub\u003e\n\n[![License: GPL-3.0](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)\n[![CI](https://img.shields.io/github/actions/workflow/status/submersion-app/submersion/ci.yaml?branch=main\u0026label=CI\u0026logo=githubactions\u0026logoColor=white)](https://github.com/submersion-app/submersion/actions/workflows/ci.yaml)\n\n\u003cimg src=\"docs/assets/screenshots/readme/hero.png\" alt=\"Submersion on macOS and iOS\" width=\"900\"\u003e\n\n\u003c/div\u003e\n\nSubmersion 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.\n\n## See it in action\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"58%\"\u003e\u003cimg src=\"docs/assets/screenshots/readme/01-dive-logging.jpg\" alt=\"Dive logging\"\u003e\u003c/td\u003e\n\u003ctd width=\"42%\"\u003e\n\u003ch3\u003eComprehensive Dive Logging\u003c/h3\u003e\n\u003cp\u003eEvery dive, fully detailed and in your control.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDepth, duration, temperatures, conditions\u003c/li\u003e\n\u003cli\u003eMulti-tank gas mixes: air, nitrox, trimix\u003c/li\u003e\n\u003cli\u003eBuddies, trips, tags, and ratings\u003c/li\u003e\n\u003cli\u003eSortable table or card views\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"42%\"\u003e\n\u003ch3\u003eProfile \u0026amp; Decompression Analysis\u003c/h3\u003e\n\u003cp\u003eSerious technical-diving instrumentation.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInteractive depth / temperature / pressure profile\u003c/li\u003e\n\u003cli\u003e16-compartment tissue loading visualization\u003c/li\u003e\n\u003cli\u003eBühlmann ZH-L16C with gradient factors\u003c/li\u003e\n\u003cli\u003eCNS%, OTU, and ppO₂ tracking\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/td\u003e\n\u003ctd width=\"58%\"\u003e\u003cimg src=\"docs/assets/screenshots/readme/02-profile-deco.jpg\" alt=\"Profile and decompression analysis\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"58%\"\u003e\u003cimg src=\"docs/assets/screenshots/readme/03-dive-computers.jpg\" alt=\"Dive computer integration\"\u003e\u003c/td\u003e\n\u003ctd width=\"42%\"\u003e\n\u003ch3\u003e300+ Dive Computers\u003c/h3\u003e\n\u003cp\u003eDownload dives directly from your computer.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUSB and Bluetooth LE connectivity\u003c/li\u003e\n\u003cli\u003eShearwater, Suunto, Mares, Aqualung, and more\u003c/li\u003e\n\u003cli\u003eIncremental downloads with duplicate detection\u003c/li\u003e\n\u003cli\u003ePowered by libdivecomputer\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"42%\"\u003e\n\u003ch3\u003eSites, GPS \u0026amp; Conditions\u003c/h3\u003e\n\u003cp\u003eLocation and environment for every dive.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eGPS entry/exit with interactive maps\u003c/li\u003e\n\u003cli\u003eTide and weather integration\u003c/li\u003e\n\u003cli\u003eReverse-geocoded country and region\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/td\u003e\n\u003ctd width=\"58%\"\u003e\u003cimg src=\"docs/assets/screenshots/readme/04-sites-gps.jpg\" alt=\"Dive sites, GPS and conditions\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"58%\"\u003e\u003cimg src=\"docs/assets/screenshots/readme/05-statistics.jpg\" alt=\"Statistics and records\"\u003e\u003c/td\u003e\n\u003ctd width=\"42%\"\u003e\n\u003ch3\u003eStatistics \u0026amp; Records\u003c/h3\u003e\n\u003cp\u003eSee your diving life at a glance.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTotals, averages, and personal records\u003c/li\u003e\n\u003cli\u003eBreakdowns by year, country, and site\u003c/li\u003e\n\u003cli\u003eSAC trends and depth distribution\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Why Submersion?\n\nMost 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:\n\n- **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.\n- **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.\n- **Open Standards** — Full UDDF 3.2 import/export. CSV support. No proprietary formats trapping your dive history.\n- **300+ Dive Computers supported** — Connect via USB or Bluetooth. Powered by [libdivecomputer](https://www.libdivecomputer.org/).\n- **Technical Diving Ready** — Bühlmann ZH-L16C decompression, multi-gas support, CNS/OTU tracking, trimix blending, CCR/SCR rebreather support.\n- **Sync Across Devices** — Optional cloud sync via iCloud or Google Drive. No account required — sync is opt-in and your data stays yours.\n- **Free Forever** — Open source under GPL-3.0. No premium tiers for core features. No ads.\n\n## Data Philosophy\n\nSubmersion is built on these principles:\n\n1. **Local-First** — Your data lives on your device. The app works offline, always.\n2. **No Lock-In** — Export your entire logbook to UDDF or CSV at any time. Switch apps without losing history.\n3. **No Account Required** — Use the app immediately. No sign-up, no email, no tracking.\n4. **Open Source** — Audit the code. Fork it. Improve it. Your dive log software should be transparent.\n\n## Features\n\n### Dive Logging\n\n- Comprehensive dive entry with depth, duration, temperatures, conditions\n- Automatic dive numbering with gap detection and renumbering\n- Entry/exit times with surface interval calculation\n- Multi-tank support with gas mixes (air, nitrox, trimix)\n- Buddy tracking with roles (buddy, guide, instructor, student)\n- Trip organization for multi-dive expeditions\n- Tags, favorites, and star ratings\n- Free-text notes\n\n### Dive Sites\n\n- Full site database with GPS coordinates\n- Interactive maps with clustering\n- Capture location from device GPS\n- Reverse geocoding for country/region\n- Depth ranges, difficulty ratings, hazard notes\n- Weather and tide data integration\n\n### Dive Computer Integration\n\n- **300+ supported dive computers** via libdivecomputer\n- Bluetooth LE and USB connectivity\n- Manufacturer protocols: Shearwater, Suunto, Mares, Aqualung, and more\n- Incremental downloads (new dives only)\n- Duplicate detection with fuzzy matching\n- Multi-computer support with profile selection\n\n\u003e **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!\n\n### Profile Analysis\n\n- Interactive depth/temperature/pressure/SAC charts with zoom and pan\n- Touch markers showing various metrics\n- Ascent rate calculation with color-coded warnings\n- Profile event markers (descent, safety stop, gas switch)\n- SAC/RMV overlay\n\n### Decompression \u0026 Technical Diving\n\n- Bühlmann ZH-L16C algorithm with gradient factors\n- Real-time NDL, ceiling, and TTS calculations\n- 16-compartment tissue loading visualization\n- CNS% and OTU oxygen toxicity tracking\n- ppO₂ curve with warning thresholds\n- MOD/END/EAD calculations\n- CCR (closed circuit) and SCR (semi-closed) rebreather support\n- Dive planner with multi-level profiles, gas planning, and deco schedules\n\n### Equipment Management\n\n- Track all gear with serial numbers, purchase dates, service intervals\n- Service reminders with visual warnings\n- Equipment sets (\"bags\") for quick selection\n- Weight calculator based on exposure suit and tank type\n- Per-dive gear tracking\n\n### Certifications \u0026 Training\n\n- Store all certifications with card numbers and dates\n- Agency support: PADI, SSI, NAUI, SDI/TDI, GUE, RAID, and more\n- Expiry tracking with warnings\n- Instructor and dive center records\n\n### Statistics \u0026 Records\n\n- Total dives, bottom time, depth statistics\n- Breakdown by year, country, site, dive type\n- Personal records: deepest, longest, coldest, warmest\n- Depth distribution histograms\n\n### Import \u0026 Export\n\n- **UDDF 3.2** — Universal Dive Data Format, the open standard\n- **CSV** — Spreadsheet-compatible with configurable columns\n- **Excel** — Multi-sheet .xlsx with statistics\n- **PDF** — Printable logbook pages with multiple templates\n- **KML** — Google Earth export with dive site placemarks\n- **Universal Import** — Import from Subsurface, MacDive, Diving Log, DiveMate, and more\n- Full database backup and restore (local, iCloud, or Google Drive)\n\n## Getting Started\n\n### Prerequisites\n\n- [Flutter SDK](https://flutter.dev/docs/get-started/install) 3.5.0 or higher\n\n### Quick Start\n\n```bash\n# Clone the repository\ngit clone https://github.com/submersion-app/submersion.git\ncd submersion\n\n# Initialize submodules (required for libdivecomputer)\ngit submodule update --init --recursive\n\n# Install dependencies\nflutter pub get\n\n# Generate database and serialization code\ndart run build_runner build --delete-conflicting-outputs\n\n# Run the app\nflutter run -d macos    # or: windows, linux, ios, android\n```\n\n## Building from Source\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eBuild for release (iOS, Android, macOS, Windows, Linux)\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# iOS\nflutter build ios\n\n# Android\nflutter build apk\n\n# macOS\nflutter build macos\n\n# Windows\nflutter build windows\n\n# Linux\nflutter build linux\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003emacOS: building without a developer certificate\u003c/b\u003e\u003c/summary\u003e\n\nIf 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.\n\n```bash\n# Run the no-sandbox build script\n./scripts/release/build_nosandbox_macos.sh\n```\n\nThis script:\n\n1. Builds the macOS app with Flutter\n2. Re-signs it with an ad-hoc signature (no Apple certificate required)\n3. Applies no-sandbox entitlements for full file system access\n\nThe built app will be at `build/macos/Build/Products/Release/submersion.app`.\n\n**Running the app:** macOS Gatekeeper will block unsigned apps by default. To run:\n\n1. Right-click (or Control-click) on `submersion.app`\n2. Select \"Open\" from the context menu\n3. Click \"Open\" in the dialog that appears\n\nYou only need to do this once — subsequent launches will work normally.\n\n\u003e **Note:** This build cannot be distributed via the Mac App Store (which requires sandboxing). It's intended for local testing and direct distribution.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWindows: building from source\u003c/b\u003e\u003c/summary\u003e\n\nWindows 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).\n\n```bash\n# Build the app\nflutter build windows --release\n```\n\nThe built app will be at `build\\windows\\x64\\runner\\Release\\`.\n\n\u003e **Note:** Windows SmartScreen may show an \"unrecognized app\" warning for unsigned executables. Click \"More info\" then \"Run anyway\" to proceed.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eLinux: building from source (distro dependencies)\u003c/b\u003e\u003c/summary\u003e\n\nLinux builds require GTK3 and several native development libraries. Install them first:\n\n**Debian/Ubuntu:**\n\n```bash\nsudo apt-get update\nsudo apt-get install -y \\\n  clang cmake ninja-build pkg-config \\\n  libgtk-3-dev liblzma-dev libstdc++-12-dev \\\n  libsqlite3-dev libsecret-1-dev\n```\n\n**Fedora:**\n\n```bash\nsudo dnf install -y \\\n  clang cmake ninja-build pkg-config \\\n  gtk3-devel xz-devel libstdc++-devel \\\n  sqlite-devel libsecret-devel\n```\n\n**Arch Linux:**\n\n```bash\nsudo pacman -S --needed \\\n  clang cmake ninja pkg-config \\\n  gtk3 xz sqlite libsecret\n```\n\nThen build:\n\n```bash\nflutter build linux --release\n```\n\nThe built app will be at `build/linux/x64/release/bundle/`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eArchitecture \u0026amp; tech stack\u003c/b\u003e\u003c/summary\u003e\n\nSubmersion follows clean architecture principles with clear separation of concerns:\n\n```\nlib/\n├── core/                 # Shared infrastructure\n│   ├── database/         # Drift ORM schema and migrations\n│   ├── deco/             # Decompression algorithms\n│   ├── router/           # Navigation (go_router)\n│   ├── services/         # Location, weather, database services\n│   └── theme/            # Material 3 theming\n├── features/             # Feature modules\n│   ├── dive_log/         # Core dive logging\n│   ├── dive_sites/       # Site management \u0026 maps\n│   ├── dive_computer/    # Device connectivity\n│   ├── equipment/        # Gear tracking\n│   ├── statistics/       # Analytics \u0026 records\n│   └── ...               # Additional features\n└── shared/               # Reusable widgets\n```\n\n**Tech Stack:**\n\n- **Flutter** — Cross-platform UI framework\n- **Riverpod** — Reactive state management\n- **Drift** — Type-safe SQLite ORM with migrations\n- **go_router** — Declarative navigation\n- **fl_chart** — Interactive charts for profiles and statistics\n- **flutter_map** — OpenStreetMap integration\n- **libdivecomputer** — FFI bindings for dive computer communication\n\nSee [ARCHITECTURE.md](docs/ARCHITECTURE.md) for detailed documentation.\n\n\u003c/details\u003e\n\n## Roadmap\n\n| Version | Status | Highlights |\n|---------|--------|------------|\n| **v1.0** | Complete | Core logging, sites, gear, statistics, UDDF/CSV/PDF |\n| **v1.1** | Complete | GPS integration, maps, tags, profile zoom/pan |\n| **v1.5** | Nearly Complete | Dive computer connectivity, deco algorithms, O₂ tracking, cloud sync, photos, 10 languages |\n| **v2.0** | Planned | Community features, social sharing, advanced analytics, partner integrations |\n\nSee [FEATURE_ROADMAP.md](docs/FEATURE_ROADMAP.md) for the complete development plan.\n\n## Contributing\n\nContributions are welcome! Submersion is built by divers, for divers.\n\n1. Fork the repository\n2. Clone and initialize submodules: `git clone --recurse-submodules \u003cyour-fork-url\u003e`\n3. Create a feature branch: `git checkout -b feature/your-feature`\n4. Make your changes with tests\n5. Submit a pull request\n\nPlease run `flutter analyze` and `flutter test` before submitting.\n\n## License\n\nSubmersion is free software, released under the **GNU General Public License v3.0**.\n\nYou 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.\n\nSee [LICENSE](LICENSE) for the full text.\n\n## Acknowledgments\n\nSubmersion builds on the work of the dive logging community:\n\n- **[libdivecomputer](https://www.libdivecomputer.org/)** — The open-source library powering dive computer communication\n- **[Subsurface](https://subsurface-divelog.org/)** — Inspiration and the UDDF format\n- **[Flutter](https://flutter.dev/)** — Cross-platform framework making this possible\n\n---\n\n*Dive safe. Log everything. Own your data.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubmersion-app%2Fsubmersion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsubmersion-app%2Fsubmersion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubmersion-app%2Fsubmersion/lists"}