import Link from "next/link"; import type { Metadata } from "next"; import { readLegalPageConfig } from "@/lib/api/config.server"; import { OperatorAnswer, OperatorBlock, } from "@/components/legal/operator-block"; import { BUILD_IDENTITY_PATH, PROJECT_OPERATOR, PROJECT_SOURCE_URL, } from "@/lib/operator"; import { Card, CardContent } from "@/components/ui/card"; import { PAGE_COLUMN } from "@/components/ui/map-hero"; export const metadata: Metadata = { title: "Terms of Service", description: "The terms that apply to this copy of OpenDiving: which parts speak for the operator who runs it, and which speak for the OpenDiving project.", }; // Two speakers on one page, and the heading is what tells them apart. Sections 7, // 9 and 10 speak for the OpenDiving project and name it in their headings; // everything else speaks for the operator of this copy. Bare "OpenDiving" is the // name of the software and never a party doing anything — collapsing the two back // into one voice would hand the project's AGPL liability shield to an operator who // never agreed to it. // // The two speakers are roles, not necessarily two different parties. The project // may run a copy itself, and on that copy it holds both roles: it speaks through // the operator's sections as well as its own, and is answerable as operator there // like anyone else. So nothing on this page says the project never operates // anything — the headings separate the roles, which is the only separation the // liability shield needs, and it holds whether one party or two are standing in // them. See "The terms page has two speakers" in DECISIONS.md. export default async function TermsPage() { // The operator block depends on the instance, and it adds a block rather than // rewording a section: nothing short of the API answering `true` earns it, so a // self-hosted copy - including one whose API is briefly down - renders these Terms // exactly as they have always read. The other thing that does is a clause naming // join links wherever registration is said to need an invitation, on the same rule, // so a copy that has set none up carries no word about them. So does the grant for // proposing to OpenDiving Commons, and every sentence it makes false, which are // reworded inline and on any other copy read as they always have. const { projectOperated, joinLinks, commonsPrimary } = await readLegalPageConfig(); return (
Last updated: November 2026
{BUILD_IDENTITY_PATH}
{" "}
reports a{" "}
commit
{" "}
beside its{" "}
version
, and the commit is what identifies the source, because images
are published on every change to the project’s main branch
as well as on a release and so share one version between them. A{" "}
commit
{" "}
reading{" "}
unknown
{" "}
means a build that did not come from the project’s own
publishing, and then the request above is the way to get the
source.
OpenDiving is open-source software for logging dives. Anyone can download it and run their own copy, and these Terms ship with the software, so they describe this copy — the one you are reading them on. By using it (“the Service”) you agree to them. If you do not, please do not use this copy.
Two roles appear on this page, and it keeps them apart because they do not owe you the same things:
Those are two roles rather than necessarily two parties, and one party can hold both. The OpenDiving project may run a copy of its own, and on such a copy it is the operator as well as the author — bound by everything these Terms say of the operator, and speaking through those sections in that role. What never merges is the roles themselves: the sections below keep them apart whoever is standing in them.
Every section below speaks for the operator of this copy unless its heading says otherwise, and “we” in those sections means the operator. Three sections say otherwise: 7, 9 and 10 speak for the OpenDiving project and name it in their headings. Section 5 is the operator’s apart from what it says about the OpenDiving project, which names the project where it does. Where the word OpenDiving stands alone anywhere on this page, it is the name of the software and not a party doing anything.
If you are the one running this copy, that phrase —{" "} the operator of this copy — is you, and it is written out wherever a sentence here turns on something only you can answer for. Searching the page for it is the quickest way to find what is yours to stand behind or to replace with your own; the rule above is what settles anything it misses.
{commonsPrimary ? "This copy of OpenDiving is a dive log that keeps what you enter to yourself, and the place where OpenDiving Commons, a public pool of dive sites, is edited. The software lets you:" : "This copy of OpenDiving is a private dive log. The software lets you:"}
What it does not do is worth stating, because a page like this one usually claims otherwise: there are no public profiles, no feeds, no forums,{" "} {commonsPrimary ? "nothing one diver can post for another" : "no comments"} , no public ratings and no photo sharing. The rating you give a dive is part of your own log. The people you record are private records of yours, not connections between accounts.{" "} {commonsPrimary ? "An account on this copy gives its holder no view of what you enter, apart from an administrator's, which reads what you propose for OpenDiving Commons." : "An account on this copy gives its holder no view of anything you enter."}{" "} This copy shows one person to another in{" "} {commonsPrimary ? "four" : "three"} cases only: an invitation, which is about your name rather than about anything you entered; a check-in link you make, which shows your check-in page to whoever holds it, account or not; {!commonsPrimary && "and "}a person you link to an account here, which shows you that account’s current username and puts its identifier in your own export {commonsPrimary && "; and a proposal for OpenDiving Commons, which shows what you proposed and your name to whoever reviews it, and publishes what is accepted, without your name"} . Section 5 says exactly what each is, and what follows from the rest.
Whether this copy costs anything, who may register for it, and how long it keeps running are decisions for the operator of this copy, not for the software. The software is free in the sense section 7’s licence means, which says nothing about what an operator charges.
Using this copy for anything beyond the pages you can read now needs an account. You agree to:
Where the operator of this copy has closed it to new accounts, registering also needs an invitation, and the address you register with must be the one that was invited, unless you came by a member’s invite link {joinLinks ? ( <> {" "} or by one of the join links the operator has published, either of which lets in whoever follows it > ) : ( <>, which lets in whoever follows it> )} . The exception is the very first account on a copy that has none: whoever signs in first is its operator, and needs no invitation to do so.
Important Safety Notice: OpenDiving is software for logging dives. It does not provide diving instruction, safety advice, or emergency services.
You acknowledge and agree that:
What you enter into this copy — dives, dive drafts, sites, trips, gear, courses, certifications, contacts, people, tags, your check-in details, notes, and the files you import —{" "} {commonsPrimary ? "is your responsibility, and stays yours unless you dedicate it to the public domain by proposing it for OpenDiving Commons." : "is yours, and you are responsible for it."}{" "} You agree not to use this copy to hold or send:
Three things this copy expects you to hold can be somebody else’s data, and holding any of them is inside the line above rather than an exception to it. A person is the plainest case: a buddy’s or an instructor’s name, and whatever else you choose to note, kept as your own record of who you dived with. An emergency contact is a name and a number kept so a dive shop can reach someone if you get into trouble. A contact is usually a business’s own listing — the number and address on its sign — but it can be a person, the friend whose flat you stayed in, kept as your own record of where you dived and slept. Each is a basis for keeping what you enter. Telling a person you have written them down here is yours to do, not this copy’s.
{commonsPrimary ? "Every right you have in what you enter stays yours, apart from what you dedicate by proposing it, as the paragraphs below say." : "You keep every right you have in what you enter."}{" "} Nothing here gives the OpenDiving project any rights in your content as the software’s author — writing a program grants no claim on what is entered into a copy of it, and where the project is not the one running this copy it receives no data from it and never sees what you log. Where the project is the one running it,{" "} {commonsPrimary ? "it holds what the paragraphs below grant the operator, may use what has been dedicated to the public domain as anyone may, and holds nothing beyond that." : "it holds what the next paragraph grants the operator and nothing beyond that."}
{commonsPrimary ? "Proposals aside, you grant the operator of this copy no more than what is technically needed to run the Service for you" : "You grant the operator of this copy only the permission technically needed to run the Service for you"}{" "} — to store your entries, show them back to you, and include them in exports you ask for.{" "} {commonsPrimary ? "Nothing you enter is published, shared with other users, or shown to anyone else by this software, except through a check-in link you make or a proposal you send for OpenDiving Commons." : "Your entries are not published, shared with other users, or shown to anyone else by this software, except through a check-in link you make."}{" "} Printing your check-in summary and handing it to a dive shop is you showing your own entries to someone, not this copy showing them, and the permission above is unchanged by it.{" "} {commonsPrimary ? "The next four paragraphs are the four things" : "The next three paragraphs are the three things"}{" "} this copy does show one person to another: an invitation, which is not an entry; a check-in link, which is;{" "} {!commonsPrimary && "and "}a person linked to an account, which shows you something of theirs rather than anything of yours {commonsPrimary && "; and a proposal, which is an entry, and the one thing here that can end up public"} .
Where this copy is invite-only and you invite somebody to it, you grant the operator the further permission that act needs, and only that: to tell the address you invited that you{" "} invited them, naming you, and to tell you whether that address went on to register here; and, where you make an invite link, to show your name to whoever opens it, and to show you the name on the account of anyone who creates one through it. Nothing you have logged is involved — no dive, site, trip, gear item, course, certification, contact, person or tag — and nobody you have not invited learns anything either way, except that whoever holds your invite link, however it reached them, sees your name. And where you create your account through a member’s invite link, you grant the operator the permission that needs, and only that: to show that member the name on your account, as it is and as you change it, for as long as both accounts exist — never your address, and nothing you log. The privacy policy’s section 4.8 sets out the same in its own register.
Where you make a check-in link, you grant the operator the further permission that act needs, and only that: to show your check-in page — the details, figures and card fronts it prints — to whoever holds the link, until it expires a day after you made it or you revoke it or make another. That is this copy showing your entries to someone, at your request, and nothing else you have logged is involved. The privacy policy’s section 4.9 sets out the same in its own register.
Where you link a person you recorded to an account on this copy — by typing its username, or by importing a file that names it — you grant the operator the further permission that act needs, and only that: to tell you whether an account with that username exists here, to show you its current username beside your person for as long as the link stands, and to write that account’s identifier, which also encodes when the account was created, into the exports you ask for. Nothing you have logged is shown to that account, and it is told nothing either way. The same holds the other way round: anyone here who types your username can link a person to your account, and learns that it exists, its current username and its identifier, and nothing else. The privacy policy’s section 4.10 sets out the same in its own register.
{commonsPrimary && (Where you propose a dive site of yours, or a change to a Commons site, for OpenDiving Commons, you grant the operator the further permission that act needs, and only that: to show whoever reviews it what you proposed, your message, the name on your account and how many of your proposals have been accepted and declined; to correct it before accepting it; to keep the proposal, tied to your account, until your account goes; and to publish what is accepted, in the pool and in the public copies of it. The words you tick go further than a permission. In them you say that what you propose is from your own diving and is not copied from another database, app or publication, and you dedicate it to the public domain under{" "} CC0 1.0 , which gives up your rights in it, for everyone, as far as the law allows. What is accepted is public, never says who proposed it, and stays if you delete your account; a change accepted into a record from another source leaves that record under its source’s licence. What is declined or withdrawn publishes nothing, and a decline always comes with a reason. Anyone can report a Commons record to the operator of this copy, by the way section 13 gives, and a report is answered by changing the record; a record cannot yet be removed. The privacy policy’s section headed{" "} Proposing for OpenDiving Commons sets out the same in its own register.
)}That permission is deliberately no wider than what running the Service takes, and the OpenDiving project holds itself to keeping it that way: if a version of the software ever adds a way to show what you entered to someone else, that feature arrives with a permission of its own written here and a section of its own on the privacy page, rather than leaning on this one.{" "} {commonsPrimary ? "The invitation, check-in link, linking and proposal grants above are that rule being kept, not exceptions to it." : "The invitation, check-in link and linking grants above are that rule being kept, not exceptions to it."}
What this copy collects, what it keeps in your browser, how long it keeps any of it, and who is answerable for it are set out in the{" "} Privacy Policy , which describes this copy the same way these Terms do.
Two things worth knowing without reading it:{" "} {commonsPrimary ? "exporting what you have entered, your proposals for OpenDiving Commons aside," : "exporting everything you have entered"}{" "} and deleting your account are both buttons in Settings, and neither needs anyone’s permission.
This section is about the software rather than about this copy’s operation, and it speaks for the OpenDiving project. OpenDiving is published under the GNU Affero General Public License, version 3. Under it anyone may run, study, copy, modify and redistribute the software, on the conditions the licence sets out — chiefly that a derived version carries the same licence and stays source-available.
The licence also gives you something as someone merely using a copy over a network: if the operator of this copy has modified OpenDiving, section 13 of the AGPLv3 requires them to offer you the source of their modified version. That offer is the operator’s to make rather than the author’s — including where the project runs this copy, and so owes it as operator. The project publishes its own source publicly, and that is not necessarily what is running here. {projectOperated && ( <> {" "} On this copy the offer is made, under{" "} Who Runs This Copy at the top of this page, along with what identifies the build running here. The public repositories this section speaks of are named there too. That offer still leads with the request rather than the link, because what section 13 owes you is the source of the version running here, which a repository on its own does not pin and the commit named there does. > )}
The licence text ships with the software and is the authority on all of this. Nothing in these Terms adds to it or takes anything away from it.
Whether this copy is available, and for how long, is the operator of this copy’s to decide. They may modify or discontinue features, take it down for maintenance, or stop running it altogether. Nothing in the software guarantees uptime, and the OpenDiving project promises none of it as the software’s author: where it does not run this copy it could not keep this one up if it wanted to, and where it does, the promise would be the operator’s to make and it has made none.
These Terms are part of the software, so they change when the software changes and ship in the same release. There is no mechanism here that emails anyone about a change to them, and this page is not going to promise one it does not have. What exists instead is the software’s public history, where every earlier version of this page can be read; which version you are reading depends on which release of OpenDiving this copy is running.
This copy of OpenDiving is provided as-is by its operator, who is responsible for its operation and for the data it holds. The operator may replace this paragraph with its own terms. {projectOperated && ( <> {" "} This copy’s operator has not replaced it, and has said under Who Runs This Copy what it promises about availability and what happens to your data if this beta ends. > )}
This section speaks for the OpenDiving project, not for the operator of this copy. To the maximum extent permitted by law, the OpenDiving project, its contributors, and its copyright holders shall not be liable to you for:
This limitation is agreed for the benefit of the OpenDiving project and its contributors. The contributors are not parties to these Terms and rely on this section as third parties; so does the project itself, wherever it is not the one running this copy. Where it is, it is a party in the operator’s role, and this section still limits only what it owes you as the software’s author. It adds to, and does not narrow, sections 15 to 17 of the AGPLv3.
The operator of this copy speaks in a different role and says nothing here, and that holds even where the project is the one running this copy: what is limited above is the author’s liability, never an operator’s. Their position is the last paragraph of section 8, and it is theirs to replace.
You agree to indemnify and hold harmless the OpenDiving project and its contributors — not the operator of this copy — from any claims, damages, or expenses arising from your use of this copy of OpenDiving or your violation of these Terms.
This section does not cover the operator of this copy. They are not indemnified by it, and it reaches the project no further where the project is the one running this copy: what is indemnified is the writing of the software, never the running of a copy of it. An operator who wants an indemnity has to ask for one in terms of their own.
The operator of this copy may suspend or close your account for a breach of these Terms, and may stop running this copy altogether. You can delete your own account at any time in Settings; the Privacy Policy says what happens to your data when you do.
These Terms shall be governed by and construed in accordance with the laws of the jurisdiction where the operator of this copy primarily operates the Service, without regard to conflict of law provisions. {projectOperated && ( <> {" "} On this copy that is {PROJECT_OPERATOR.jurisdiction}, named with the operator under Who Runs This Copy at the top of this page. > )}
For anything to do with this copy — your account, your data, {commonsPrimary && "a report about a Commons record, "} what these Terms mean for you, or the Service being down — the person to ask is whoever runs this copy of OpenDiving. The{" "} support page {" "} is how this copy offers to reach them.
For a defect in the software itself — a bug, or a sentence on a page like this one that the software does not live up to — the OpenDiving project is who to tell, in its public source repository. As the software’s author the project cannot answer for how a copy it does not run is run: it has no access to that copy and holds none of the data in it. Where the project is this copy’s operator too, questions about how this copy is run still go the way the paragraph above says, not to the repository.
There is deliberately no project address printed here.{" "} {projectOperated && ( <> None, that is, for the project as the software’s author: the address under Who Runs This Copy{" "} belongs to this copy’s operator, which is the role that can act on what follows.{" "} > )} A question about your own account belongs to whoever runs this copy, and the support page above is how to reach them — on a copy the project runs itself, that page reaches the project in the role that can act. Sent to the author instead, such a question reaches people who cannot. How quickly the operator of this copy answers, and whether they do, is theirs to say rather than this page’s.
These Terms are effective as of November 2026 and apply to this copy of OpenDiving.
Back to OpenDiving