1. Settings & Data
Every setting lives on your device. Dive Tools has no server, no account, and no tracking — nothing you type leaves your browser unless you explicitly export it. Reach everything in this section via the gear icon in the top-right of the home screen.
1.1 Installing the PWA
Dive Tools is a Progressive Web App — it works in any modern browser and can be installed as a standalone app with full offline support.
Android (Chrome, Edge, Samsung Internet): open www.divetools.app/app/, then either tap the Add to Home Screen button in the app's settings drawer, or use the browser's three-dot menu → "Install app". The app appears in your launcher and opens without browser chrome.
iOS (Safari only): open the app in Safari, tap the Share button, then "Add to Home Screen". Other iOS browsers cannot install PWAs.
Desktop (Chrome, Edge): look for the install icon in the address bar, or use the three-dot menu → "Install Dive Tools".
Once installed, the app works offline — on a boat, in a cave lodge, at 3000 m altitude with no signal. New versions update silently on the next open; there is no prompt, no update button, and the update does not wipe local storage.
1.2 Units, theme, language
Units — switch between metric (m, bar, °C, L) and imperial (ft, psi, °F, cuft). Every input, output, chart, and export updates instantly. Values are always stored in metric internally, so swapping units never drifts your numbers.
Theme — dark (default) or light. Applied immediately to the whole app.
Language — English, Czech, German, French, Spanish, Italian, Polish. The dropdown affects labels, warnings, and exports.
Module order — use the up/down arrow buttons next to each module to reorder the cards on the home screen.
1.3 Backup & Restore
Because all state is local, you are responsible for moving it between devices or keeping a backup. The Backup & Restore block exports everything as a single JSON blob.
Copy Settings to Clipboard writes one JSON that contains:
- Every Advanced setting in the Deco Planner — GF, rates, SAC, water density, altitude, IBCD, CCR loop volume and O₂ metabolic rate, gas switch extra time
- Custom gas presets (bottom, deco, bailout, top-up) and gas prices
- Custom cylinders and which cylinders are enabled or hidden
- Every custom checklist and any in-progress checklist state
- Units, theme, language, module order
Paste the same JSON into Restore Settings on another device or after clearing browser storage, and the app rehydrates to the exact same state.
Good practice: after a weekend of trip planning, copy your settings and keep the JSON in a note or cloud file. If you change browsers, wipe site data, or switch phones, you are one paste away from your full setup.
2. Deco Planner
The Deco Planner computes decompression schedules using the Bühlmann ZHL-16C algorithm with gradient factors. It handles single-level and multi-level profiles, open circuit and closed circuit rebreather, cave exits, and CCR bailout — all offline, on your device. The engine is cross-checked against Subsurface, MultiDeco and Shearwater across 15 reference profiles — see the deco engine validation report.
The top area holds the primary dive inputs (mode, profile, gases). The gear icon top-right opens the Advanced drawer where every tunable parameter lives. Scroll down on the main screen to see the runtime plan and results.
2.1 Mode: OC vs CCR
The first choice is breathing loop. Toggle OC (Open Circuit) or CCR (Closed Circuit Rebreather) at the top of the screen.
OC breathes each gas at ambient pressure; deco schedule is driven by the gas selected for each phase of the dive.
CCR holds a constant oxygen partial pressure — the setpoint — by injecting O₂ into a recirculated loop. Values are in bar, typical range 0.4 to 1.6. The planner treats the diluent as the inert carrier and the setpoint as the ppO₂ component of the breathing mix at every depth.
Gas density caveat for CCR. At the setpoint you chose, the effective mix at depth can still exceed the 5.2 g/L soft limit or 6.0 g/L hard limit. The Gas Density calculator (section 3.1) is the right place to pre-check any setpoint / diluent combination before you plan the dive.
2.2 Profile: Single vs Multi-level
Single-level — one depth, one bottom time. Fast for standard square-profile dives.
Multi-level — any number of segments. Each segment has a start depth, end depth, duration, and its own gas. Segments connect continuously, so the end depth of segment n becomes the start depth of segment n+1. Use this for real-world profiles that are not square — wall dives, cave penetrations with depth changes, wreck swim-throughs.
Multi-level has one more choice: Direct ascent or Same way back (cave mode). Direct ascent is the usual convention — after the last segment you go straight to the surface following deco. Same way back is for cave and overhead environments where you must return along the same profile you entered on. The planner then:
- Treats the deepest forward segment as the turn point
- Mirrors the segments in reverse on the return leg
- On OC, narrows the cave-return gas pool to each segment's declared gas plus non-bottom deco gases — it will not silently swap to a richer bottom gas above its MOD
- On CCR with a bailout plan, activates the bailout at the turn point, so the whole return leg runs on OC
The Exclude descent from BT toggle in Dive Parameters decides whether the initial descent time counts toward bottom time. Off by default (descent is included, matching most tables and agencies). Turn it on if you prefer the stricter convention where BT starts only when you reach the first segment's start depth.
2.3 Gases
The Gases panel changes its sections depending on the mode you picked in 2.1. OC shows Bottom gas + Deco gases. CCR shows Diluent + Bailout gases (the bailout list appears only when the Bailout toggle is on).
Every gas list follows the same interaction pattern: preset chips for one-tap add, a gear icon to manage the preset library and define custom mixes, and a trash icon to remove a gas from the active list. Labels are color-coded by O₂ content — hypoxic trimixes violet, normoxic mixes blue, enriched mixes cyan, deco mixes emerald, pure O₂ lime. The same palette appears in the runtime plan so gas transitions are easy to spot.
OC — Bottom and Deco gases
Bottom gas is what you breathe at the deepest segments. Presets cover Air, EAN32, EAN36, EAN40, and the standard trimix range from TMX 21/35 down to TMX 10/70. Tap Add custom in the manage panel to define any O₂/He combination — N₂ is auto-calculated.
Deco gases are optional intermediate or shallow-stop gases. Each gas has a switch depth (in the units you've selected) where the planner will swap to it on ascent, as long as ppO₂ stays under the deco limit (1.6 bar) and density is acceptable. Default presets are EAN50 (switch 21 m) and pure O₂ (switch 6 m), matching typical tech-diving practice.
CCR — Diluent and Bailout
Diluent is the inert carrier gas in the loop. The setpoint (from 2.1) defines the ppO₂; the diluent defines the ppN₂ and ppHe at every depth. The same preset chips and custom-gas flow as OC Bottom gas apply here; the label simply changes from "Bottom Gas" to "Diluent" when CCR mode is active. Choose a diluent with enough helium to keep END manageable and density under 5.2 g/L at your target depth — use the Gas Density calculator (section 3.1) to verify before planning.
Bailout gases appear in runtime only when the Bailout toggle is on. A single bailout gas list covers the whole OC ascent after a loop failure — both the deep phase (your bottom-equivalent trimix) and the shallow deco phase (typically EAN50 and O₂). There is no separate "deco gas" list in CCR mode because the bailout stack already holds the shallow mixes. Presets cover the full trimix range plus EAN50 and O₂, with switch depths pre-set at typical MOD values (TMX 18/45 at 60 m, TMX 15/55 at 75 m, EAN50 at 21 m, O₂ at 6 m) — adjust to your team's standards. The planner picks the richest safe gas at each depth during the bailout ascent and validates each switch against IBCD and ppO₂ limits.
2.4 Bailout (CCR only)
The Bailout plan toggle sits on its own card below the Gases panel and only appears in CCR mode. Turning it on computes a worst-case scenario: CCR fails at the deepest point and you must ascend on open circuit. The planner schedules the bailout gases you defined (from section 2.3), inserts a Bailout switch stop at the activation depth (see 2.7 Gas Switch), runs IBCD checks against the new gas, and reports OC gas consumption alongside the CCR diluent and O₂ numbers. If no bailout gas is configured, a red critical warning prompts you to add one.
On a direct-ascent multi-level or single-level profile, activation happens at the maximum depth. In Same way back (cave) mode — see 2.2 — activation happens at the turn point and the whole return leg runs on OC.
2.5 Runtime Plan & Results
Once inputs are valid, the results area appears below the inputs. Blocks are listed here in the order you see them on screen, top to bottom.
Runtime table
Every phase of the dive, one row per segment or stop. Columns: depth, duration, running clock, active gas, and ppO₂ (or setpoint in CCR mode). Switch rows and IBCD alerts are highlighted inline. Colors on the gas column match the gas palette from section 2.3.
No-deco banner & warnings
If the dive is within NDL, a green "No decompression required — NDL dive" banner appears. Otherwise, any warnings generated during the calculation surface here as coloured boxes:
- Critical (rose) — unsafe conditions that would typically abort the plan, e.g. missing bailout gas for a CCR bailout plan or ppO₂ exceeding the deco limit
- IBCD (orange) — a gas switch that raises ppN₂ beyond the configured limit
- Gas density (orange) — any gas exceeds 5.2 g/L caution or 6.0 g/L danger at its use depth
- General warnings (amber) — advisory notes, including gas switch extra-time confirmations
Dive profile chart
Time on the X axis, depth on the Y axis. Gas colors fill the segments; the ceiling is drawn as a dashed line so you can see visually how close your profile runs to the decompression limit at each moment. Use the Fullscreen button in the top-right corner of the chart to enlarge it to the whole screen — handy on a phone for reading labels on long deco profiles. Tap anywhere or press Esc to close.
Summary card
Headline numbers at a glance: max depth, total runtime, TTS (time-to-surface), deco stop count, CNS%, OTU. Useful for a quick sanity check before committing to the plan.
Gas Consumption
One row per gas actually consumed during the dive. Each row shows total surface-litres, the auto-picked cylinder (smallest that fits with more than 50 bar reserve), required pressure, and remaining reserve. Tap the cylinder dropdown to override the pick for that specific gas — useful when you know you will carry a bigger cylinder for redundancy. Low-reserve rows are amber, over-consumption is rose.
Fill pressure can be set two ways:
- The global input at the top-right of the Gas Consumption card (e.g. Fill: 200 bar) acts as a bulk setter — changing it snaps every row to the new value and wipes any per-gas overrides you had.
- Each row has its own per-gas input inline between the gas label and the total volume. Change it to fine-tune one cylinder (e.g. "my bailout bottom is filled to 232, everything else is 200") without touching the others.
On CCR dives the panel shows diluent (loop fills on descent) and metabolic O₂ on top of any OC gas used after a bailout — one unified view instead of separate CCR and bailout tables.
2.6 Export
Copy as text places a formatted runtime plan on your clipboard, including summary, runtime table, gas consumption, and warnings. Paste straight into a dive log, Slack, or email.
PDF export builds a one-page A4 plan with the same information plus the profile chart. Useful for a waterproof pre-dive brief or a team copy.
2.7 Advanced Settings
The Advanced drawer (gear icon in the top-right) holds every parameter that most divers set once and forget. It is organized into five sections separated by rules.
Gradient Factors
Five presets — 30/70, 40/85, 50/85, 50/90, 90/90 — plus a custom pair for any GF Low / GF High combination. Lower values are more conservative (longer deco, deeper first stop). GF Low controls the first stop; GF High controls the surfacing ceiling. The 90/90 preset effectively disables gradient factors and matches pure Bühlmann.
Dive Parameters
Last deco stop — 3 m or 6 m. 6 m is common for rough surface conditions or when a 3 m stop is impractical.
Exclude descent from BT — see profile section above.
IBCD Check — Isobaric Counter-Diffusion guard. When enabled, the planner flags any gas switch that raises ppN₂ by more than the limit (default 0.5 ATA) and places the warning on the row where the diver is actually breathing the new gas. Useful for catching bad helium-to-nitrogen transitions that can trigger inner-ear DCS.
Descent rate (default 20 m/min) and Ascent rate (default 10 m/min) — used for all transit calculations and affect total runtime.
Water density — Fresh (1000), EN13319 (1020), or Salt (1025) kg/m³. EN13319 is the European standard for dive computers. Fresh water reduces the pressure gradient per metre of depth, so deco is slightly shallower in real terms.
Altitude (meters above sea level, default 0) — reduces surface pressure, which shifts all ceilings upward. Set this when diving mountain lakes. The drawer shows the computed surface pressure in bar.
Gas Consumption
Bottom / Bailout SAC (L/min at surface) — your Surface Air Consumption on bottom gas, or on bailout gas when CCR mode is active. Default 20.
Deco SAC — typically lower than working SAC because you are resting. Default 15.
CCR Loop volume (default 12 L) — only shown in CCR mode. Drives diluent consumption on descent: every depth change adds loopVolume × Δpressure of diluent. Flushes are not modelled.
CCR O₂ metabolic (default 1.0 L/min) — only shown in CCR mode. Drives metabolic O₂ consumption across the entire dive.
Gas Switch
OC switch (min) — minimum dwell time at the switch depth on the new gas when transitioning between OC gases. Default 0. If you set it to 2 minutes and the existing deco stop at that depth is already 5 minutes, nothing changes. If it is only 30 seconds, the stop is extended to 2 minutes — or a new stop is inserted if none existed.
Bailout switch (min) — same idea, but applied at the moment of switching from CCR to OC. Covers the real-world seconds or minutes it takes to physically deploy a bailout regulator, flush, and begin breathing. Tissue load, CNS, OTU, and ppO₂ are all integrated across the added time.
Auto-switch to best gas in segment — off by default. When on, multi-level OC transits between segments automatically pick the richest available gas at each depth (including deco gases). When off, each segment's declared gas is used literally for the full segment including its transit. Off is the stricter "what I planned is what I breathe" convention.
My Cylinders
Chip row at the top shows every cylinder available for the auto-picker. Tap a chip to enable or disable a cylinder for this planning session. The gear icon opens a manage panel where you can:
- Hide preset cylinders you never use — they disappear from the chip row until you reset
- Add custom cylinders with any label and water volume (LP85, 18 L twinset, 3 L pony, anything)
- Delete custom cylinders outright
- Reset defaults — brings every preset back and re-enables all of them
Custom cylinders are saved across sessions and travel with your Backup & Restore JSON.
Fill pressure is set directly on the Gas Consumption panel in the main results view (not in the drawer), both as a global default and per individual gas — see section 2.5 for details.
3. Gas Calculator
The Gas Calculator is a selector screen with three independent tools. Pick one from the module's home screen; each tool has its own back button to return to the selector.
3.1 Gas Density
Checks whether a gas mix stays within breathable density limits at depth — the single most underused safety check in technical diving. Dense gas increases work of breathing, CO₂ retention, and narcosis. The widely accepted threshold is 5.2 g/L (caution) and 6.0 g/L (danger), based on Anthony & Mitchell's research.
Mode toggle
The calculator supports both breathing-loop topologies via an [OC | CCR] toggle at the top. Default is CCR.
- CCR — loop gas composition is driven by the setpoint (the solenoid holds ppO₂ constant). Density depends on setpoint, diluent, depth, and temperature.
- OC — the breathing gas at depth is the cylinder mix as-is. No setpoint input.
Inputs
Gas presets (label changes to "Diluent Presets" in CCR mode) — six chips: Air plus five trimixes (TMX 21/35, 18/45, 15/55, 12/65, 10/70). Tap a chip to load its O₂/He composition; N₂ auto-fills. You can still override O₂ and He manually after picking a preset — the chip will de-select and the inputs become custom.
Setpoint (PPO₂) — CCR mode only. The partial pressure of O₂ the rebreather holds in the loop. Default 1.3 bar. Higher setpoints push the effective inert-gas fraction up at every depth, which pushes density up too. Hidden in OC mode.
Water temp — in °C or °F depending on your selected units. Cold water is denser by a few percent at the same pressure, so colder water means density limits are reached slightly deeper.
Outputs
In CCR mode:
- Max recommended depth — the deepest point where computed density stays below 5.2 g/L for this diluent + setpoint + temperature. If density exceeds 5.2 g/L at the surface already, the output reads "N/A - density too high at surface".
- Density table — one row per depth step. Columns: Depth, FO₂, FHe, FN₂, Density. Rows are color-coded: safe (green, < 5.2), caution (amber, 5.2-6.0), danger (rose, > 6.0), with a legend below the table.
In OC mode the output is a plain, monochrome density table with no max-depth recommendation, no row colors, and no legend — purely informational. Depth limits for OC are set by MOD and ppO₂, not density, so that is where the recommendation belongs (see 3.3). The table still lets you see at a glance how density grows with depth on any mix.
Why this matters — especially for CCR. At 45m on a rebreather with Air diluent (setpoint 1.3, 10 °C water) the loop density is 6.74 g/L — past the 6.0 g/L danger threshold. Switch to TMX 21/35 diluent at the same depth and setpoint, and density drops to 4.78 g/L — back in the safe zone. Check here before you plan.
3.2 Gas Mixer (PP Blend & Top-Up)
Two workflows behind one module, selected by tabs at the top.
PP Blend tab — mixing from empty or near-empty
Calculates a partial-pressure blend recipe when you want a specific target mix at a specific final pressure.
- Residual gas — O₂% / He% / N₂% currently in the cylinder, usually from a previous dive. Set all zero for a truly empty cylinder.
- Target mix — the O₂% / He% / N₂% you want to end up with.
- Final pressure — target fill pressure (default 200 bar).
- Top gas — what the last top-off is done with: Air (21/0), EAN32, EAN36, or a custom mix.
- Fill order —
He → O₂ → ToporO₂ → He → Top, where Top is whatever Top gas you selected (Air, EAN32, EAN36, or custom). The labels in the app read "Air" as shorthand for the last step regardless of the actual gas. Most blenders prefer helium first to minimise O₂ exposure in helium lines; pick the order your blending station supports.
Results show the pressure to stop at after each gas, plus a cost estimate if you filled in prices (see below).
Top-up tab — topping off a half-full cylinder
You already have gas in the cylinder and want to fill to a target pressure with one specific gas. The planner computes the resulting mix and warns if it becomes unusable.
- Current cylinder — current pressure (bar/psi) + current O₂% and He%.
- Fill gas — Air, EAN32, EAN36, pure O₂, pure He, or a custom gas.
- Fill to — target pressure.
Results: the resulting mix (O₂% / He% / N₂%) plus any safety warnings — "O₂ > 40% - high oxygen, analyze before use", "O₂ < 18% - travel gas or deep mix only", "O₂ < 16% - hypoxic, not breathable at surface".
Preset management (both tabs)
The gear-style Manage Presets button exposes the preset library for quick-selecting target or fill gases. Add custom presets, remove ones you never use, or reset to defaults.
Cost estimate (both tabs)
Optional block at the bottom. Enter prices per liter for He, O₂, Air, EAN32, EAN36, and a custom gas, plus your cylinder size. The planner multiplies volumes of each gas used in the fill by its price and gives a total. Useful for shop runs and trip budgeting. Prices are remembered across sessions.
3.3 MOD / EAD / END
Three classic single-value calculations for any nitrox or trimix, all on one screen.
- MOD (Maximum Operating Depth) — deepest depth where ppO₂ stays below your set limit. Driven by O₂ fraction and max ppO₂ only.
- EAD (Equivalent Air Depth) — the air depth with the same ppN₂ as your nitrox at the reference depth. Used to pick a conservative no-stop table row when diving nitrox.
- END (Equivalent Narcotic Depth) — the air depth with the same narcotic potential (He treated as non-narcotic) as your trimix at the reference depth.
Inputs
Common mixes — ten chips: Air, EAN32, EAN36, EAN40, EAN50, plus trimixes TMX 21/35 through 10/70. Tap to load; manual O₂/He override is allowed.
Max PPO₂ — default 1.6 bar (common working limit). Use 1.4 for conservative planning, 1.0 for rebreather resting setpoints, or your agency's number.
Depth — the reference depth for EAD and END. MOD ignores this input (it's depth-independent). Default 30 m.
Outputs
Three large numbers — MOD, EAD, END — each in metres or feet depending on your units. For trimix, MOD and EAD diverge: MOD is driven by O₂, EAD only by N₂. END includes only helium as the narcosis reducer (O₂ is treated as narcotic, matching GUE/TDI convention).
4. Checklists
Step-by-step pre-dive safety checklists with phase navigation, progress tracking, per-step timers, and a dive log. Custom checklists can be created, edited, duplicated, and deleted; default ones can be reset back to their shipped state at any time.
4.1 Default checklists
Four checklists ship with the app, 42 steps in total:
- JJ-CCR Preparations on land — full system build, analysis, and verification. Five phases: Assessment & Supplies, Assembly, System Checks, Integrity Tests, Electronics & Startup.
- JJ-CCR Shortly prior to diving — final checks before entering the water.
- JJ-CCR Shortly after entering the water — in-water safety verification.
- CHAOS (GUE) — pre-breathe rebreather check mnemonic: Controller calibration, HUD calibration, ADV test, O₂ / Solenoid check, Symptoms check.
The three JJ-CCR checklists are tailored to the JJ-CCR rebreather but the steps generalize to most backmount eCCR units. CHAOS is agency-neutral and intended for use during any rebreather pre-breathe.
4.2 Using a checklist
Tap a checklist on the selector screen to open it. The active-checklist screen has:
- Title and description at the top, with a back button that asks for confirmation if you have progress.
- Total progress bar — percentage of items completed across all phases.
- Phase navigation — current phase title, phase counter ("Phase 2 of 5"), and Previous / Next Phase buttons at the bottom.
- Step items — one row per check. Tap to toggle done. Some steps have expandable details (tap the row to reveal the extra guidance written by the author).
- Per-step timer — if the author enabled it on a step (pre-breathe, leak test, etc.), a countdown appears when you start it. It beeps when it reaches zero. Timers are manual start/stop — there is no auto-advance.
- Reset button — clears all checks in the current checklist (with confirmation).
- Complete button — when every step is done, this finishes the run, records an entry in the Dive Log (see below), and returns you to the selector.
Progress is persisted in localStorage — close the browser or switch apps, reopen, and you land back on the same phase with the same items checked. Exiting mid-checklist prompts a confirmation so you do not wipe progress accidentally.
Dive Log
Every time you finish a checklist with Complete, the app writes a summary entry to the Dive Log. Each entry records the checklist title, the date and time you completed it, items completed out of total, and how long the run took. The log keeps the last 50 entries.
The log lives on the selector screen (not inside the active checklist). Scroll to the bottom of the selector — if you have any entries, a Dive Log (N) button appears; tap it to expand and review past runs. Useful for spotting when you last ran the full pre-breathe or for tracking training consistency.
4.3 Custom checklist builder
From the selector screen, the gear icon opens the Manage Checklists view. From there, Create New Checklist launches the builder.
A custom checklist has:
- Name — required, shown in the selector list.
- Description — optional, a short line shown under the name in the selector.
- One or more phases. Each phase has a title and a list of steps. Use Add Phase to create a new phase, the trash icon to remove one.
- One or more steps per phase. Each step has:
- A required step description (the short text shown on the checklist row)
- Optional longer details (expands when tapped during use)
- An optional timer — toggle Enable timer to make the step time-bounded
From the manage view you can also Duplicate an existing checklist (a fast way to fork a default one and tweak it), Edit, or Delete. Default checklists can be deleted too — Reset to defaults restores them while leaving your custom checklists untouched.
Every custom checklist is included in Backup & Restore (see 1.3), so they survive device switches.
5. Safety Notice
Dive Tools is a planning and educational aid, not a substitute for proper training, certification, or judgment. Decompression theory is probabilistic — no algorithm, including Bühlmann ZHL-16C with gradient factors, guarantees a safe dive. Gas choices, bailout strategy, and gradient factors are conservative starting points, not absolute limits.
You are responsible for every dive you plan and execute. Always:
- Dive within your training and certification
- Cross-check critical calculations against your dive computer or a second planner
- Account for conditions the app cannot know: physiology, workload, thermal protection, dehydration, fatigue, recent dives, PFO and other DCS risk factors
- Carry adequate bailout and follow your agency's gas planning rules (minimum reserves, rock bottom, rule of thirds)
- Respect depth, narcosis, ppO₂, and density limits even when the app does not warn
- Analyze every cylinder before the dive, regardless of what the blending tool says
Dive Tools is provided as-is, without warranty of any kind. By using it, you accept that the author is not liable for any outcome of using the information it provides. The source code is open — if you find a bug that affects safety, please report it so others benefit from the fix.