package alcotest

  1. Overview
  2. Docs
Alcotest is a lightweight and colourful test framework

Install

Dune Dependency

Authors

Maintainers

Sources

alcotest-1.9.0.tbz
sha256=e2387136ca854df2b4152139dd4d4b3953a646e804948073dedfe0a232f08a15
sha512=ba38fe4a9061b001d274e5d41fb06c10c84120570fc00dc57dc5a06ba05176c2413295680d839f465ba91469ea99d7e172a324e26f005d6e8c4d98fca7657241

Description

Alcotest exposes simple interface to perform unit tests. It exposes a simple TESTABLE module type, a check function to assert test predicates and a run function to perform a list of unit -> unit test callbacks.

Alcotest provides a quiet and colorful output where only faulty runs are fully displayed at the end of the run (with the full logs ready to inspect), with a simple (yet expressive) query language to select the tests to run.

Published: 18 Mar 2025

README

README.md

A lightweight and colourful test framework.


Alcotest exposes a simple interface to perform unit tests. It exposes a simple TESTABLE module type, a check function to assert test predicates and a run function to perform a list of unit -> unit test callbacks.

Alcotest provides a quiet and colorful output where only faulty runs are fully displayed at the end of the run (with the full logs ready to inspect), with a simple (yet expressive) query language to select the tests to run. See the manpage for details.

The API documentation can be found here. For information on contributing to Alcotest, see CONTRIBUTING.md.


Examples

A simple example (taken from examples/simple.ml):

Generated by the following test suite specification:

(* Build with `ocamlbuild -pkg alcotest simple.byte` *)

(* A module with functions to test *)
module To_test = struct
  let lowercase = String.lowercase_ascii
  let capitalize = String.capitalize_ascii
  let str_concat = String.concat ""
  let list_concat = List.append
end

(* The tests *)
let test_lowercase () =
  Alcotest.(check string) "same string" "hello!" (To_test.lowercase "hELLO!")

let test_capitalize () =
  Alcotest.(check string) "same string" "World." (To_test.capitalize "world.")

let test_str_concat () =
  Alcotest.(check string) "same string" "foobar" (To_test.str_concat ["foo"; "bar"])

let test_list_concat () =
  Alcotest.(check (list int)) "same lists" [1; 2; 3] (To_test.list_concat [1] [2; 3])

(* Run it *)
let () =
  let open Alcotest in
  run "Utils" [
      "string-case", [
          test_case "Lower case"     `Quick test_lowercase;
          test_case "Capitalization" `Quick test_capitalize;
        ];
      "string-concat", [ test_case "String mashing" `Quick test_str_concat  ];
      "list-concat",   [ test_case "List mashing"   `Slow  test_list_concat ];
    ]

The result is a self-contained binary which displays the test results. Use dune exec examples/simple.exe -- --help to see the runtime options.

Here's an example of a of failing test suite:

By default, only the first failing test log is printed to the console (and all test logs are captured on disk). Pass --show-errors to print all error messages.

Using Alcotest with opam and Dune

Add (alcotest :with-test) to the depends stanza of your dune-project file, or "alcotest" {with-test} to your opam file. Use the with-test package variable to declare your tests opam dependencies. Call opam to install them:

$ opam install --deps-only --with-test .

You can then declare your test and link with Alcotest: (test (libraries alcotest …) …), and run your tests:

$ dune runtest

Selecting tests to execute

You can filter which tests to run by supplying a regular expression matching the names of the tests to execute, or by passing a regular expression and a comma-separated list of test numbers (or ranges of test numbers, e.g. 2,4..9):

$ ./simple.native test '.*concat*'
Testing Utils.
[SKIP]     string-case            0   Lower case.
[SKIP]     string-case            1   Capitalization.
[OK]       string-concat          0   String mashing.
[OK]       list-concat            0   List mashing.
The full test results are available in `_build/_tests`.
Test Successful in 0.000s. 2 tests run.

$ ./simple.native test 'string-case' '1..3'
Testing Utils.
[SKIP]     string-case            0   Lower case.
[OK]       string-case            1   Capitalization.
[SKIP]     string-concat          0   String mashing.
[SKIP]     list-concat            0   List mashing.
The full test results are available in `_build/_tests`.
Test Successful in 0.000s. 1 test run.

Note that you cannot filter by test case name (i.e. Lower case or Capitalization), you must filter by test name & number instead.

See the examples directory for more examples.

Quick and Slow tests

In general you should use `Quick tests: tests that are ran on any invocations of the test suite. You should only use `Slow tests for stress tests that are ran only on occasion (typically before a release or after a major change). These slow tests can be suppressed by passing the -q flag on the command line, e.g.:

$ ./test.exe -q # run only the quick tests
$ ./test.exe    # run quick and slow tests

Passing custom options to the tests

In most cases, the base tests are unit -> unit functions. However, it is also possible to pass an extra option to all the test functions by using 'a -> unit, where 'a is the type of the extra parameter.

In order to do this, you need to specify how this extra parameter is read on the command-line, by providing a Cmdliner term for command-line arguments which explains how to parse and serialize values of type 'a (note: do not use positional arguments, only optional arguments are supported).

For instance:

let test_nice i = Alcotest.(check int) "Is it a nice integer?" i 42

let int =
  let doc = "What is your preferred number?" in
  Cmdliner.Arg.(required & opt (some int) None & info ["n"] ~doc ~docv:"NUM")

let () =
  Alcotest.run_with_args "foo" int [
    "all", ["nice", `Quick, test_nice]
  ]

Will generate test.exe such that:

$ test.exe test
test.exe: required option -n is missing

$ test.exe test -n 42
Testing foo.
[OK]                all          0   int.

Lwt

Alcotest provides an Alcotest_lwt module that you could use to wrap Lwt test cases. The basic idea is that instead of providing a test function in the form unit -> unit, you provide one with the type unit -> unit Lwt.t and alcotest-lwt calls Lwt_main.run for you.

However, there are a couple of extra features:

  • If an async exception occurs, it will cancel your test case for you and fail it (rather than exiting the process).

  • You get given a switch, which will be turned off when the test case finishes (or fails). You can use that to free up any resources.

For instance:

let free () = print_endline "freeing all resources"; Lwt.return ()

let test_lwt switch () =
  Lwt_switch.add_hook (Some switch) free;
  Lwt.async (fun () -> failwith "All is broken");
  Lwt_unix.sleep 10.

let () =
  Lwt_main.run @@ Alcotest_lwt.run "foo" [
    "all", [
      Alcotest_lwt.test_case "one" `Quick test_lwt
    ]
  ]

Will generate:

$ test.exe
Testing foo.
[ERROR]             all          0   one.
-- all.000 [one.] Failed --
in _build/_tests/all.000.output:
freeing all resources
[failure] All is broken

Comparison with other testing frameworks

The README is pretty clear about that:

Alcotest is the only testing framework using colors!

More seriously, Alcotest is similar to ounit but it fixes a few of the problems found in that library:

  • Alcotest has a nicer output, it is easier to see what failed and what succeeded and to read the log outputs of the failed tests;

  • Alcotest uses combinators to define pretty-printers and comparators between the things to test.

Other nice tools doing different kind of testing also exist:

  • qcheck does random generation and property testing (e.g. Quick Check);

  • crowbar and bun are similar to qcheck, but use compiler-directed randomness, i.e. they take advantage of the AFL support the OCaml compiler;

  • ppx_inline_tests allows to write tests in the same file as your source-code; they will be run only in a special mode of compilation.

Dependencies (9)

  1. ocaml-syntax-shims
  2. uutf >= "1.0.1"
  3. stdlib-shims
  4. re >= "1.7.2"
  5. cmdliner >= "1.2.0"
  6. astring
  7. fmt >= "0.8.7"
  8. ocaml >= "4.08"
  9. dune >= "3.0"

Dev Dependencies (1)

  1. odoc with-doc

  1. ahrocksdb
  2. albatross >= "1.5.4"
  3. alcotest-async >= "1.9.0"
  4. alcotest-js
  5. alcotest-lwt
  6. alcotest-mirage
  7. alg_structs_qcheck
  8. algaeff
  9. ambient-context
  10. ambient-context-eio
  11. ambient-context-lwt
  12. angstrom >= "0.7.0"
  13. ansi >= "0.6.0"
  14. anycache >= "0.7.4"
  15. anycache-async
  16. anycache-lwt
  17. archetype >= "1.4.2"
  18. archi
  19. arp
  20. arrakis < "1.1.0"
  21. art
  22. asai
  23. asak >= "0.2"
  24. asli >= "0.2.0"
  25. asn1-combinators >= "0.2.5"
  26. atd >= "2.3.3"
  27. atdgen >= "2.10.0"
  28. atdpy
  29. atdts
  30. backoff
  31. base32
  32. base64 >= "2.1.2" & < "3.2.0" | >= "3.4.0"
  33. bastet
  34. bastet_lwt
  35. bech32
  36. bechamel >= "0.5.0"
  37. bigarray-overlap
  38. bigstringaf
  39. bitlib
  40. blake2
  41. bloomf
  42. bls12-381 < "0.4.1" | >= "3.0.0" & < "18.0"
  43. bls12-381-hash
  44. bls12-381-js >= "0.4.2"
  45. bls12-381-js-gen >= "0.4.2"
  46. bls12-381-legacy
  47. bls12-381-signature
  48. bls12-381-unix
  49. blurhash
  50. brisk-reconciler
  51. builder-web
  52. bytebuffer
  53. ca-certs
  54. ca-certs-nss
  55. cachet
  56. cachet-lwt
  57. cachet-solo5
  58. cactus
  59. caldav
  60. calendar >= "3.0.0"
  61. callipyge
  62. camlix
  63. camlkit
  64. camlkit-base
  65. capnp-rpc
  66. capnp-rpc-unix
  67. caqti >= "1.7.0"
  68. caqti-async >= "1.7.0"
  69. caqti-driver-mariadb >= "1.7.0"
  70. caqti-driver-postgresql >= "1.7.0"
  71. caqti-driver-sqlite3 >= "1.7.0"
  72. caqti-dynload >= "2.0.1"
  73. caqti-eio
  74. caqti-lwt >= "1.7.0"
  75. caqti-miou
  76. carray
  77. carton < "1.0.0"
  78. carton-git
  79. carton-lwt >= "0.4.3" & < "1.0.0"
  80. catala >= "0.6.0"
  81. cborl
  82. cf-lwt
  83. chacha
  84. chamelon
  85. chamelon-unix
  86. charrua-client
  87. charrua-server
  88. checked_oint
  89. checkseum >= "0.0.3"
  90. cid
  91. clarity-lang
  92. class_group_vdf
  93. cohttp
  94. cohttp-curl-async
  95. cohttp-curl-lwt
  96. cohttp-eio >= "6.0.0~beta2"
  97. colombe >= "0.2.0"
  98. color
  99. commons
  100. conan
  101. conan-cli
  102. conan-database
  103. conan-lwt
  104. conan-unix
  105. conex < "0.10.0"
  106. conex-mirage-crypto
  107. conformist
  108. cookie
  109. corosync
  110. cow >= "2.2.0"
  111. css
  112. css-parser
  113. cstruct
  114. cstruct-sexp
  115. ctypes-zarith
  116. cuid
  117. curly
  118. current
  119. current-albatross-deployer
  120. current_git >= "0.7.1"
  121. current_incr
  122. data-encoding
  123. dates_calc
  124. dbase4
  125. decimal >= "0.3.0"
  126. decompress
  127. depyt
  128. digestif >= "0.9.0"
  129. dirsp-exchange-kbb2017
  130. dirsp-proscript-mirage
  131. dirsp-ps2ocaml
  132. dispatch >= "0.4.1"
  133. dkim
  134. dkim-bin
  135. dkim-mirage
  136. dkml-dune-dsl-show
  137. dkml-install
  138. dkml-install-installer
  139. dkml-install-runner
  140. dkml-package-console
  141. dns >= "4.4.1"
  142. dns-cli
  143. dns-client >= "4.6.3"
  144. dns-forward-lwt-unix
  145. dns-resolver
  146. dns-server
  147. dns-tsig
  148. dnssd
  149. dnssec
  150. docfd >= "2.2.0"
  151. dockerfile >= "8.2.7"
  152. domain-local-await >= "0.2.1"
  153. domain-local-timeout
  154. domain-name
  155. dream
  156. dream-htmx
  157. dream-pure
  158. dscheck >= "0.1.1"
  159. duff
  160. dune-deps >= "1.4.0"
  161. dune-release >= "1.0.0"
  162. duration
  163. echo
  164. eio < "0.12"
  165. eio_linux
  166. eio_windows
  167. emile
  168. encore
  169. eqaf >= "0.5"
  170. equinoxe
  171. equinoxe-cohttp
  172. equinoxe-hlc
  173. ezgzip
  174. ezjsonm
  175. ezjsonm-lwt
  176. FPauth
  177. FPauth-core
  178. FPauth-responses
  179. FPauth-strategies
  180. faraday != "0.2.0"
  181. farfadet
  182. fat-filesystem
  183. ff
  184. ff-pbt
  185. flex-array
  186. fsevents-lwt
  187. functoria
  188. fungi
  189. geojson
  190. geoml >= "0.1.1"
  191. git
  192. git-cohttp
  193. git-cohttp-unix
  194. git-kv != "0.1.3"
  195. git-mirage
  196. git-net
  197. git-split
  198. git-unix
  199. gitlab-unix
  200. glicko2
  201. gmap
  202. gobba
  203. gpt
  204. graphql
  205. graphql-async
  206. graphql-cohttp >= "0.13.0"
  207. graphql-lwt
  208. graphql_parser != "0.11.0"
  209. graphql_ppx
  210. h1
  211. h1_parser
  212. h2
  213. hacl
  214. hacl-star >= "0.6.0"
  215. hacl_func
  216. hacl_x25519
  217. highlexer
  218. hkdf
  219. hockmd
  220. html_of_jsx
  221. http
  222. http-multipart-formdata < "2.0.0"
  223. httpaf >= "0.2.0"
  224. httpcats
  225. httpun
  226. httpun-ws
  227. hugin
  228. hvsock
  229. icalendar
  230. imagelib
  231. index
  232. inferno >= "20220603"
  233. influxdb-async
  234. influxdb-lwt
  235. inquire < "0.2.0"
  236. interval-map
  237. iomux
  238. irmin
  239. irmin-bench
  240. irmin-chunk
  241. irmin-cli
  242. irmin-containers
  243. irmin-fs
  244. irmin-git
  245. irmin-graphql
  246. irmin-pack
  247. irmin-pack-tools
  248. irmin-test != "3.6.1"
  249. irmin-tezos
  250. irmin-unix
  251. irmin-watcher
  252. jekyll-format
  253. jose
  254. json-data-encoding >= "0.9"
  255. json_decoder
  256. jsonxt
  257. junit_alcotest >= "2.2.0"
  258. jwto
  259. kaun
  260. kcas >= "0.6.0"
  261. kcas_data >= "0.6.0"
  262. kdf
  263. ke >= "0.2"
  264. kkmarkdown
  265. kmt
  266. lambda-runtime
  267. lambda_streams
  268. lambda_streams_async
  269. lambdapi
  270. ledgerwallet-tezos >= "0.2.1" & < "0.4.0"
  271. letters
  272. lmdb >= "1.0"
  273. lockfree >= "0.3.1"
  274. logical
  275. logtk >= "1.6"
  276. lp
  277. lp-glpk
  278. lp-glpk-js < "0.5.0"
  279. lp-gurobi < "0.5.0"
  280. lru
  281. lt-code
  282. luv
  283. mazeppa
  284. mbr-format
  285. mdx >= "1.6.0"
  286. mec
  287. mechaml >= "1.2.1"
  288. merlin = "4.17.1-501"
  289. merlin-lib >= "4.17.1-501"
  290. metrics
  291. middleware
  292. mimic
  293. minicaml = "0.3.1" | >= "0.4"
  294. mirage >= "4.0.0"
  295. mirage-block-partition
  296. mirage-block-ramdisk
  297. mirage-channel >= "4.0.1"
  298. mirage-crypto-ec
  299. mirage-flow-unix
  300. mirage-kv >= "2.0.0"
  301. mirage-kv-unix >= "3.0.0"
  302. mirage-logs
  303. mirage-nat
  304. mirage-net-unix
  305. mirage-runtime < "4.7.0"
  306. mirage-tc
  307. mjson
  308. mmdb < "0.3.0"
  309. mnd
  310. mqtt
  311. mrmime >= "0.2.0"
  312. msgpck >= "1.6"
  313. mssql >= "2.0.3"
  314. multibase
  315. multicore-magic
  316. multihash
  317. multihash-digestif
  318. multipart-form-data
  319. multipart_form
  320. multipart_form-eio
  321. multipart_form-lwt
  322. named-pipe
  323. nanoid
  324. nbd >= "4.0.3"
  325. nbd-tool
  326. nloge
  327. nocoiner
  328. non_empty_list
  329. nx
  330. nx-datasets
  331. nx-text
  332. OCADml >= "0.6.0"
  333. obatcher
  334. ocaml-index < "5.4.1-503"
  335. ocaml-r >= "0.4.0"
  336. ocaml-version >= "3.5.0"
  337. ocamlformat >= "0.13.0" & < "0.25.1"
  338. ocamlformat-lib
  339. ocamlformat-mlx-lib
  340. ocamlformat-rpc < "removed"
  341. ocamline
  342. ocluster
  343. octez-bls12-381-hash
  344. octez-bls12-381-signature
  345. octez-libs
  346. octez-mec
  347. odoc < "2.1.1"
  348. ohex
  349. oidc
  350. opam-0install
  351. opam-0install-cudf >= "0.5.0"
  352. opam-compiler
  353. opam-file-format >= "2.1.1"
  354. opentelemetry >= "0.6"
  355. opentelemetry-client-cohttp-lwt >= "0.6"
  356. opentelemetry-client-ocurl >= "0.6"
  357. opentelemetry-cohttp-lwt >= "0.6"
  358. opentelemetry-lwt >= "0.6"
  359. opium
  360. opium-graphql
  361. opium-testing
  362. opium_kernel
  363. orewa
  364. orgeat
  365. ortac-core
  366. ortac-wrapper
  367. osnap < "0.3.0"
  368. osx-acl
  369. osx-attr
  370. osx-cf
  371. osx-fsevents
  372. osx-membership
  373. osx-mount
  374. osx-xattr
  375. otoggl
  376. owl >= "0.7.0" & != "0.9.0" & != "1.0.0"
  377. owl-base < "0.5.0"
  378. owl-ode >= "0.1.0" & != "0.2.0"
  379. owl-symbolic
  380. par_incr
  381. passmaker
  382. patch
  383. pbkdf
  384. pecu >= "0.2"
  385. pf-qubes
  386. pg_query >= "0.9.6"
  387. pgx >= "1.0"
  388. pgx_unix >= "1.0"
  389. pgx_value_core
  390. pgx_value_ptime
  391. phylogenetics
  392. piaf
  393. picos < "0.5.0"
  394. picos_meta
  395. piece_rope
  396. plebeia >= "2.0.0"
  397. polyglot
  398. polynomial
  399. ppx_blob >= "0.3.0"
  400. ppx_catch
  401. ppx_deriving_cmdliner
  402. ppx_deriving_ezjsonm
  403. ppx_deriving_qcheck
  404. ppx_deriving_rpc
  405. ppx_deriving_yaml
  406. ppx_inline_alcotest
  407. ppx_map
  408. ppx_marshal
  409. ppx_mica
  410. ppx_parser
  411. ppx_protocol_conv >= "5.0.0"
  412. ppx_protocol_conv_json >= "5.0.0"
  413. ppx_protocol_conv_jsonm >= "5.0.0"
  414. ppx_protocol_conv_msgpack >= "5.0.0"
  415. ppx_protocol_conv_xml_light >= "5.0.0"
  416. ppx_protocol_conv_xmlm
  417. ppx_protocol_conv_yaml >= "5.0.0"
  418. ppx_repr
  419. ppx_subliner
  420. ppx_units
  421. ppx_yojson >= "1.1.0"
  422. pratter
  423. prbnmcn-ucb1 >= "0.0.2"
  424. prc
  425. preface
  426. pretty_expressive
  427. prettym
  428. proc-smaps
  429. producer
  430. progress
  431. prom
  432. prometheus < "1.2"
  433. prometheus-app
  434. protocell
  435. protocol-9p < "0.11.0" | >= "0.11.2"
  436. protocol-9p-unix
  437. psq
  438. pyast
  439. qcheck >= "0.25"
  440. qcheck-alcotest
  441. qcheck-core >= "0.25"
  442. quickjs
  443. quill
  444. randii
  445. reason-standard
  446. red-black-tree
  447. reparse >= "2.0.0" & < "3.0.0"
  448. reparse-unix < "2.1.0"
  449. resp
  450. resp-unix >= "0.10.0"
  451. resto >= "0.9"
  452. rfc1951 < "1.0.0"
  453. routes < "2.0.0"
  454. rpc
  455. rpclib
  456. rpclib-async
  457. rpclib-lwt
  458. rpmfile < "0.3.0"
  459. rpmfile-eio
  460. rpmfile-unix
  461. rune
  462. runtime_events_tools >= "0.5.2"
  463. SZXX >= "4.0.0"
  464. salsa20
  465. salsa20-core
  466. sanddb >= "0.2"
  467. saturn != "0.4.1"
  468. saturn_lockfree != "0.4.1"
  469. scrypt-kdf
  470. secp256k1 >= "0.4.1"
  471. secp256k1-internal
  472. semver >= "0.2.1"
  473. sendmail
  474. sendmail-lwt
  475. sendmail-miou-unix
  476. sendmail-mirage
  477. sendmsg
  478. seqes
  479. server-reason-react
  480. session-cookie
  481. session-cookie-async
  482. session-cookie-lwt
  483. sherlodoc
  484. sihl < "0.2.0"
  485. sihl-type
  486. slug
  487. smaws-clients
  488. smaws-lib
  489. smol
  490. smol-helpers
  491. sodium-fmt
  492. solidity-alcotest
  493. sowilo
  494. spdx_licenses
  495. spectrum >= "0.2.0"
  496. spin >= "0.7.0"
  497. spurs
  498. squirrel
  499. ssh-agent
  500. ssl >= "0.6.0"
  501. starred_ml
  502. stramon-lib
  503. stringx
  504. styled-ppx
  505. swapfs
  506. syslog-rfc5424
  507. tabr
  508. tar-mirage
  509. tcpip
  510. tdigest < "2.1.0"
  511. term-indexing
  512. term-tools
  513. terminal
  514. terminal_size >= "0.1.1"
  515. terminus
  516. terminus-cohttp
  517. terminus-hlc
  518. terml
  519. testo
  520. testo-lwt
  521. textmate-language >= "0.3.0"
  522. textrazor
  523. tezos-base-test-helpers < "17.3"
  524. tezos-bls12-381-polynomial
  525. tezos-client-base < "17.3"
  526. tezos-client-base-unix < "17.3"
  527. tezos-crypto >= "16.0" & < "17.3"
  528. tezos-crypto-dal < "17.3"
  529. tezos-error-monad >= "12.3" & < "17.3"
  530. tezos-event-logging-test-helpers < "17.3"
  531. tezos-plompiler = "0.1.3"
  532. tezos-plonk = "0.1.3"
  533. tezos-shell-services >= "16.0" & < "17.3"
  534. tezos-stdlib != "12.3" & < "17.3"
  535. tezos-test-helpers < "17.3"
  536. tezos-version >= "16.0" & < "17.3"
  537. tezos-webassembly-interpreter < "17.3"
  538. thread-table
  539. timedesc
  540. timere
  541. timmy
  542. timmy-jsoo
  543. timmy-lwt
  544. timmy-unix
  545. tls >= "0.12.8"
  546. toc
  547. topojson
  548. topojsone
  549. trail
  550. traits
  551. transept
  552. tsort >= "2.2.0"
  553. twostep
  554. type_eq
  555. type_id
  556. typeid >= "1.0.1"
  557. tyre >= "0.4"
  558. tyxml >= "4.2.0"
  559. tyxml-jsx
  560. tyxml-ppx >= "4.3.0"
  561. tyxml-syntax
  562. uecc
  563. ulid
  564. universal-portal
  565. unix-dirent
  566. unix-errno
  567. unix-sys-resource
  568. unix-sys-stat
  569. unix-time
  570. unstrctrd
  571. uring < "0.4"
  572. user-agent-parser
  573. uspf
  574. uspf-lwt
  575. uspf-mirage
  576. uspf-unix
  577. utop >= "2.13.0"
  578. validate
  579. validator
  580. vercel
  581. vhd-format-lwt >= "0.13.0"
  582. vpnkit
  583. wayland >= "2.0"
  584. wcwidth
  585. websocketaf
  586. x509 >= "0.7.0"
  587. xapi-rrd
  588. xapi-stdext-date
  589. xapi-stdext-encodings
  590. xapi-stdext-std >= "4.16.0"
  591. xkbcommon
  592. yaml
  593. yaml-sexp
  594. yocaml
  595. yocaml_syndication >= "2.0.0"
  596. yocaml_yaml < "2.0.0"
  597. yojson >= "1.6.0"
  598. yojson-five
  599. yuscii >= "0.3.0"
  600. yuujinchou >= "1.0.0"
  601. zar
  602. zed >= "3.2.2"
  603. zlist < "0.4.0"

Conflicts (2)

  1. js_of_ocaml-compiler < "5.8"
  2. result < "1.5"
OCaml

Innovation. Community. Security.