Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Advanced multi-platform divelog based on Qt
C++ C XSLT Shell JavaScript HTML Other

Latest translations

Signed-off-by: Dirk Hohndel <>
latest commit 640c746a1f
@dirkhh dirkhh authored
Failed to load latest commit information.
.tx Add simple glossary
Documentation Documentation: update french translation of user-manual
ReleaseNotes Update README and ReleaseNotes
android-mobile Use a different package for the mobile app
android Open subsurface on attaching divecomputer
appdata Replace other references to
cmake/Modules cmake: allow looking for optional libraries
dives Add missing XML files for TestRenumber
icons Add icon for georeference in preferences
marbledata Add 1x1 transparent png to replace missing marble data
packaging MXE build script: more cleanups
printing_templates Printing: support in-place editing for templates
qt-mobile QML UI: Show log correctly
qt-models Deal with weird transifex issue involving leading space
qt-ui Fix font issue on Windows 10 in the weight widget
scripts Build script: make sure we find the cmake files for our libraries
tests Add test for more GPS coordinates
theme HTML Export: Ignore case when searching for tags
translations Latest translations
xslt CSV import: use the delta value instead of 1 sec
.clang-format Small tweaks to our whitespace handling
.gitattributes Ignore some files when archiving.
.gitignore Complement the CMakesList.txt with the latest file inclusions.
CMakeLists.txt Move the algorithm to divesite.cpp file
CodingStyle CodingStype: add explanation how to install the QtCreator settings
INSTALL Updates to the INSTALL file
README Update README and ReleaseNotes
Readme.testing Information on writing test cases
Readme.ubuntu Update Readme.ubuntu
SupportedDivecomputers.html Make SupportedDivecomputer HTML more compact
SupportedDivecomputers.txt Improve generation of list of supported dive computers
TODO.CCR Update todo list for CCR
android.cpp Wire up get_usb_fd to libusb_set_android_open_callback
checkcloudconnection.cpp Avoid potentially uninitialized member
checkcloudconnection.h Windows XP doesn't contain a valid CA for our cloud certificate
cochran.c Add explicit casts to silence compiler warnings
cochran.h Eliminate packed struct for Cochran
color.h CVS import UI: mark the column names in blue as well
configuredivecomputer.cpp Connect up custom serial in dc configuration
configuredivecomputer.h Lift dis- and connect out from config operations
configuredivecomputerthreads.cpp Avoid possible uninitialized memory read
configuredivecomputerthreads.h Remove the lastError from DeviceThreads
datatrak.c Avoid ignoring file read errors
datatrak.h Avoid leaking memory
deco.c VPM-B: Adjust Subsurface conservatism
deco.h Tissue saturation plot a la Sherwater Pretel
descriptor3.tsv Add structured file with list of supported dive computers
device.c Massive automated whitespace cleanup
device.h When saving only selected dives, only include referenced dive computers
devicedetails.cpp Enable the configuration of more OSTC3 settings
devicedetails.h Enable the configuration of more OSTC3 settings
display.h Save Bluetooth download mode settings
dive.c Take dive's temperature into account for min/max temp
dive.h dive.h: don't declare force_fixup_dive() in the header
divecomputer.cpp Fix divecomputer nickname handling
divecomputer.h Fix divecomputer nickname handling
divelist.c Mark divelist as changed even if imported dives got merged
divelist.h Make add_single_dive() grow the divelist allocation if necessary
divelogexportlogic.cpp HTML export: separate UI and logic code
divelogexportlogic.h HTML export: separate UI and logic code
divesite.c Make sure we don't create multiple dive sites with the same uuid
divesite.cpp Move the algorithm to divesite.cpp file
divesite.h Move the algorithm to divesite.cpp file
divesitehelpers.cpp Remove unneeded includes
divesitehelpers.h Geo taxonomy: download the taxonomy data from
equipment.c Round MOD of gas rather than truncate
exif.cpp Break picture handling code from C++ to C.
exif.h Break picture handling code from C++ to C.
export-html.cpp export-html needs to actually calculate the statistics
file.c Print paths to internal files in verbose mode
file.h Test case: reading zip and DLD parsing
gaspressures.c Prevent theoretical out of bounds access
gaspressures.h Some gas handling improvements
gettext.h Add comment for "below floor" event
gettextfromc.cpp Make the cache cache things
gettextfromc.h Explicitly include needed include file
git-access.c git-access.c: use <userpath>/cloudstorage/ for the cache
git-access.h Print paths to internal files in verbose mode
gpl-2.0.txt Add a copy of the GPL v2 to the project
helpers.h Save Bluetooth download mode settings
libdivecomputer.c libdivecomputer.c: fix warnings about unused variables
libdivecomputer.h Connect up serial_ftdi custom serial
linux.c 0 initialize strings
liquivision.c Make created dive site uuid deterministic
load-git.c Correctly handle the webservice userid in preferences
macos.c 0 initialize strings
main.cpp main.cpp: manage the default filename/directory on the heap
membuffer.c membuffer: add helper functions to return regular C strings
membuffer.h membuffer: add helper functions to return regular C strings
ostctools.c Whitespace cleanup
parse-xml.c Correctly handle the webservice userid in preferences
planner.c Revert "VPM-B restore deco state before calculating next gradient"
planner.h Leftovers from introduction of in_planner() helper function
pref.h Comment meaning of preference variables
prefs-macros.h Move initialization of preferences to helper function
printer.cpp Printing: replace usage of std::ceil()
printer.h Printing: use the same code for both statistics and divelist print
profile.c Fix plot entry creation
profile.h Add support for RBT reported sample value
qt-gui.cpp QML UI: Sort dives by date
qt-gui.h QML UI: implement a message area to show information to the user
qt-init.cpp Separate initializing Qt from initializing the UI
qthelper.cpp Correctly parse GPS coordinates with a ',' between lat and lon
qthelper.h Hash images upon loading divelog file rather than when loading image
qthelperfromc.h Print paths to internal files in verbose mode
qtserialbluetooth.cpp qtserialbluetooth: use QIODevice::Unbuffered io
satellite.svg Satellite icon diet
save-git.c Don't save unused, auto-create dive sites
save-html.c HTML export: need to work harder to find the pictures
save-html.h Move helper declarations into a better header file
save-xml.c Print paths to internal files in verbose mode
serial_ftdi.c Fix memory leaks in serial ftdi
sha1.c Another small tweak to whitespace tool
sha1.h Massive automated whitespace cleanup
statistics.c Better testing if the first gas is explicit
statistics.h Make gas use statistics be coherent and more complete
strndup.h Add strndup.h header so we can use this useful function
strtod.c Massive automated whitespace cleanup
subsurface-icon.svg Rename subsurface.svg to subsurface-icon.svg
subsurface-mobile-icon.svg Add different icon for mobile app
subsurface.desktop Add a trailing ';' to the Keywords in the subsurface.desktop file
subsurface.qrc Add icon for georeference in preferences
subsurfacestartup.c Avoid leaking memory
subsurfacestartup.h Correctly copy preferences
subsurfacesysinfo.cpp Get ready for OS X 10.11 El Capitan
subsurfacesysinfo.h Remove support for Qt4 (part 2)
taxonomy.c Geo taxonomy: correctly store / update the categories
taxonomy.h Geo taxonomy: correctly store / update the categories
templatelayout.cpp QML UI: Remove unneeded MobileDive class
templatelayout.h QML UI: Remove unneeded MobileDive class
terms Be more consistent in partial pressure naming
time.c Massive automated whitespace cleanup
uemis-downloader.c Avoid possible NULL pointer dereference
uemis.c Uemis downloader: don't try to download divespots that weren't set
uemis.h Uemis downloader: start downloading using the correct dive ID
units.h Location completer: give distance if known
version.c add and use a version.c / version.h pair
version.h add and use a version.c / version.h pair
webservice.h Put include guard to every header
windows.c windows.c: sanitize the backend for path retrieval
windowtitleupdate.cpp Re-fix silly typo
windowtitleupdate.h Code cleanup: implement window title update via signal
worldmap-options.h Gratuitous whitespace changes
worldmap-save.c Fix error on HTML worldmap exports.
worldmap-save.h Gratuitous whitespace changes
wreck.jpg Include images in profile


This is the README file for Subsurface 4.5

Please check the ReleaseNotes.txt for details about new features and
changes since Subsurface 4.4.2 (and earlier versions).

Subsurface can be found at

Our user forum is at
We also try to respond to questions in the dive software
forum at

Report bugs and issues at

License: GPLv2

You can get the sources to the latest development version from the git

git clone git:// .

You can also browse the sources via gitweb at the same site.

If you want the latest release (instead of the bleeding edge
development version) you can either get this via git or the release tar
ball. After cloning run the following command:

git checkout v4.5.0  (or whatever the last release is)

or download a tar ball from:

Detailed build instructions can be found in the INSTALL file.

Basic Usage:

Install and start from the desktop, or you can run it locally from the
build directory:

On Linux:

$ ./subsurface

On Mac:

$ open

Native builds on Windows are not really supported (the official Windows
installers are both cross-built on Linux).

You can give a data file as command line argument, or (once you have
set this up in the Preferences) Subsurface picks a default file for
you when started from the desktop or without an argument.

If you have a dive computer supported by libdivecomputer, you can just
select "Import from Divecomputer" from the "Import" menu, select which
dive computer you have (and where it is connected if you need to), and
hit "OK".

The latest list of supported dive computers can be found in the file

Much more detailed end user instructions can be found from inside
Subsurface by selecting Help (typically F1). When building from source
this is also available as Documentation/user-manual.html. The
documentation for the latest release is also available on-line


There is a mailing list for developers:
Go to
to subscribe.

If you want to contribute code, please either send signed-off patches or
a pull request with signed-off commits.  If you don't sign off on them,
we will not accept them. This means adding a line that says
"Signed-off-by: Name <email>" at the end of each commit, indicating that
you wrote the code and have the right to pass it on as an open source


Also, please write good git commit messages.  A good commit message
looks like this:

	Header line: explain the commit in one line (use the imperative)

	Body of commit message is a few lines of text, explaining things
	in more detail, possibly giving some background about the issue
	being fixed, etc etc.

	The body of the commit message can be several paragraphs, and
	please do proper word-wrap and keep columns shorter than about
	74 characters or so. That way "git log" will show things
	nicely even when it's indented.

	Make sure you explain your solution and why you're doing what you're
	doing, as opposed to describing what you're doing. Reviewers and your
	future self can read the patch, but might not understand why a
	particular solution was implemented.

	Reported-by: whoever-reported-it
	Signed-off-by: Your Name <>

where that header line really should be meaningful, and really should be
just one line.  That header line is what is shown by tools like gitk and
shortlog, and should summarize the change in one readable line of text,
independently of the longer explanation. Please use verbs in the
imperative in the commit message, as in "Fix bug that...", "Add
file/feature ...", or "Make Subsurface..."

A bit of Subsurface history:

In fall of 2011, when a forced lull in kernel development gave him an
opportunity to start on a new endeavor, Linus Torvalds decided to tackle
his frustration with the lack of decent divelog software on Linux.

Subsurface is the result of the work of him and a team of developers since
then. It now supports Linux, Windows and MacOS and allows data import from
a large number of dive computers and several existing divelog programs. It
provides advanced visualization of the key information provided by a
modern dive computer and allows the user to track a wide variety of data
about their diving.

In fall of 2012 Dirk Hohndel took over as maintainer of Subsurface.
Something went wrong with that request. Please try again.