odoc

OCaml documentation generator
README

odoc is a documentation generator for OCaml. It reads doc comments ,
delimited with (** ... *), and outputs HTML.
See example output.

Text inside doc comments is marked up in ocamldoc syntax:

val compare : string -> string -> int
(** [compare s1 s2] compares [s1] and [s2] in {e lexicographic} order. The
    result is negative if [s1] precedes [s2], positive if [s1] follows [s2],
    and zero if [s1] and [s2] are equal. *)

The syntax reference is here. There is also an
explanation of how to attach comments to specific types,
values, and other elements in your program.

odoc's main advantage over ocamldoc is an accurate cross-referencer, which
handles the complexity of the OCaml module system. odoc also offers a good
opportunity to improve HTML output compared to ocamldoc, but this is very much
a work in progress :)

Using odoc with OCaml

To install odoc with opam:

opam install odoc

If you want to use odoc on the packages you have installed in your
opam switch type:

opam install ocaml-manual odig
odig doc

When you are developing the easiest way to use odoc right now is by
having Dune drive it. This command should work in most Dune projects
out of the box:

dune build @doc

The generated docs can then be found locally at
./_build/default/_doc/_html/index.html.

Using odoc with BuckleScript/Reason

You can use the bsdoc npm package to use
odoc in your BuckleScript projects.

Contact

odoc is most discussed on discuss.ocaml.org's Ecosystem category with the odoc tag.
Please also don't hesitate to open an issue.

Contributing

Any question asked, issue opened, feedback offered, is a
contribution to odoc, and the project and all its users are thankful :) If
you'd like to contribute code specifically, you may find the guide in
CONTRIBUTING.md helpful. Also see the roadmap
there. If anything is missing from it, please don't hesitate to
reach out.

Install
Published
10 Jul 2021
Sources
odoc-1.5.3.tbz
sha256=f2b76f811658c4b52cb48ac4ffc2ec37cedd2a805111c7f8ec20f8f36b8bbf45
sha512=9e069590e0737c94813d25235b5cfe27feb5a0298a17ff9b9ee446c69827c3a0ea3b7da5d05b278639cd1f0202e0d83356707979edfaa2af73876fc000c23c4d
Dependencies
bisect_ppx
dev & >= "1.3.0"
sexplib
dev & >= "113.33.00" & with-test
markup
dev & >= "1.0.0" & with-test
alcotest
dev & >= "0.8.3" & with-test
tyxml
>= "4.3.0"
ocaml
>= "4.02.0" & < "4.14"
cppo
build & >= "1.1.0"
cmdliner
>= "1.0.0"
Reverse Dependencies
aifad
>= "2.3.0"
alba
>= "0.4.1"
alcotest
= "1.1.0" | = "1.2.3" | >= "1.5.0"
alcotest-async
>= "1.5.0"
alcotest-lwt
>= "1.5.0"
alt-ergo
>= "2.4.1"
alt-ergo-lib
>= "2.4.1"
altgr-ergo
>= "2.4.1"
anders
< "0.7.1"
ao
>= "0.2.4"
archetype
>= "1.2.3"
argon2
>= "1.0.0"
atd
>= "2.3.3"
atdgen
>= "2.3.3"
atdgen-runtime
>= "2.3.3"
atdj
>= "2.3.3" & < "20151001.01"
atds
>= "2.3.3"
bencode
>= "2.0"
bindlib
>= "6.0.0"
binsec
>= "0.4.0"
bitmasks
>= "1.1.0"
bogue
>= "20210917"
boltzgen
>= "0.9.2"
brotli
>= "2.0.3"
bwd
< "2.0.0"
ca-certs-nss
>= "3.64.0.1"
calculon
>= "0.3"
camelot
>= "1.3.0"
camlp-streams
>= "5.0.1"
caqti
>= "1.7.0"
caqti-async
>= "1.7.0"
caqti-lwt
>= "1.7.0"
catala
>= "0.5.0"
cfg
>= "2.3.0"
choice
>= "0.4"
clangml
>= "4.2.0"
clap
>= "0.2.0"
combinat
>= "3.0"
config-file
>= "1.2.1"
conformist
>= "0.8.1"
containers
>= "2.0"
crc
>= "2.0.0"
crowbar
>= "0.2.1"
cry
>= "0.6.6"
csexp
>= "1.5.1"
cudf
>= "0.10"
curly
>= "0.2.0"
curses
>= "1.0.10"
cwe_checker
>= "0.3"
datalog
>= "0.6"
decoders
>= "0.5.0"
devkit
>= "1.20210120"
dlm
>= "0.3.3"
docker-api
>= "0.2.2"
doi2bib
>= "0.3.0"
dolmen
>= "0.5"
dose3
>= "6.1"
dssi
>= "0.1.4"
dtools
>= "0.4.3"
dune-glob
>= "2.7.0"
duppy
>= "0.9.1"
earley
>= "3.0.0"
earlybird
>= "1.0.0"
easy-format
>= "1.3.3"
electrod
>= "1.0.0"
extunix
>= "0.4.0"
ez_cmdliner
>= "0.2.0"
ez_config
>= "0.2.0"
ez_file
>= "0.2.0"
ezjs_idb
>= "0.1.1"
ezjs_min
>= "0.2.2"
FrontC
>= "4.0.0"
faad
>= "0.5.1"
fadbadml
>= "0.1.2"
fd-send-recv
>= "2.0.1"
feather
>= "0.2.0"
feather_async
>= "0.2.0"
ffmpeg
>= "1.0.0~beta2"
ffmpeg-av
>= "1.0.0~beta2"
ffmpeg-avcodec
>= "1.0.0~beta2"
ffmpeg-avdevice
>= "1.0.0~beta2"
ffmpeg-avfilter
>= "1.0.0~beta2"
ffmpeg-avutil
>= "1.0.0~beta2"
ffmpeg-swresample
>= "1.0.0~beta2"
ffmpeg-swscale
>= "1.0.0~beta2"
fiat-p256
= "0.2.2"
frenetic
>= "5.0.0"
GT
>= "0.5.0"
gen
>= "0.5.1"
gen_js_api
>= "1.0.8"
github
>= "4.4.0"
github-jsoo
>= "4.4.0"
github-unix
>= "4.4.0"
gnuplot
>= "0.6"
goblint
>= "1.1.1"
goblint-cil
>= "1.8.0"
gperftools
>= "0.4"
hacl-star
>= "0.4.0"
hacl_x25519
= "0.2.1"
higlo
>= "0.8"
httpaf_caged
>= "1.0.1"
ISO8601
>= "0.2.6"
inotify
>= "2.4"
inquire
>= "0.3.0"
irc-client
>= "0.6.2"
irc-client-lwt
>= "0.6.2"
irc-client-tls
>= "0.6.2"
iri
>= "0.6.0"
irmin
>= "3.0.0"
irmin-watcher
>= "0.5.0"
jekyll-format
>= "0.2.0"
jose
>= "0.6.0"
js_of_ocaml
>= "3.10.0"
js_of_ocaml-lwt
>= "3.10.0"
js_of_ocaml-ppx
>= "3.10.0"
jsonrpc
>= "1.4.0"
junit
>= "1.0"
jwto
>= "0.4.0"
kqueue
>= "0.2.0"
ladspa
>= "0.2.1"
lambda-term
>= "3.3.0"
lambdapi
>= "2.0.0"
lame
>= "0.3.6"
landmarks
>= "1.4"
ldap
>= "2.4.2"
learn-ocaml
>= "0.12"
letters
!= "0.1.1"
leveldb
>= "1.3.0"
linenoise
>= "1.3.1"
lmdb
>= "1.0"
lsp
>= "1.4.0"
lua-ml
>= "0.9.3"
lua_parser
>= "1.0.2"
lwd
>= "0.2"
lz4
>= "1.2.0"
mad
>= "0.5.1"
mdx
>= "1.7.0"
metapp
>= "0.3.0"
metaquot
>= "0.3.0"
minisat
>= "0.2"
mlbdd
>= "0.7.2"
mm
>= "0.7.2"
monomorphic
>= "2.0"
morbig
>= "0.10.3"
mpg123
>= "0.3"
mpris
>= "0.2.0"
mssql
>= "2.0.3"
mysql_protocol
>= "3.0.1"
noCanren
>= "0.3.0~alpha1"
nottui
>= "0.2"
nottui-lwt
>= "0.2"
nunchaku
>= "0.5.1"
nuscr
>= "1.1.0"
OCanren
>= "0.3.0~alpha1"
OCanren-ppx
>= "0.3.0~alpha1"
ocaml-lua
>= "1.8"
ocamlformat
>= "0.11.0"
ocf
>= "0.8.0"
ocp-browser
>= "1.2.2"
ocp-index
>= "1.2.2"
ocplib_stuff
>= "0.3.0"
odig
>= "0.0.4" & < "0.0.7"
ogg
>= "0.7.1"
ojs
>= "1.0.8"
olinq
>= "0.3"
omd
= "1.3.2"
opam-0install
>= "0.4.2"
opam-bin
>= "0.9.5"
opam-monorepo
>= "0.3.0"
opam_bin_lib
>= "0.9.5"
opasswd
>= "1.3.1"
opium
>= "0.20.0"
opium-testing
>= "0.20.0"
opus
>= "0.2.1"
otoml
>= "0.9.3"
override
>= "0.4.0"
parmap
>= "1.2.3"
patoline
>= "0.2"
pcre
>= "7.5.0"
pgx
>= "1.0"
portaudio
>= "0.2.3"
ppx_const
>= "2.0"
ppx_getenv
>= "2.0"
ppx_monoid
>= "0.3.3"
ppx_repr
!= "0.2.0"
ppxlib
>= "0.22.0"
prbnmcn-ucb1
>= "0.0.2"
printbox
>= "0.2"
psmt2-frontend
>= "0.3.0"
pulseaudio
>= "0.1.5"
pyml
>= "20210924"
qbf
>= "0.3"
qcheck
>= "0.9"
raylib
>= "0.3.1"
rdf
>= "0.13.0"
rea
< "0.2.0"
redis
>= "0.4"
redis-lwt
>= "0.4"
redis-sync
>= "0.4"
refl
>= "0.2.0"
reparse
>= "2.0.0"
repr
!= "0.2.0"
resto
>= "0.7"
river
>= "0.2"
rock
>= "0.20.0"
routes
>= "1.0.0"
rpc
>= "6.1.0"
samplerate
>= "0.1.6"
sanddb
>= "0.2"
sarek
>= "20210823"
secp256k1
>= "0.4.1"
sedlex
>= "2.4"
sequence
>= "1.1"
sha
>= "1.15.1"
shine
>= "0.2.2"
sihl
>= "0.1.5"
smart-print
>= "0.3.0"
snappy
>= "0.1.2"
spawn
>= "v0.15.0"
speex
>= "0.4.1"
spelll
>= "0.3"
spoc
>= "20210823"
sqlgg
>= "20200521"
sqlite3
>= "5.0.3"
srt
>= "0.2.1"
stdint
>= "0.7.0"
stog
>= "0.20.0"
taglib
>= "0.3.7"
tar
>= "2.0.0"
tar-mirage
>= "2.0.0"
tar-unix
>= "2.0.0"
tezos-plonk
>= "0.1.3"
timed
>= "1.1"
timedesc
>= "0.8.0"
tip-parser
>= "0.4"
toml
>= "5.0.0"
toml_cconv
>= "7.0.0"
touist
>= "3.5.0"
traverse
>= "0.3.0"
travesty
>= "0.7.2"
tsdl-image
>= "0.3.0"
tsdl-mixer
>= "0.3.0"
tsdl-ttf
>= "0.3"
tyre
>= "0.5"
tyxml-lwd
>= "0.2"
uritemplate
>= "0.1.0"
vec
>= "0.2.0"
voqc
>= "0.2.0"
websocket
>= "2.15"
winsvc
>= "1.0.1"
xapi-stdext-std
>= "4.19.0"
xapi-stdext-unix
>= "4.19.0"
xmldiff
>= "0.7.0"
xtmpl
>= "0.19.0"
yojson
>= "2.0.0"
yuujinchou
>= "0.10.0" & < "3.0.0"
zed
>= "3.2.0"
zlib
>= "0.6"
zlist
>= "0.4.0"