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 third-party trackers - nothing you type leaves your browser unless you explicitly export it. The app records only anonymous, cookieless, aggregated usage statistics (which calculator you open, your language and units, coarse country); nothing personal, nothing stored on your device. See the privacy policy for details. 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.

The app remembers what you typed. Every calculator except the checklists keeps its inputs when you leave the screen and across restarts: the mix and ppO₂ in MOD, both tabs of the Gas Mixer and which one you had open, the Gas Density setup, and your working dive plan in the Deco Planner. That last one matters most, because the plan used to be lost whenever the app updated itself in the background. This is per-device working state, not a setting - see 1.3 for what does and does not travel in a backup.

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.

What the backup deliberately leaves out is in-progress work rather than settings: the inputs currently sitting in each calculator, the working dive plan, and any unfinished repetitive-dive chain (2.9). Those are kept on the device so nothing is lost when you close the app or it updates itself - but they are not the sort of thing you would want overwriting a second device. Anything worth keeping belongs in a Saved Plan.

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). Two icons sit top-right: the folder opens Saved Plans (2.8) and the gear opens the Advanced drawer where every tunable parameter lives. Above the Mode toggle you will find Add repetitive dive, which chains several dives in a day (2.9). 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: folder and gear icons top-right, an Add repetitive dive button above the Mode toggle, then Profile and 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; the planner accepts 0.5 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.

Variable setpoint. On single-level dives you can enable a phase-based setpoint instead of one fixed value. The planner then uses a Surface SP, a Descent SP (held on the bottom), and an Ascent SP, switching to the ascent setpoint at a depth trigger you set. This mirrors real CCR practice of running a lower setpoint on descent and a higher one during deco.

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.2 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 an end depth (To), a duration, and its own gas. The start depth (From) is read-only and derived automatically: segment 1 always begins at the surface, and every later segment starts where the previous one ended. You only edit To, so the profile is always continuous - you cannot accidentally leave a gap between segments. Use this for real-world profiles that are not square - wall dives, cave penetrations with depth changes, wreck swim-throughs.

Segments can also be gradual (sloped over time) rather than instant depth changes, so a slow descent or a gentle upslope is modelled as a continuous transit instead of a vertical jump.

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:

Same way back also exposes an exit time multiplier: scale the modelled return-leg duration for DPV or scootered exits where you cover the same distance faster than swimming in. An always-on caution reminds you that a real exit may be longer than planned and require more gas than calculated, so the multiplier is a planning aid, not a guarantee.

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 ICD and ppO₂ limits.

2.4 Bailout (CCR only)

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

The Bailout Plan (OC) toggle sits in the top-right of the Runtime Plan header (a ⚡ switch that turns amber when on) 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 ICD 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 ICD 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.

Hover, or tap and drag, across the chart to reveal a crosshair tooltip. At any point in the dive it reads the depth, running time, active gas with its ppO₂, the ceiling at that moment, the gas consumed so far (shown as a cylinder pressure drop), and the abort-TTS - the time-to-surface if you ended the dive and ascended from that point. Two more numbers sit alongside it:

Summary card

Headline numbers at a glance: max depth, total runtime, TTS (time-to-surface - the time from the end of bottom time to reaching the 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 all bar top-right, per-gas Fill 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 Factor presets and Dive Parameters, including descent, ascent and deco rates and the Variable ascent rate block with its Average / Max / Custom depth selector
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.

You can also save your own presets: set a custom GF Low / GF High pair and store it as a named chip for one-tap reuse on later plans. Custom GF presets persist across sessions and travel with your Backup & Restore JSON.

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.

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.

ICD 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), Ascent rate (default 10 m/min) and Deco rate (default 10 m/min, used between deco stops) - these drive every transit calculation and affect total runtime.

Variable ascent rate - instead of one speed for the whole ascent, slow down as you get shallower, which is what most tech divers actually do. Turn it on and you get four zones with their own rates. The Depth selector decides what the zones are measured against:

A slower final zone genuinely changes the schedule rather than just the clock: ascending slowly off-gasses, so the planner can shorten the shallow stop accordingly. That is the model behaving correctly, not a rounding artefact.

Display transitions - off by default. When on, the runtime table lists the ascent and descent legs between stops as their own rows instead of folding them into the stops.

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 RMV (Respiratory Minute Volume, surface L/min) - your gas consumption rate on bottom gas, or on bailout gas when CCR mode is active. Default 20.

Deco RMV - typically lower than working RMV 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.

2.8 Saved Plans

Saved Plans drawer with a name field prefilled "40m · 20min · TMX 21/35", a Save Plan button, and two stored plans each with rename, delete and Load controls
Saved Plans - name the current dive, save it, and load any stored plan later.

The folder icon in the top-right of the Deco Planner (left of the gear) opens Saved Plans. Type a name, tap Save Plan, and the current dive is stored as a named slot: profile, gases, setpoint, and the advanced settings it was planned with. Saved plans persist across sessions and are included in Backup & Restore (see 1.3), so they move with you to a new device.

Each stored plan offers Load, Rename, and Delete (delete asks for confirmation - it cannot be undone).

What happens when settings do not match. A plan carries the advanced settings it was saved with. If those differ from what you have set now, loading it does not silently change your numbers: a Settings differ dialog lists each field that disagrees side by side, as Current versus Plan, and asks you to choose Use plan settings or Keep current settings (or cancel the load). This matters most for gradient factors, ascent zone rates, and the ICD limit, where loading a plan under the wrong conservatism would quietly produce a different schedule from the one you saved.

2.9 Repetitive dives

Repetitive dives panel with three chained 40 m / 20 min dives separated by 60-minute surface intervals; TTS rises from 10 to 12 to 13 minutes across the chain and the third dive is highlighted as active
Three identical dives, one day. TTS climbs from 10 to 13 minutes as residual loading accumulates.

The planner can chain up to four dives in a day - one first dive plus three repetitive ones - so the schedule reflects the whole day rather than treating every dive as a fresh start. Tap Add repetitive dive above the Mode toggle; once a chain exists, a Repetitive dives panel replaces the button and lists every dive with its depth, bottom time, TTS and runtime.

Between each pair of dives sits a surface interval in minutes (default 60, anything from 1 minute to 48 hours). Across that interval the planner off-gasses your tissues, decays CNS, and carries OTU forward as a running daily total. The next dive then starts from that residual loading, so its NDL and deco reflect what is still in you - not a clean slate. A banner above the results names the dive number, the surface interval it follows, the surface gradient factor you start from, and the CNS carried in.

Tap any dive in the list to switch to it; the editor loads that dive and the whole chain recalculates. Every row updates as you type, so you can see immediately what a change to dive 1 does to dive 3. The trash icon removes a dive and re-indexes the rest; deleting until one dive is left collapses the chain back to plain single-dive mode.

If a dive anywhere in the chain cannot be computed - a profile that never surfaces, for example - everything after it is blocked and marked, because a later dive's residual loading would otherwise be built on a dive that never finished.

Advanced settings are shared by the whole chain rather than stored per dive. PDF and copied plans for dive 2 and later carry a header noting the surface interval, so it is clear the schedule assumes residual loading. Saved Plans (2.8) deliberately store only the dive you are editing, as a profile template you can load into any position in a chain.

Note: the working chain is not part of Backup & Restore. It is in-progress state rather than a setting, like the rest of your unsaved screen inputs - it survives closing the app and an update on the same device, but it does not travel to another one. Use Saved Plans for anything you want to keep.

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 in CCR mode: TMX 21/35 diluent at setpoint 1.3, the gas temperature toggle set to 0 °C, water density read from the planner, max recommended depth 46 m, and a colour-coded table with Depth, DIL ppO2, EAD, END and Density columns
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.2 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, accepted range 0.4 to 1.8 - wider than the planner's, because this screen is for checking a gas rather than planning a dive, so it has to cover a low descent setpoint and a deliberate what-if. A higher setpoint means more O₂ in the loop and correspondingly less inert gas, and it still raises density, because oxygen is denser than the helium-rich remainder it displaces: TMX 21/35 at 30 m reads 3.33 g/L at setpoint 0.4, 3.91 at 1.3, and 4.23 at 1.8. Hidden in OC mode.

Gas temperature - a [0 °C | 20 °C] toggle for the conditions the density column is expressed in. 0 °C is the convention Anthony & Mitchell's limits were published in; 20 °C is closer to gas warmed by the airway and is the frame MultiDeco offers. The colour rating and the max recommended depth both follow whichever you pick, so switching to 20 °C moves the limit deeper - the same gas is about 7 % less dense once warmed. The note under the table always names the frame in use.

Hypoxic diluent warning. If the mix you entered cannot be breathed at the surface - ppO₂ below 0.16 bar - the screen says so next to the inputs before you even look at the table. TMX 10/70, for instance, is flagged straight away at a surface ppO₂ of 0.10.

Water density - not an input on this screen. It is read from Deco Planner → Advanced settings so the two screens cannot disagree, and shown as a line below the inputs; tap it to jump straight to where it is set.

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 45 m on a rebreather with Air diluent (setpoint 1.3, EN13319 water, 0 °C) the loop density is 7.04 g/L - past the 6.2 g/L danger threshold. Switch to TMX 21/35 diluent at the same depth and setpoint, and density drops to 5.06 g/L - back under the 5.2 g/L recommended limit. Check here before you plan.

3.2 Gas Mixer (PP Blend & Top-Up)

Gas Mixer in PP Blend mode with target mix 21/35 to 200 bar, fill order He → O₂ → Air, and the step-by-step fill sequence stopping at 65.8 and 84.8 bar
Gas Mixer in PP Blend mode - real-gas fill steps 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).

Over-rich or over-filled cylinders. If the cylinder already holds too much O₂ or He for your target - or is filled above the final pressure - a straight partial-pressure fill is impossible. The planner then computes how far to vent first and returns a complete procedure with a leading Vent step followed by the normal fill sequence. Helium can only be removed by venting, so a trimix-to-nitrox change vents the cylinder fully. If venting alone still cannot reach the target (e.g. a target leaner in O₂ than what is already in the cylinder), the planner tells you instead of returning a dead end.

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.1/13 with a composition bar, and a note that the plan is real-gas at 20 °C
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.

Blending temperature (both tabs)

Gas is compressible, and how compressible depends on temperature - so the fill pressures depend on how warm the cylinder ends up. The Blending temperature setting (default 20 °C, °F in imperial) tells the planner what the filled cylinder will settle to, usually room temperature, and it fine-tunes every pressure in the recipe. Every plan repeats the practical consequence: filling warms the cylinder and it loses pressure as it cools, so fill slowly, let it cool, top up, and always analyse the final mix.

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. A currency field (free text) lets you label the total in your own currency. 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, 41 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.