User Guide

Complete reference for every feature in Dive Tools — the Bühlmann ZHL-16C deco planner, gas calculator, and pre-dive checklists. Start with Settings & Data if you're new, or jump to a module below.

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.

Home screen with three module cards (Deco Planner, Gas Calculator, Checklists) and a gear icon in the top-right
Home screen — three module cards plus the gear icon that opens the Settings drawer.

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.

Settings drawer opened from the home screen, showing Module Order, Units, Theme, Language, and the start of Backup & Restore
Settings drawer — everything in this section lives here. Scroll for the rest.

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:

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.

Deco Planner in OC mode showing Mode toggle, Profile, Bottom Gas panels
OC mode — Bottom Gas panel, deco gases below.

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.

Deco Planner in CCR mode with Setpoint 1.3 input, Diluent label, TMX 21/35 selected, Bailout Gases section
CCR mode — Setpoint appears, Bottom Gas renames to Diluent, Bailout Gases replace Deco Gases.

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 profile editor with Direct ascent / Same way back toggle and two segments (0-30m and 30-30m) with From/To/Time/SP inputs and gas chips
Multi-level profile editor — per-segment From/To/Time/SP/Gas, plus Direct ascent vs Same way back toggle.

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:

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

Deco Planner OC mode — Bottom Gas panel with Air/EAN/TMX preset chips, and Deco Gases panel with EAN50 and O₂ add chips
OC — Bottom Gas presets (Air, EAN32-40, TMX 21/35 to 10/70) and Deco Gases (EAN50, O₂).

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

Deco Planner CCR mode — Diluent panel with preset chips, and Bailout Gases panel with trimix + EAN50 + O₂ add chips at typical MOD switch depths
CCR — Diluent replaces Bottom Gas; Bailout Gases list the full trimix + deco stack with preset switch depths.

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)

Bailout Plan (OC) toggle card, active (orange), with description: Worst-case: CCR bottom -> OC ascent at max depth
Bailout toggle — orange when on, with a one-line description of the worst-case scenario.

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 Plan table followed by Dive Profile chart and Summary card
Runtime table, dive profile chart, and the summary card.

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:

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

Gas Consumption panel with global fill pressure input at top and per-gas row below
Gas Consumption — global Fill bar top-right, per-gas input inline on each row.

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:

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.

Advanced drawer showing Gradient Factors presets and Dive Parameters inputs
Advanced drawer — top sections: Gradient Factors and Dive Parameters.

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

My Cylinders manage panel listing every preset with a hide button, the chip row below showing all enabled
My Cylinders with the gear-icon manage panel open — hide/delete rows + "Add custom cylinder".

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:

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

Gas Density calculator in CCR mode with colour-coded density table and Max recommended depth banner
CCR mode — colour-coded table + max safe depth.

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.

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:

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)

Gas Mixer in PP Blend mode with target mix 21/35, fill order He → O₂ → Air, step-by-step fill sequence, and cost estimate
Gas Mixer in PP Blend mode — fill steps and cost estimate for a 21/35 mix at 200 bar.

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.

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

Gas Mixer Top-up tab: Current Cylinder 50 bar TMX 10/50, Fill gas Air, target 200 bar, resulting mix TMX 18.2/12.5
Top-up — current cylinder + fill gas + target pressure, with resulting final mix and composition bar.

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.

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

MOD/EAD/END calculator with EAN32 preset selected, max ppO2 1.6, depth 30m
MOD / EAD / END — pick a mix, set max ppO₂ and reference depth.

Three classic single-value calculations for any nitrox or trimix, all on one screen.

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

Checklist selector showing four default checklists: three JJ-CCR and CHAOS (GUE)
Checklist selector — four defaults ship with the app.

Four checklists ship with the app, 42 steps in total:

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

Active CHAOS checklist showing total progress, phase navigation, and C/H/A/O/S step items with descriptions
Active checklist — progress bar, phase tabs, tap-to-check steps with expandable details.

Tap a checklist on the selector screen to open it. The active-checklist screen has:

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:

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