# Double tilda in dune file

**URL:** <https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306>\
**Category:** Ecosystem\
**Created:** [August 16, 2021, 1:15pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306 "2021-08-16T13:15:42Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![idkjs](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/idkjs/32/675_2.png) [@idkjs](https://discuss.ocaml.org/u/idkjs)\
**Post date:** [August 16, 2021, 1:15pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/1 "2021-08-16T13:15:42Z")

</div>

What does a double tilda mean in a dune file?

example

```auto
(lang dune 2.8)
(name decathlon-stock)
(generate_opam_files true)

(package
 (name decathlon-stock)
 (synopsis "Check Decathlon online stock availability")
 (maintainers "Thibault Suzanne <thi.suzanne@gmail.com>")
 (authors "Thibault Suzanne <thi.suzanne@gmail.com>")
 (homepage "https://github.com/thizanne/decathlon-stock/")
 (bug_reports "https://github.com/thizanne/decathlon-stock/issues")
 (depends
  (core_kernel (>= ~~))
  (cmdliner (>= ~~))
  (async_smtp (>= ~~))
  (cohttp-lwt-unix (>= ~~))
  (cohttp-lwt (>= ~~))
  (lambdasoup (>= ~~))
  (fmt (>= ~~))
  (ppx_let (>= ~~))
  (yojson (>= ~~))
  )
 )

```

[source](https://github.com/thizanne/decathlon-stock/blob/22df02b1cb5b905de819f9ea618a1efebcb9a50a/dune-project#L1-L23)

Thank you.

---

<div class="post-metadata">

**Author:** ![CraigFe](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/craigfe/32/1989_2.png) [@CraigFe](https://discuss.ocaml.org/u/CraigFe)\
**Post date:** [August 16, 2021, 1:35pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/2 "2021-08-16T13:35:15Z")

</div>

As far as I know, the double tilde has no special meaning. Dune interprets it as a version “number” the same as any other & emits an `.opam` file to that effect.

Opam adopts Debian’s [versioning policy](https://www.debian.org/doc/debian-policy/ch-controlfields.html#version), which uses ASCII-like lexical comparison with the modification that tilde characters sort _before_ all other characters, including the empty string. (This has the convenience of making e.g. `1.0.0~alpha` sort before `1.0.0`.) In this light, the version number “`~~`” is just a particularly early version number – earlier even than `""`.

It was likely picked to mean “_TODO: set lower bounds later_”, but I can’t speak for the author 🙂

---

<div class="post-metadata">

**Author:** ![thizanne](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/thizanne/32/764_2.png) [@thizanne](https://discuss.ocaml.org/u/thizanne)\
**Post date:** [August 16, 2021, 1:39pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/3 "2021-08-16T13:39:14Z")

</div>

That’s the correct answer. As far as I know dune forces me to be explicit about dependency versions, then when I’m too lazy to check them I’ll just write a constraint that is basically always fulfilled.

---

<div class="post-metadata">

**Author:** ![idkjs](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/idkjs/32/675_2.png) [@idkjs](https://discuss.ocaml.org/u/idkjs)\
**Post date:** [August 16, 2021, 1:42pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/4 "2021-08-16T13:42:09Z")

</div>

Thank you @CraigFe @thizanne

So basically same as not have any dependency specified. Relying on the file doesnt add any information about dependency versions. Is that correct?

---

<div class="post-metadata">

**Author:** ![thizanne](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/thizanne/32/764_2.png) [@thizanne](https://discuss.ocaml.org/u/thizanne)\
**Post date:** [August 16, 2021, 1:46pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/5 "2021-08-16T13:46:30Z")

</div>

That’s correct, these lines don’t add any dep version information.

---

<div class="post-metadata">

**Author:** ![emillon](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/emillon/32/1206_2.png) [@emillon](https://discuss.ocaml.org/u/emillon)\
**Post date:** [August 31, 2021, 2:00pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/6 "2021-08-31T14:00:54Z")

</div>

> [@thizanne](#):
>
> As far as I know dune forces me to be explicit about dependency versions

You can omit dependency versions in `dune-project`, for example the following is accepted:

```auto
 (depends
  (a (>= va))
  b
  (c (>= vc))
  )

```

and it will emit:

```auto
depends: [
  "a" { >= va }
  "b"
  "c" { >= vc }
]

```

---

<div class="post-metadata">

**Author:** ![thizanne](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/thizanne/32/764_2.png) [@thizanne](https://discuss.ocaml.org/u/thizanne)\
**Post date:** [August 31, 2021, 3:23pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/7 "2021-08-31T15:23:13Z")

</div>

Τhanks. I guess I didn’t try that syntax.

---

<div class="post-metadata">

**Author:** ![idkjs](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/idkjs/32/675_2.png) [@idkjs](https://discuss.ocaml.org/u/idkjs)\
**Post date:** [September 2, 2021, 1:01pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/8 "2021-09-02T13:01:24Z")

</div>

@emillon what does `va` and `vc` mean here?

---

<div class="post-metadata">

**Author:** ![emillon](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/emillon/32/1206_2.png) [@emillon](https://discuss.ocaml.org/u/emillon)\
**Post date:** [September 2, 2021, 1:14pm UTC](https://discuss.ocaml.org/t/double-tilda-in-dune-file/8306/9 "2021-09-02T13:14:57Z")

</div>

Those are placeholders for version numbers. A more realistic example would be:

```auto
 (depends
  (lwt (>= 3.2.1))
  base
  (ocaml (>= 4.08))
  )

```
