Skip to content

Rename mirage-http to cohttp-mirage#572

Merged
avsm merged 1 commit intomirage:masterfrom
rgrinberg:rename-mirage-http
Nov 15, 2017
Merged

Rename mirage-http to cohttp-mirage#572
avsm merged 1 commit intomirage:masterfrom
rgrinberg:rename-mirage-http

Conversation

@rgrinberg
Copy link
Copy Markdown
Member

Consistency with other libraries

@rgrinberg rgrinberg requested review from avsm and samoht July 30, 2017 16:33
Consistency with other libraries
@rgrinberg rgrinberg force-pushed the rename-mirage-http branch from a3cf872 to bc0ffbf Compare July 30, 2017 16:49
@avsm
Copy link
Copy Markdown
Member

avsm commented Jul 31, 2017

Not yet -- we need to coordinate this with all the other renames (there are various PRs floating around that need to be combined and then a new release of mirage/mirage done to account for the new names)

@rgrinberg
Copy link
Copy Markdown
Member Author

OK. Feel free to take over this effort.

@avsm avsm self-assigned this Aug 5, 2017
@avsm
Copy link
Copy Markdown
Member

avsm commented Aug 5, 2017

I'll coordinate these...

djs55 added a commit to djs55/mirage that referenced this pull request Nov 14, 2017
Related to [mirage/ocaml-cohttp#572]

Signed-off-by: David Scott <dave@recoil.org>
@djs55
Copy link
Copy Markdown
Member

djs55 commented Nov 14, 2017

I think we need to release cohttp soon -- the released version doesn't build with OCaml 4.06 (fix is in master).

I've made a change to the mirage tool and will try to make the CI pass (probably require some PINs). Assuming I get the mirage tool building, is there anything else needed before merging this and tagging 1.0.0?

@avsm
Copy link
Copy Markdown
Member

avsm commented Nov 15, 2017

nothing else except mirage tool I believe...

@avsm avsm merged commit 3feff8d into mirage:master Nov 15, 2017
djs55 added a commit to djs55/mirage-skeleton that referenced this pull request Nov 15, 2017
Related to [mirage/ocaml-cohttp#572]

Signed-off-by: David Scott <dave@recoil.org>
hannesm pushed a commit to hannesm/mirage-skeleton that referenced this pull request Nov 23, 2017
Related to [mirage/ocaml-cohttp#572]

Signed-off-by: David Scott <dave@recoil.org>
hannesm added a commit to hannesm/opam-repository that referenced this pull request Oct 24, 2020
…es (3.9.0)

CHANGES:

The Xen backend is a minimal legacy-free re-write: Solo5 (since 0.6.6) provides
the low-level glue code, and ocaml-freestanding provides the OCaml runtime. The
PV-only Mini-OS implementation has been retired.

The only supported virtualization mode is now Xen PVH (version 2 or above),
supported since Xen version 4.10 or later (and Qubes OS 4.0).

The support for the ARM32 architecture on Xen has been removed.

Security posture improvements:

With the move to a Solo5 and ocaml-freestanding base MirageOS gains several
notable improvements to security posture for unikernels on Xen:

* Stack smashing protection is enabled unconditionally for all C code.
* W^X is enforced throughout, i.e. `.text` is read-execute, `.rodata` is
  read-only, non-executable and `.data`, heap and stack are read-write and
  non-executable.
* The memory allocator used by the OCaml runtime is now dlmalloc (provided by
  ocaml-freestanding), which is a big improvement over the Mini-OS malloc, and
  incorporates features such as heap canaries.

Interface changes:

* With the rewrite of the Xen core platform stack, several Xen-specific APIs
  have changed in incompatible ways; unikernels may need to be updated. Please
  refer to the mirage-xen v6.0.0 [change
  log](https://github.com/mirage/mirage-xen/releases/tag/v6.0.0) for a list of
  interfaces that have changed along with their replacements.

Other changes:

* OCaml 4.08 is the minimum supported version.
* A dummy `dev-repo` field is emitted for the generated opam file.
* .xe files are no longer generated.
* Previous versions of MirageOS would strip boot parameters on Xen, since Qubes
  OS 3.x added arguments that could not be interpreted by our command line
  parser. Since Qubes OS 4.0 this is no longer an issue, and MirageOS no longer
  strips any boot parameters. You may need to execute
  `qvm-prefs qube-name kernelopts ''`.

Acknowledgements:

* Thanks to Roger Pau Monné, Andrew Cooper and other core Xen developers for
  help with understanding the specifics of how PVHv2 works, and how to write an
  implementation from scratch.
* Thanks to Marek Marczykowski-Górecki for help with the Qubes OS specifics, and
  for forward-porting some missing parts of PVHv2 to Qubes OS version of Xen.
* Thanks to @palainp on Github for help with testing on Qubes OS.

### v3.8.1 (2020-09-22)

* OCaml runtime parameters (OCAMLPARAM) are exposed as boot and configure
  arguments. This allows e.g. to switch to the best-fit garbage collection
  strategy (mirage/mirage#1180 @hannesm)

### v3.8.0 (2020-06-22)

* Emit type=pv in xl (instead of builder=linux), as required by xen 4.10+ (mirage/mirage#1166 by @djs55)
* adapt to ipaddr 5.0.0, tcpip 5.0.0, mirage-crypto 0.8 (mirage/mirage#1172 @hannesm)

### v3.7.7 (2020-05-18)

* handle errors from Bos.OS.Cmd.run_out
* use PREFIX if defined (no need to call "opam config var prefix")
* adapt to conduit 2.2.0, tls 0.12, mirage-crypto 0.7.0 changes

### v3.7.6 (2020-03-18)

* fix conduit with 3.7.5 changes (mirage/mirage#1086, @hannesm)

### v3.7.5 (2020-03-15)

* use mirage-crypto (and mirage-crypto-entropy) instead of nocrypto, also
  tls-mirage and up-to-date conduit (mirage/mirage#1068, @hannesm)

### v3.7.4 (2019-12-20)

* use `git rev-parse --abbrev-ref HEAD` instead of `git branch --show-current`
  for emitting branch information into the opam file. The latter is only
  available in git 2.22 or later, while the former seems to be supported by
  old git releases. (mirage/mirage#1024, @hannesm)

### v3.7.3 (2019-12-17)

* `mirage configure` now emits build and install steps into generated opam file
  this allows to use `opam install .` to actually install a unikernel.
  (mirage/mirage#1022 @hannesm)
* refactor configure, build and link step into separate modules (mirage/mirage#1017 @dinosaure)

### v3.7.2 (2019-11-18)

* adjust fat-filesystem constraints to >= 0.14 && < 0.15 (mirage/mirage#1015, @hannesm)

### v3.7.1 (2019-11-03)

* clean opam files when `mirage configure` is executed (mirage/mirage#1013 @dinosaure)
* deprecate mirage-types and mirage-types-lwt (mirage/mirage#1006 @hannesm)
* remove abstraction over 'type 'a io' and 'buffer', remove mirage-*-lwt packages (mirage/mirage#1006 @hannesm)
* unify targets in respect to hooks (Mirage_runtime provides the hooks and registration)
* unify targets in respect to error handling (no toplevel try .. with installed anymore, mirage-unix does no longer ignore all errors)

### v3.7.0 (2019-11-01)

* mirage-runtime: provide at_enter_iter/at_exit_iter/at_exit hooks for the event loop (mirage/mirage#1010, @samoht @dinosaure @hannesm)
* call `exit 0` after the Lwt event loop returned (to run at_exit handlers in freestanding environments) (mirage/mirage#1011, @hannesm)
* NOTE: this release only contains the mirage-runtime opam package to unblock other releases, there'll be a 3.7.1 soon

### v3.6.0 (2019-10-02)

* solo5 0.6 support for multiple devices (mirage/mirage#993, by @mato)
  please read https://github.com/Solo5/solo5/blob/v0.6.2/CHANGES.md for detailed changes
  observable mirage changes:
  - new target `-t spt` for sandboxed processed tender (seccomp on Linux)
  - new functions Mirage_key.is_solo5 and Mirage_key.is_xen, analogue to Mirage_key.is_unix
* respect verbosity when calling `ocamlbuild` -- verbose if log level is info or debug (mirage/mirage#999, by @mato)

### v3.5.2 (2019-08-22)

* Adapt to conduit 2.0.0 release, including dns 4.0.0 (mirage/mirage#996, by @hannesm)
* Adjust mirage-xen constraints to < 5.0.0 (mirage/mirage#995, by @reynir)

### v3.5.1 (2019-07-11)

* Adapt to new tracing API (mirage/mirage#985, by @talex5)
* Remove stubs for qrexec and qubes gui (qubes 3 is end of life, qubes 4 makes it configurable) (mirage/mirage#984, by @linse & @yomimono)
* Update mirage-logs and charrua-client-mirage version constraints (mirage/mirage#982, by @hannesm)
* Remove unused dockerfile, travis updates (mirage/mirage#982 mirage/mirage#990, by @hannesm)

### v3.5.0 (2019-03-03)

* Rename Mirage_impl_kv_ro to Mirage_impl_kv, and introduce `rw` (mirage/mirage#975, by @hannesm)
* Adapt to mirage-kv 2.0.0 changes (mirage/mirage#975, by @hannesm)
* Adapt to mirage-protocols and mirag-net 2.0.0 changes (mirage/mirage#972, by @hannesm)
* mirage-types-lwt: remove unneeded io-page dependency (mirage/mirage#971, by @hannesm)
* Fix regression introduced in 3.4.0 that "-l *:debug" did no longer work (mirage/mirage#970, by @hannesm)
* Adjust various upper bounds (mirage-unix, cohttp-mirage, mirage-bootvar-xen) (mirage/mirage#967, by @hannesm)

### v3.4.1 (2019-02-05)

* Provide a httpaf_server device, and a cohttp_server device (mirage/mirage#955, by @anmonteiro)
* There can only be a single prng device in a unikernel, due to entropy
  harvesting setup (mirage/mirage#959, by @hannesm)
* Cleanup zarith-freestanding / gmp-freestanding dependencies (mirage/mirage#964, by @hannesm)
* ethernet is now a separate package (mirage/mirage#965, by @hannesm)
* arp now uses the mirage/arp repository by default, the tcpip.arpv4
  implementation was removed in tcpip 3.7.0 (mirage/mirage#965, by @hannesm)

### v3.4.0 (2019-01-11)

* use ipaddr 3.0 without s-expression dependency (mirage/mirage#956, by @hannesm)
* use mirage-clock 2.x and tcpip 3.6.x libraries (mirage/mirage#960, mirage/mirage#962, by @hannesm)
* default to socket stack on unix and macos (mirage/mirage#958, by @hannesm)
* use String.split_on_char in mirage-runtime to avoid astring dependency (mirage/mirage#957, by @hannesm)
* add build-dependency on mirage to each unikernel (mirage/mirage#953, by @hannesm)

### 3.3.1 (2018-11-21)

* fix regression: --yes was not passed to opam in 3.3.0 (mirage/mirage#950, by @hannesm)

### 3.3.0 (2018-11-18)

New target: (via solo5) Genode:
"Genode is a free and open-source operating system framework consisting
of a microkernel abstraction layer and a collection of userspace components. The
framework is notable as one of the few open-source operating systems not derived
from a proprietary OS, such as Unix. The characteristic design philosophy is
that a small trusted computing base is of primary concern in a security oriented
OS." (from wikipedia, more at https://genode.org/ mirage/mirage#942, by @ehmry)

User-visible changes
* use mirage-bootvar-unix instead of OS.Env.argv
  (deprecated since mirage-{xen,unix,os-shim}.3.1.0, mirage-solo5.0.5.0) on unix
  (mirage/mirage#931, by @hannesm)

  WARNING: this leads to a different semantics for argument passing on Unix:
  all arguments are concatenated (using a whitespace " " as separator), and
  split on the whitespace character again (by parse-argv). This is coherent
  with all other backends, but the whitespace in "--hello=foo bar" needs to
  be escaped now.

* mirage now generates upper bounds for hard-coded packages that are used in
  generated code. When we now break the API, unikernels which are configured with
  an earlier version won't accept the new release of the dependency. This means
  API breakage is much smoother for us, apart from that we now track version
  numbers in the mirage utility. The following rules were applied for upper bounds:
  - if version < 1.0.0 then ~min:"a.b.c" ~max:"a.(b+1).0"
  - if version > 1.0.0 then ~min:"a.b.c" ~max:"(a+1).0.0"`
  - exceptions: tcpip (~min:"3.5.0" ~max:"3.6.0"), mirage-block-ramdisk (unconstrained)

  WARNING: Please be careful when release any of the referenced libraries by
  taking care of appropriate version numbering.
  (initial version in mirage/mirage#855 by @avsm, final mirage/mirage#946 by @hannesm)

* since functoria.2.2.2, the "package" function (used in unikernel configuration)
  is extended with the labeled argument ~pin that receives a string (e.g.
  ~pin:"git+https://github.com/mirage-random/mirage-random.git"), and is embedded
  into the generated opam file as [pin-depends](https://opam.ocaml.org/doc/Manual.html#opamfield-pin-depends)

* mirage-random-stdlib is now used for default_random instead of mirage-random
  (which since 1.2.0 no longer bundles the stdlib Random
  module). mirage-random-stdlib is not cryptographically secure, but "a
  lagged-Fibonacci F(55, 24, +) with a modified addition function to enhance the
  mixing of bits.", which is now seeded using mirage-entropy. If you configure
  your unikernel with "mirage configure --prng fortuna" (since mirage 3.0.0), a
  cryptographically secure PRNG will be used (read more at
  https://mirage.io/blog/mirage-entropy)

* mirage now revived its command-line "--no-depext", which removes the call to
  "opam depext" in the depend and depends target of the generated Makefile
  (mirage/mirage#948, by @hannesm)

* make depend no longer uses opam pin for opam install --deps-only (mirage/mirage#948, by @hannesm)

* remove unused io_page configuration (initial discussion in mirage/mirage#855, mirage/mirage#940, by @hannesm)

* charrua-client requires a Mirage_random interface since 0.11.0 (mirage/mirage#938, by @hannesm)

* split implementations into separate modules (mirage/mirage#933, by @emillon)

* improved opam2 support (declare ocaml as dependency mirage/mirage#926)

* switch build system to dune (mirage/mirage#927, by @emillon)

* block device writes has been fixed in mirage-solo5.0.5.0

### 3.2.0 (2018-09-23)

* adapt to solo5 0.4.0 changes (mirage/mirage#924, by @mato)
Upgrading from Mirage 3.1.x or earlier

Due to conflicting packages, opam will not upgrade mirage to version 3.2.0 or newer if a version of mirage-solo5 older than 0.4.0 is installed in the switch. To perform the upgrade you must run `opam upgrade mirage` explicitly.

Changes required to rebuild and run ukvm unikernels

As of Solo5 0.4.0, the ukvm target has been renamed to hvt. If you are working out of an existing, dirty, source tree, you should initially run:

```
mirage configure -t hvt
mirage clean
mirage configure -t hvt
```

and then proceed as normal. If you are working with a clean source tree, then simply configuring with the new hvt target is sufficient:

`mirage configure -t hvt`

Note that the build products have changed:

The unikernel binary is now named `<unikernel>.hvt`,
the `ukvm-bin` binary is now named `solo5-hvt`.

* adapt to mirage-protocols, mirage-stack, tcpip changes (mirage/mirage#920, by @hannesm)

This is a breaking change: mirage 3.2.0 requires mirage-protocols 1.4.0, mirage-stack 1.3.0, and tcpip 3.5.0 to work (charru-client-mirage 0.10 and mirage-qubes-ipv4 0.6 are adapted to the changes).  An older mirage won't be able to use these new libraries correctly.  Conflicts were introduced in the opam-repository.

In more detail,  direct and socket stack initialisation changed, which is automatically generated by the mirage tool for each unikernel (as part of `main.ml`).  A record was built up, which is no longer needed.

Several unneeded type aliases were removed:
  `netif` from Mirage_protocols.ETHIF
  `ethif` and `prefix` from Mirage_protocols.IP
  `ip` from Mirage_protocols.{UDP,TCP}
  `netif` and `'netif config` from Mirage_stack.V4
  `'netif stackv4_config` and `socket_stack_config` in Mirage_stack

* squash unnecessary warning from `mirage build` (mirage/mirage#916, by @mato)

### 3.1.1 (2018-08-01)

* for the unix target, add `-tags thread`, as done for the mac osx target (mirage/mirage#861,
  suggested by @cfcs)
* bump minimum mirage-solo5* and solo5-kernel* to 0.3.0 (mirage/mirage#914, by @hannesm, as
  suggested by @mato)
* use the exposed signature in functoria for Key modules (mirage/mirage#912, by @Drup)
* add ?group param to all generic devices (mirage/mirage#913, by @samoht)

### 3.1.0 (2018-06-20)

* solo5 v0.3.0 support (mirage/mirage#906, by @mato @Kensan @hannesm):
  The major new user-visible features for the Solo5 backends are:
    ukvm: Now runs natively on FreeBSD vmm and OpenBSD vmm.
    ukvm: ARM64 support.
    muen: New target, for the Muen Separation Kernel.
    ukvm: Improved and documented support for debugging Solo5-based unikernels.
* generate libvirt.xml for virtio target (mirage/mirage#903, by @bramford)
* don't make xen config documents for target qubes (mirage/mirage#895, by @yomimono)
* use a path pin when making depends (mirage/mirage#891, by @yomimono)
* move block registration to `configure` section (mirage/mirage#892, by @yomimono)
* allow to directly specifying xenstore ids (mirage/mirage#879, by @yomimono)

### 3.0.8 (2017-12-19)

* when passing block devices to `xen`, pass the raw filename rather than trying to infer the xenstore ID (mirage/mirage#874, by @yomimono)
* make homepage in opam files consistent (mirage/mirage#872, by @djs55)

### 3.0.7 (2017-11-24)

* the released version of `cohttp-mirage` is `1.0.0` (not `3.0.0`)
  (mirage/mirage#870 by @hannesm)

### 3.0.6 (2017-11-16)

* remove macOS < yosemite support (mirage/mirage#860 by @hannesm)
* rename `mirage-http` to `cohttp-mirage` (mirage/mirage#863 by @djs55)
  See [mirage/ocaml-cohttp#572]
* opam: require OCaml 4.04.2+ (mirage/mirage#867 by @hannesm)

### 3.0.5 (2017-08-08)

* Allow runtime configuration of syslog via config keys `--syslog`,
  `--syslog-port` and `--syslog-hostname` (mirage/mirage#853 via @hannesm).
* Switch build of tool and libraries to Jbuilder (by @samoht)
* Fix a warning when connecting to a ramdisk device (mirage/mirage#837 by @g2p)
* Fix reference to tar library when using `--kv-ro archive` (mirage/mirage#848 by @mor1)
* Adapt to latest functoria API (mirage/mirage#849 by @samoht)

* Add a `--gdb` argument for ukvm targets so that debuggers can be attached easily.
  This allows `mirage configure --gdb -t ukvm` to work (@ricarkol in mirage/mirage#847).

* Adapt to latest functoria (mirage/mirage#849 by @samoht)
* Adapt to latest charrua, tcpip (mirage/mirage#854 by @yomimono)
* Switch to jbuilder (mirage/mirage#850 by @samoht)

Packaging updates for latest opam repository:
* ARP is compatible with MirageOS3 since 0.2.0 (mirage/mirage#851 by @hannesm)

### 3.0.4 (2017-06-15)
* add a --block configure flag for picking ramdisk or file-backed disk
* add lower bounds on packages
* fallback to system `$PKG_CONFIG_PATH`
* update for mirage-qubes-ipv4

### 3.0.2 (2017-03-15)

* restore ocamlbuild colors when `TERM <> dumb && Unix.isatty stdout` (mirage/mirage#814, by @hannesm)

### 3.0.1 (2017-03-14)

* remove "-color always" from ocamlbuild invocation (bugfix for some scripts interpreting build output) (mirage/mirage#811, by @hannesm)
* provide a "random" module argument when invoking IPv6.Make (compat with tcpip 3.1.0) (mirage/mirage#801, by @hannesm)
* add a "depends" target to the generated Makefile (controversial and may be removed) (mirage/mirage#805, by @yomimono)
* allow qubesdb to be requested in config.ml when the target is xen (mirage/mirage#807, by @talex5)

### 3.0.0 (2017-02-23)

* rename module types modules: V1 -> Mirage_types, V1_LWT -> Mirage_types_lwt (mirage/mirage#766, by @yomimono, @samoht, and @hannesm)
* split type signatures and error printers into separate libraries (mirage/mirage#755, mirage/mirage#753, mirage/mirage#752, mirage/mirage#751, mirage/mirage#764, and several others, by @samoht and @yomimono)
* use mirage-fs instead of ocaml-fat to transform FS into KV_RO (mirage/mirage#756, by @samoht)
* changes to simplify choosing an alternate ARP implementation (mirage/mirage#750, by @hannesm)
* add configurators for syslog reporter (mirage/mirage#749, by @hannesm)
* filter incoming boot-time arguments for all Xen backends, not just QubesOS (mirage/mirage#746, by @yomimono)
* give mirage-types-lwt its own library, instead of a mirage-types sublibrary called lwt (mirage/mirage#735, by @hannesm)
* remove `format` function and `Format_unknown` error from FS module type (mirage/mirage#733, by @djs55)
* ocamlify FAT name (mirage/mirage#723 by @yomimono)
* remove type `error` from DEVICE module type (mirage/mirage#728, by @hannesm)
* UDP requires random for source port randomization (mirage/mirage#726 by @hannesm)
* drop "mir-" prefix from generated binaries (mirage/mirage#725 by @hannesm)
* BLOCK and FS uses result types (mirage/mirage#705 by @yomimono)
* depext fixes (mirage/mirage#718 by @mato)
* workflow changes: separate configure, depend, build phases, generate opam file during configure (mirage/mirage#703, mirage/mirage#711 by @hannesm)
* tap0 is now default_network (mirage/mirage#715, mirage/mirage#719 by @yomimono, @mato)
* ARP uses result types (mirage/mirage#711 by @yomimono)
* ipv4 key (instead of separate ip and netmask) (mirage/mirage#707, mirage/mirage#709 by @yomimono)
* CHANNEL uses result types (mirage/mirage#702 by @avsm)
* no custom myocamlbuild.ml, was needed for OCaml 4.00 (mirage/mirage#693 by @hannesm)
* revert custom ld via pkg-config (mirage/mirage#692 by @hannesm)
* result types for FLOW and other network components (mirage/mirage#690 by @yomimono)
* removed `is_xen` key (mirage/mirage#682, by @hannesm)
* mirage-clock-xen is now mirage-clock-freestanding (mirage/mirage#684, by @mato)
* mirage-runtime is a separate opam package providing common functionality (mirage/mirage#681, mirage/mirage#615 by @hannesm)
* add `qubes` target for making Xen unikernels which boot & configure themselves correctly on QubesOS. (mirage/mirage#553, by @yomimono)
* revised V1.CONSOLE interface: removed log, renamed log_s to log (mirage/mirage#667, by @hannesm)
* remove Str module from OCaml runtime (mirage/mirage#663, in ocaml-freestanding and mirage-xen-ocaml, by @hannesm)
* new configuration time keyword: prng to select the default prng (mirage/mirage#611, by @hannesm)
* fail early if tracing is attempted with Solo5 (mirage/mirage#657, by @yomimono)
* refactor ipv4, stackv4, and dhcp handling (mirage/mirage#643, by @yomimono)
* create xen-related helper files only when the target is xen (mirage/mirage#639, by @hannesm)
* improvements to nocrypto handling (mirage/mirage#636, by @pqwy)
* disable warning mirage/mirage#42 in generated code for unikernels (mirage/mirage#633, by @hannesm)
* V1.NETWORK functions return a Result.t rather than polyvars indicating success or errors (mirage/mirage#615, by @hannesm)
* remove GNUisms and unnecessary artifacts from build (mirage/mirage#623, mirage/mirage#627, by @mato and @hannesm)
* remove type `id` from `DEVICE` module type. (mirage/mirage#612, by @yomimono and @talex5)
* revise the RANDOM signature to provide n random bytes; provide nocrypto_random and stdlib_random (mirage/mirage#551 and mirage/mirage#610, by @hannesm)
* expose `direct` as an option for `kv_ro`.  (mirage/mirage#607, by @mor1)
* require a `mem` function in KV_RO, and add `Failure` error variant (mirage/mirage#606, by @yomimono)
* `connect` functions are no longer expected to return polyvars, but rather to raise exceptions if `connect` fails and return the value directly. (mirage/mirage#602, by @hannesm)
* new documentation using `odig` (mirage/mirage#591, mirage/mirage#593, mirage/mirage#594, mirage/mirage#597, mirage/mirage#598, mirage/mirage#599, mirage/mirage#600, and more, by @avsm)
* change build system to `topkg` from `oasis`. (mirage/mirage#558, mirage/mirage#590, mirage/mirage#654, mirage/mirage#673, by @avsm, @samoht, @hannesm, @dbuenzli)
* express io-page dependency of crunch. (mirage/mirage#585, by @yomimono and @mato)
* deprecate the CLOCK module type in favor of PCLOCK (POSIX clock) and
  MCLOCK (a monotonically increasing counter of elapsed nanoseconds).
  (mirage/mirage#548 and mirage/mirage#579, by @mattgray and @yomimono)
* emit an ocamlfind predicate that matches the target, reducing the
  amount of duplication by target required of library authors
  (mirage/mirage#568, by @pqwy)
* implement an `is_unix` key (mirage/mirage#575, by @mato)
* use an int64 representing nanoseconds as the argument for `TIME.sleep`,
  instead of a float representing seconds. (mirage/mirage#547, by @hannesm)
* expose new targets `virtio` and `ukvm` via the `solo5` project. (mirage/mirage#565,
  by @djwillia, @mato, and @hannesm).
* remove users of `base_context`, which includes command-line arguments `--unix`
  and `--xen`, and `config.ml` functions `add_to_ocamlfind_libraries` and
  `add_to_opam_packages`.  As a side effect, fix a long-standing error message
  bug when invoking `mirage` against a `config.ml` that does not build.
  (mirage/mirage#560, by @yomimono)
* link `libgcc.a` only on ARM & other build improvements (mirage/mirage#544, by @hannesm)
* allow users to use `crunch` on unix with `kv_ro`; clean up crunch .mlis on
  clean (mirage/mirage#556, by @yomimono)
* remove console arguments to network functors (mirage/mirage#554, by @talex5 and @yomimono)
* standardize ip source and destination argument names as `src` and `dst`, and
  source and destination ports as `src_port` and `dst_port` (mirage/mirage#546, by @yomimono)
* a large number of documentation improvements (mirage/mirage#549, by @djs55)
* require `pseudoheader` function for IP module types. (mirage/mirage#541, by @yomimono)
* always build with `ocamlbuild -r`, to avoid repetitive failure message
  (mirage/mirage#537, by @talex5)

### 2.9.1 (2016-07-20)

* Warn users of command-line arguments `--unix` and `--xen` that support for
  these will soon be dropped.  Instead, use `-t unix` and `-t xen` respectively.
  (see mirage/mirage-www#475 (comment))
  (mirage/mirage#561, by @yomimono)
* Warn users of functions `add_to_opam_packages p` and
  `add_to_ocamlfind_libraries l` that support for these will soon be dropped.
  Instead, use `register ~libraries:l` and `register:~packages:p`
  respectively. (mirage/mirage#561, by @yomimono).

### 2.9.0 (2016-04-29)

* Add logging support. A new `reporter` parameter to `register` is now
  available. This parameter defines how to configure the log reporter,
  using `Logs` and `Mirage_logs`. Log reporters can also be configured
  at configuration AND runtime using on the new `-l` or `--logs`
  command-line argument.  (mirage/mirage#534, by @samoht, @talex5 and @Drup)
* Allow to disable command-line parsing at runtime. There is a new
  `argv` parameter to the `register` function to allow to pass custom
  command-line argument parsing devices.  Use `register ~argv:no_argv`
  to disable command-line argument parsing. (mirage/mirage#493, by @samoht and @Drup)

### 2.8.0 (2016-04-04)

* Define an ICMP and ICMPV4 module type. ICMPV4 is included in, and
  surfaced by, the STACKV4 module type. The previous default behavior
  of the IPv4 module with respect to ICMP is preserved by STACKV4 and
  the tcpip_stack_direct function provided by mirage. (mirage/mirage#523, by
  @yomimono)
* Explicitly require OCaml compiler version 4.02.3 in opam files for
  mirage-types and mirage.

### 2.7.3 (2016-03-20)

* Fix another regression introduced in 2.7.1 which enable
  `-warn-error` by default. This is now controlled by a
  `--warn-error` flag on `mirage configure`. Currently it's
  default value is [false] but this might change in future
  versions (mirage/mirage#520)

### 2.7.2 (2016-03-20)

* Fix regression introduced in 2.7.1 which truncates the ouput of
  `opam install` and breaks `opam depext` (mirage/mirage#519, by @samoht)

### 2.7.1 (2016-03-17)

* Improve the Dockerfile (mirage/mirage#507, by @avsm)
* Use Astring (by @samoht)
* Clean-up dependencies automatically added by the tool
  - do not require `lwt.syntax`, `cstruct.syntax` and `sexplib`, which
    should make the default unikernels camlp4-free (mirage/mirage#510, mirage/mirage#515 by @samoht)
  - always require `mirage-platform` (mirage/mirage#512, by @talex5)
  - ensure that `mirage-types` and `mirage-types-lwt` are installed
* Turn on more warnings and enable "warning as errors".
* Check that the OCaml compiler is at least 4.02.3 (by @samoht)

### 2.7.0 (2016-02-17)

The mirage tool is now based on functoria. (mirage/mirage#441 mirage/mirage#450, by @Drup @samoht)
See https://mirage.io/blog/introducing-functoria for full details.

* Command line interface: The config file must be passed with the -f option
  (instead of being just an argument).
* Two new generic combinators are available, generic_stack and generic_kv_ro.
* `get_mode` is deprecated. You should use keys instead. And in particular
  `Key.target` and `Key.is_xen`.
* `add_to_ocamlfind_libraries` and `add_to_opam_packages` are deprecated. Both
  the `foreign` and the `register` functions now accept the `~libraries` and
  `~packages` arguments to specify library dependencies.

* If you were using `tls` without the conduit combinator, you will be
  greeted during configuration by a message like this:
  ```
The "nocrypto" library is loaded but entropy is not enabled!
Please enable the entropy by adding a dependency to the nocrypto device.
You can do so by adding ~deps:[abstract nocrypto] to the arguments of Mirage.foreign.
  ```
  Data dependencies (such as entropy initialization) are now explicit.
  In order to fix this, you need to declare the dependency like so:
  ```ocaml
open Mirage

let my_functor =
  let deps = [abstract nocrypto] in
  foreign ~deps "My_Functor" (foo @-> bar)
  ```
  `My_functor.start` will now take an extra argument for each
  dependencies. In the case of nocrypto, this is `()`.

* Remove `nat-script.sh` from the scripts directory, to be available
  as an external script.

### 2.6.1 (2015-09-08)

* Xen: improve the .xl file generation. We now have
  - `name.xl`: this has sensible defaults for everything including the
    network bridges and should "just work" if used on the build box
  - `name.xl.in`: this has all the settings needed to boot (e.g. presence of
    block and network devices) but all the environmental dependencies are
    represented by easily-substitutable variables. This file is intended for
    production use: simply replace the variables for the paths, bridges, memory
    sizes etc. and run `xl create` as before.

### 2.6.0 (2015-07-28)

* Better ARP support. This needs `mirage-tcpip.2.6.0` (mirage/mirage#419, by @yomimono)
  - [mirage-types] Remove `V1.IPV4.input_arp`
  - [mirage-types] Expose `V1.ARP` and `V1_LWT.ARP`
  - Expose a `Mirage.arp` combinator
* Provide noop configuration for default_time (mirage/mirage#435, by @yomimono)
* Add `Mirage.archive` and `Mirage.archive_of_files` to support attaching files
  via a read-only tar-formatted BLOCK (mirage/mirage#432, by @djs55)
* Add a .merlin file (mirage/mirage#428, by @Drup)

### 2.5.1 (2015-07-17)

* [mirage-types] Expose `V1_LWT.FS.page_aligned_buffer = Cstruct.t`

### 2.5.0 (2015-06-10)

* Change the type of the `Mirage.http_server` combinator. The first argument
  (the conduit server configuration) is removed and should now be provided
  at compile-time in `unikernel.ml` instead of configuration-time in
  `config.ml`:

    ```ocaml
(* [config.ml] *)
(* in 2.4 *) let http = http_server (`TCP (`Port 80)) conduit
(* in 2.5 *) let http = http_server conduit

(* [unikernel.ml] *)
let start http =
(* in 2.4 *) http (S.make ~conn_closed ~callback ())
(* in 2.5 *) http (`TCP 80) (S.make ~conn_closed ~callback ())
    ```

* Change the type of the `Mirage.conduit_direct` combinator.
  Previously, it took an optional `vchan` implementation, an optional
  `tls` immplementation and an optional `stackv4` implemenation. Now,
  it simply takes a `stackv4` implementation and a boolean to enable
  or disable the `tls` stack. Users who want to continue to use
  `vchan` with `conduit` should now use the `Vchan` functors inside
  `unikernel.ml` instead of the combinators in `config.ml`. To
  enable the TLS stack:

    ```ocaml
(* [config.ml] *)
let conduit = conduit_direct ~tls:true (stack default_console)

(* [unikernel.ml] *)
module Main (C: Conduit_mirage.S): struct
  let start conduit =
    C.listen conduit (`TLS (tls_config, `TCP 443)) callback
end
    ```

* [types] Remove `V1.ENTROPY` and `V1_LWT.ENTROPY`. The entropy is now
  handled directly by `nocrypto.0.4.0` and the mirage-tool is only responsible to
  call the `Nocrypto_entropy_{mode}.initialize` function.

* Remove `Mirage.vchan`, `Mirage.vchan_localhost`, `Mirage.vchan_xen` and
  `Mirage.vchan_default`. Vchan users need to adapt their code to directly
  use the `Vchan` functors instead of relying on the combinators.
* Remove `Mirage.conduit_client` and `Mirage.conduit_server` types.
* Fix misleading "Compiling for target" messages in `mirage build`
  (mirage/mirage#408 by @lnmx)
* Add `--no-depext` to disable the automatic installation of opam depexts (mirage/mirage#402)
* Support `@name/file` findlib's extended name syntax in `xen_linkopts` fields.
  `@name` is expanded to `%{lib}%/name`
* Modernize the Travis CI scripts

### 2.4.0 (2015-05-05)

* Support `mirage-http.2.2.0`
* Support `conduit.0.8.0`
* Support `tcpip.2.4.0`
* Add time and clock parameters to IPv4 (mirage/mirage#362, patch from @yomimono)
* Support for `ocaml-tls` 0.4.0.
* Conduit now takes an optional TLS argument, allowing servers to support
  encryption. (mirage/mirage#347)
* Add the ability to specify `Makefile.user` to extend the generated
  `Makefile`. Also `all`, `build` and `clean` are now extensible make
  targets.
* Remove the `mirage run` command (mirage/mirage#379)
* Call `opam depext` when configuring (mirage/mirage#373)
* Add opam files for `mirage` and `mirage-types` packages
* Fix `mirage --version` (mirage/mirage#374)
* Add a `update-doc` target to the Makefile to easily update the online
  documentation at http://mirage.github.io/mirage/

### 2.3.0 (2015-03-10)

* Remove the `IO_PAGE` module type from `V1`. This has now moved into the
  `io-page` pacakge (mirage/mirage#356)
* Remove `DEVICE.connect` from the `V1` module types.  When a module is
  functorised over a `DEVICE` it should only have the ability to
  *use* devices it is given, not to connect to new ones. (mirage/mirage#150)
* Add `FLOW.error_message` to the `V1` module types to allow for
  generic handling of errors. (mirage/mirage#346)
* Add `IP.uipaddr` as a universal IP address type. (mirage/mirage#361)
* Support the `entropy` version 0.2+ interfaces. (mirage/mirage#359)
* Check that the `opam` command is at least version 1.2.0 (mirage/mirage#355)
* Don't put '-classic-display' in the generated Makefiles. (mirage/mirage#364)

### 2.2.1 (2015-01-29)

* Fix logging errors when `mirage` output is not redirected. (mirage/mirage#355)
* Do not reverse the order of C libraries when linking.  This fixes Zarith
  linking in Xen mode. (mirage/mirage#341).
* Fix typos in command line help. (mirage/mirage#352).

### 2.2.0 (2014-12-18)

* Add IPv6 support. This alters some of the interfaces that were previously
  hardcoded to IPv4 by generalising them.  For example:

    ```ocaml
type v4
type v6

type 'a ip
type ipv4 = v4 ip
type ipv6 = v6 ip
    ```

Full support for configuring IPv6 does not exist yet, as this release is
intended for getting the type definitions in place before adding configuration
support.

### 2.1.1 (2014-12-10)

* Do not reuse the Unix linker options when building Xen unikernels.  Instead,
  get the linker options from the ocamlfind `xen_linkopts` variables (mirage/mirage#332).
  See `tcpip.2.1.0` for a library that does this for a C binding.
* Only activate MacOS X compilation by default on 10.10 (Yosemite) or higher.
  Older revisions of MacOS X will use the generic Unix mode by default, since
  the `vmnet` framework requires Yosemite or higher.
* Do not run crunched filesystem modules through `camlp4`, which significantly
  speeds up compilation on ARM platforms (from minutes to seconds!) (mirage/mirage#299).

### 2.1.0 (2014-12-07)

* Add specific support for `MacOSX` as a platform, which enables network bridging
  on Yosemite (mirage/mirage#329).  The `--unix` flag will automatically activate the new target
  if run on a MacOS X host.  If this breaks for you due to being on an older version of
  MacOS X, then use the new `--target` flag to set either Unix, MacOSX or Xen to the
  `mirage configure` command.
* Add `mirage.runtime` findlib library and corresponding Mirage_runtime module (mirage/mirage#327).
* If net driver in STACKV4_direct can't initialize, print a helpful error (mirage/mirage#164).
* [xen]: fixed link order in generated Makefile (mirage/mirage#322).
* Make `Lwt.tracing` instructions work for Fish shell too by improving quoting (mirage/mirage#328).

### 2.0.1 (2014-11-21)

* Add `register ~tracing` to enable tracing with mirage-profile at start-up (mirage/mirage#321).
* Update Dockerfile for latest libraries (mirage/mirage#320).
* Only build mirage-types if Io_page is also installed (mirage/mirage#324).

### 2.0.0 (2014-11-05)

* [types]: backwards incompatible change: CONSOLE is now a FLOW;
  'write' has a different signature and 'write_all' has been removed.
* Set on_crash = 'preserve' in default Xen config.
* Automatically install dependencies again, but display the live output to the
  user.
* Include C stub libraries in linker command when generating Makefiles for Xen.
* Add `Vchan`, `Conduit` and `Resolver` code generators.
* Generate a `*.xe` script which can upload a kernel to a XenServer.
* Generate a libvirt `*.xml` configuration file (mirage/mirage#292).
* Fix determination of `mirage-xen` location for paths with spaces (mirage/mirage#279).
* Correctly show config file locations when using a custom one.
* Fix generation of foreign (non-functor) modules (mirage/mirage#293)

### 1.2.0 (2014-07-05)

The Mirage frontend tool now generates a Makefile with a `make depend`
target, instead of directly invoking OPAM as part of `mirage configure`.
This greatly improves usability on slow platforms such as ARM, since the
output of OPAM as it builds can be inspected more easily.  Users will now
need to run `make depend` to ensure they have the latest package set,
before building their unikernel with `make` as normal.

* Improve format of generated Makefile, and also colours in terminal output.
* Add `make depend` target to generated Makefile.
* Set `OPAMVERBOSE` and `OPAMYES` in the Makefile, which can be overridden.
* Add an `ENTROPY` device type for strong random sources (mirage/mirage#256).

### 1.1.3 (2014-06-15)

* Build OPAM packages in verbose mode by default.
* [types] Add `FLOW` based on `TCPV4`.
* travis: build mirage-types from here, rather than 1.1.0.

### 1.1.2 (2014-04-01)

* Improvement to the Amazon EC2 deployment script.
* [types] Augment STACKV4 with an IPV4 module in addition to TCPV4 and UDPV4.
* Regenerate with OASIS 0.4.4 (which adds natdynlink support)

### 1.1.1 (2014-02-21)

* Man page fixes for typos and terminology (mirage/mirage#220).
* Activate backtrace recording by default (mirage/mirage#225).
* Fixes in the `V1.STACKV4` to expose UDPv4/TCPv4 types properly (mirage/mirage#226).

### 1.1.0 (2014-02-05)

* Add a combinator interface to device binding that makes the functor generation
  significantly more succinct and expressive.  This breaks backwards compatibility
  with `config.ml` files from the 1.0.x branches.
* Integrate the `mirage-types` code into `types`.  This is built as a separate
  library from the command-line tool, via the `install-types` Makefile target.

### 1.0.4 (2014-01-14)

* Add default build tags for annot, bin_annot, principal and strict_sequence.
* Renane `KV_RO` to `Crunch`

### 1.0.3 (2013-12-18)

* Do not remove OPAM packages when doing `mirage clean` (mirage/mirage#143)
* [xen] generate a simple main.xl, without block devices or network interfaces.
* The HTTP dependency now also installs `mirage-tcp-*` and `mirage-http-*`.
* Fix generated Makefile dependency on source OCaml files to rebuild reliably.
* Support `Fat_KV_RO` (a read-only k/v version of the FAT filesystem).
* The Unix `KV_RO` now passes through to the underlying filesystem instead of calling `crunch`, via `mirage-fs-unix`.

### 1.0.2 (2013-12-10)

* Add `HTTP` support.
* Fix `KV_RO` configuration for OPAM autoinstall.

### 1.0.1 (2013-12-09)

* Add more examples to the FAT filesystem test case.
* Fix `mirage-tcpip-*` support
* Fix `mirage-net-*` support

### 1.0.0 (2013-12-09)

* Adapt the latest library releases for Mirage 1.0 interfaces.

### 0.10.0 (2013-12.08)

* Complete API rewrite
* [xen] XL configuration phase is now created during configure phase, was during run phase.

### 0.9.7 (2013-08-09)

* Generate code that uses the `Ipaddr.V4` interface instead of `Nettypes`.

### 0.9.6 (2013-07-26)

* fix unix-direct by linking the unix package correctly (previously it was always dropped).

### 0.9.5 (2013-07-18)

* completely remove the dependency on obuild: use ocamlbuild everywhere now.
* adapt for mirage-0.9.3 OS.Netif interfaces (abstract type `id`).
* do not output network config when there are no `ip-*` lines in the `.conf` file.
* do not try to install `mirage-fs` if there is no filesystem to create.
* added `nat-script.sh` to setup xenbr0 with DNS, DHCP and masqerading under Linux.

### 0.9.4 (2013-07-09)

* build using ocamlbuild rather than depending on obuild.
* [xen] generate a symbol that can be used to produce stack traces with xenctx.
* mirari run --socket just runs the unikernel without any tuntap work.
* mirari run --xen creates a xl config file and runs `xl create -c unikernel.xl`.

### 0.9.3 (2013-06-12)

* Add a `--socket` flag to activate socket-based networking (UNIX only).
* Do not use OPAM compiler switches any more, as that's done in the packaging now.
* Use fd-passing in the UNIX backend to spawn a process.

### 0.9.2 (2013-03-28)

* Install `obuild` automatically in all compiler switches (such as Xen).
* Only create symlinks to `mir-foo` for a non-Xen target.
* Add a `mirari clean` command.
* Add the autoswitch feature via `mirari --switch=<compiler>` or the config file.

### 0.9.1 (2013-02-13)

* Fix Xen symlink upon build.
* Add a `--no-install` option to `mirari configure` to prevent invoking OPAM automatically.

### 0.9.0 (2013-02-12)

* Automatically install `mirage-fs` package if a filesystem crunch is requested.
* Remove the need for `mir-run` by including the final Xen link directly in Mirari.
* Add support for building Xen variants.
* Initial import of a unix-direct version.
samoht added a commit to samoht/opam-repository that referenced this pull request Mar 3, 2025
CHANGES:

- cohttp-lwt-unix: Add http/https proxy support for client requests (@art-w @MisterDA, mirage/ocaml-cohttp#1080)
- cohttp-mirage: Support conduit 8.0.0 (@hannesm, mirage/ocaml-cohttp#1104)

## v6.0.0 (2024-11-21)

- bump minimum dune version to 3.8 (@avsm)
- cohttp-eio: Use system authenticator in example.
- http, cohttp: remove the scheme field from requests. This means that
  [Request.uri] no longer returns the same URI as was to create the request
  with [Request.make] (@rgrinberg 1086)
- cohttp-eio: Remove unused `Client_intf` module (talex5 mirage/ocaml-cohttp#1081)
- cohttp-eio: Make server response type abstract and allow streaming in cohttp-eio (talex5 mirage/ocaml-cohttp#1024)
- cohttp-{lwt,eio}: server: add connection header to response if not present (ushitora-anqou mirage/ocaml-cohttp#1025)
- cohttp-curl: Curl no longer prepends the first HTTP request header to the output. (jonahbeckford mirage/ocaml-cohttp#1030, mirage/ocaml-cohttp#987)
- cohttp-eio: client: use permissive argument type for make_generic
- cohttp-eio: Improve error handling in example server (talex5 mirage/ocaml-cohttp#1023)
- cohttp-eio: Don't blow up `Server.callback` on client disconnections. (mefyl mirage/ocaml-cohttp#1015)
- http: Fix assertion in `Source.to_string_trim` when `pos <> 0` (mefyl mirage/ocaml-cohttp#1017)
- cohttp: `Cohttp.Request.make_for_client` no longer allows setting both
  `~chunked:true` and `~body_length`.
- cohttp-lwt-unix: Don't blow up when certificates are not available and no-network requests are made. (akuhlens mirage/ocaml-cohttp#1027)
  + Makes `cohttp-lwt.S.default_ctx` lazy.

## v6.0.0~beta2 (2024-01-05)

- cohttp-eio: Don't blow up `Server.run` on client disconnections. (mefyl mirage/ocaml-cohttp#1011)
- cohttp-eio: Match body encoding with headers. (mefyl mirage/ocaml-cohttp#1012)
- cohttp-lwt: Preserve extended `Server.S.IO` signature. (mefyl mirage/ocaml-cohttp#1013)

## v6.0.0~beta1 (2023-10-27)
- cohttp-eio: move new Cohttp.{Client,Server} modules under Cohttp.Generic (mseri mirage/ocaml-cohttp#1003)
- cohttp-eio: Add Client.make_generic and HTTPS support. (talex5 mirage/ocaml-cohttp#1002)
- cohttp: move generic client and server signatures to cohttp and use them across all packages. (mefyl mirage/ocaml-cohttp#984)
- cohttp-eio: Complete rewrite to follow common interfaces and behaviors. (mefyl mirage/ocaml-cohttp#984)

## v6.0.0~alpha2 (2023-08-08)
- cohttp-lwt: Do not leak exceptions to `Lwt.async_exception_hook`. (mefyl mirage/ocaml-cohttp#992, mirage/ocaml-cohttp#995)
- http.header, cohttp, cohttp-eio: remove "first" and "move_to_first" and the special treatment of the "host" header (mseri mirage/ocaml-cohttp#988, mirage/ocaml-cohttp#986)
- http.header: introduce "iter_ord" to guarantee iteration following the order of the entries in the headers (mseri mirage/ocaml-cohttp#986)
- do not omit mandatory null Content-Length headers (mefyl mirage/ocaml-cohttp#985)
- cohttp-async, cohttp-curl-async: compatibility with core/async v0.16.0 (mseri, dkalinichenko-js mirage/ocaml-cohttp#976)
- cohttp-lwt server: call conn_closed before drainig the body of response on error (pirbo mirage/ocaml-cohttp#982)
- cohttp-eio: Relax socket interface requirement on `Server.connection_handler`. (mefyl mirage/ocaml-cohttp#983)

## v6.0.0~alpha1 (2023-04-28)
- cohttp,cohttp-async server: correctly close broken streams (reported by Stéphane Glondu, fix by samhot and anuragsoni)
- cohttp-eio: remove unused code from tests to work with Eio 0.8 (talex5 mirage/ocaml-cohttp#967)
- Upgrade dune to v3.0 (bikallem mirage/ocaml-cohttp#947)
- cohttp-eio: allow client to optionally configure request pipelining (bikallem mirage/ocaml-cohttp#949)
- cohttp-eio: update to Eio 0.7 (talex5 mirage/ocaml-cohttp#952)
- cohttp-eio: update examples to use eio 0.7 primitives (bikallem mirage/ocaml-cohttp#957)
- cohttp-eio: generate Date header in responses (bikallem mirage/ocaml-cohttp#955)
- cohttp-eio: further improve Cohttp_eio.Client ergonomics (bikallem #?)
- cohttp-eio: server api improvements (bikallem mirage/ocaml-cohttp#962)

## v6.0.0~alpha0 (2022-10-24)
- cohttp-eio: ensure "Host" header is the first header in http client requests (bikallem mirage/ocaml-cohttp#939)
- cohttp-eio: add TE header in client. Check TE header is server (bikallem mirage/ocaml-cohttp#941)
- cohttp-eio: add User-Agent header to request from Client (bikallem mirage/ocaml-cohttp#940)
- cohttp-eio: add Content-Length header to request/response (bikallem mirage/ocaml-cohttp#929)
- cohttp-eio: add cohttp-eio client api - Cohttp_eio.Client (bikallem mirage/ocaml-cohttp#879)
- http: add requires_content_length function for requests and responses (bikallem mirage/ocaml-cohttp#879)
- cohttp-eio: use Eio.Buf_write and improve server API (talex5 mirage/ocaml-cohttp#887)
- cohttp-eio: update to Eio 0.3 (talex5 mirage/ocaml-cohttp#886)
- cohttp-eio: convert to Eio.Buf_read (talex5 mirage/ocaml-cohttp#882)
- cohttp lwt client: Connection cache and explicit pipelining (madroach mirage/ocaml-cohttp#853)
- http: add Http.Request.make and simplify Http.Response.make (bikallem mseri mirage/ocaml-cohttp#878)
- http: add pretty printer functions (bikallem mirage/ocaml-cohttp#880)
- New eio based client and server on top of the http library (bikallem mirage/ocaml-cohttp#857)
- New curl based clients (rgrinberg mirage/ocaml-cohttp#813)
  + cohttp-curl-lwt for an Lwt backend
  + cohttp-curl-async for an Async backend
- Completely new Parsing layers for servers (anuragsoni mirage/ocaml-cohttp#819)
  + Cohttp now uses an optimized parser for requests.
  + The new parser produces much less temporary buffers during read operations
    in servers.
- Faster header comparison (gasche mirage/ocaml-cohttp#818)
- Introduce http package containing common signatures and structures useful for
  compatibility with cohttp - and no dependencies (rgrinberg mirage/ocaml-cohttp#812)
- async(server): allow reading number of active connections (anuragsoni mirage/ocaml-cohttp#809)
- Various internal refactors (rgrinberg, mseri, mirage/ocaml-cohttp#802, mirage/ocaml-cohttp#812, mirage/ocaml-cohttp#820, mirage/ocaml-cohttp#800, mirage/ocaml-cohttp#799,
  mirage/ocaml-cohttp#797)
- http (all cohttp server backends): Consider the connection header in response
  in addition to the request when deciding on whether to keep a connection
  alive (anuragsoni, mirage/ocaml-cohttp#843)
  + The user provided Response can contain a connection header. That header
    will also be considered in addition to the connection header in requests
    when deciding whether to use keep-alive. This allows a handler to decide to
    close a connection even if the client requested a keep-alive in the
    request.
- async(server): allow creating a server without using conduit (anuragsoni mirage/ocaml-cohttp#839)
  + Add `Cohttp_async.Server.Expert.create` and
    `Cohttp_async.Server.Expert.create_with_response_action`that can be used to
    create a server without going through Conduit. This allows creating an
    async TCP server using the Tcp module from `Async_unix` and lets the user
    have more control over how the `Reader.t` and `Writer.t` are created.
- http(header): faster `to_lines` and `to_frames` implementation (mseri mirage/ocaml-cohttp#847)
- cohttp(cookies): use case-insensitive comparison to check for `set-cookies` (mseri mirage/ocaml-cohttp#858)
- New lwt based server implementation: cohttp-server-lwt-unix
  + This new implementation does not depend on conduit and has a simpler and
    more flexible API
- async: Adapt cohttp-curl-async to work with core_unix.
- *Breaking changes*
  + refactor: move opam metadata to dune-project (rgrinberg mirage/ocaml-cohttp#811)
  + refactor: deprecate Cohttp_async.Io (rgrinberg mirage/ocaml-cohttp#807)
  + fix: move more internals to Private (rgrinberg mirage/ocaml-cohttp#806)
  + fix: deprecate transfer encoding field (rgrinberg mirage/ocaml-cohttp#805)
  + refactor: deprecate Cohttp_async.Body_raw (rgrinberg mirage/ocaml-cohttp#804)
  + fix: deprecate more aliases (rgrinberg mirage/ocaml-cohttp#803)
  + refactor: deprecate connection value(rgrinberg mirage/ocaml-cohttp#798)
  + refactor: deprecate using attributes (rgrinberg mirage/ocaml-cohttp#796)
  + cleanup: remove cohttp-{curl,server}-async (rgrinberg mirage/ocaml-cohttp#904)
  + cleanup: remove cohttp-{curl,server,proxy}-lwt (rgrinberg mirage/ocaml-cohttp#904)
  + fix: all parsers now follow the spec and require `\r\n` endings.
    Previously, the `\r` was optional. (rgrinberg, mirage/ocaml-cohttp#921)
- `cohttp-lwt-jsoo`: do not instantiate `XMLHttpRequest` object on boot (mefyl mirage/ocaml-cohttp#922)

## v5.0.0 (2021-12-15)

- Cohttp.Header: new implementation (lyrm mirage/ocaml-cohttp#747)

  + New implementation of Header modules using an associative list instead of a map, with one major semantic change (function ```get```, see below), and some new functions (```clean_dup```, ```get_multi_concat```)
  + More Alcotest tests as well as fuzzing tests for this particular module.

  ### Purpose

  The new header implementation uses an associative list instead of a map to represent headers and is focused on predictability and intuitivity: except for some specific and documented functions, the headers are always kept in transmission order, which makes debugging easier and is also important for [RFC7230§3.2.2](https://tools.ietf.org/html/rfc7230#section-3.2.2) that states that multiple values of a header must be kept in order.

  Also, to get an intuitive function behaviour, no extra work to enforce RFCs is done by the basic functions. For example, RFC7230§3.2.2 requires that a sender does not send multiple values for a non list-value header. This particular rule could require the ```Header.add``` function to remove previous values of non-list-value headers, which means some changes of the headers would be out of control of the user. With the current implementation, an user has to actively call dedicated functions to enforce such RFCs (here ```Header.clean_dup```).

  ### Semantic changes
  Two functions have a semantic change : ```get``` and ```update```.

  #### get
  ```get``` was previously doing more than just returns the value associated to a key; it was also checking if the searched header could have multiple values: if not, the last value associated to the header was returned; otherwise, all the associated values were concatenated and returned. This semantics does not match the global idea behind the new header implementation, and would also be very inefficient.

  + The new ```get``` function only returns the last value associated to the searched header.
  + ```get_multi_concat``` function has been added to get a result similar to the previous ```get``` function.

  #### update
  ```update``` is a pretty new function (mirage/ocaml-cohttp#703) and changes are minor and related to ```get``` semantic changes.

  + ```update h k f``` is now modifying only the last occurrences of the header ```k``` instead of all its occurrences.
  + a new function ```update_all``` function has been added and work on all the occurrences of the updated header.

  ### New functions :

  + ```clean_dup```  enables the user to clean headers that follows the {{:https://tools.ietf.org/html/rfc7230#section-3.2.2} RFC7230§3.2.2} (no duplicate, except ```set-cookie```)
  + ```get_multi_concat``` has been added to get a result similar to the previous ```get``` function.

- Cohttp.Header: performance improvement (mseri, anuragsoni mirage/ocaml-cohttp#778)
  **Breaking** the headers are no-longer lowercased when parsed, the headers key comparison is case insensitive instead.

- cohttp-lwt-unix: Adopt ocaml-conduit 5.0.0 (smorimoto mirage/ocaml-cohttp#787)
  **Breaking** `Conduit_lwt_unix.connect`'s `ctx` param type changed from `ctx` to  `ctx Lazy.t`

- cohttp-mirage: fix deprecated fmt usage (tmcgilchrist mirage/ocaml-cohttp#783)
- lwt_jsoo: Use logs for the warnings and document it (mseri mirage/ocaml-cohttp#776)
- lwt: Use logs to warn users about leaked bodies and document it (mseri mirage/ocaml-cohttp#771)
- lwt, lwt_unix: Improve use of logs and the documentation, fix bug in the Debug.enable_debug function (mseri mirage/ocaml-cohttp#772)
- lwt_jsoo: Fix exception on connection errors in chrome (mefyl mirage/ocaml-cohttp#761)
- lwt_jsoo: Fix `Lwt.wakeup_exn` `Invalid_arg` exception when a js
  stack overflow happens in the XHR completion handler (mefyl mirage/ocaml-cohttp#762).
- lwt_jsoo: Add test suite (mefyl mirage/ocaml-cohttp#764).

## v4.0.0 (2021-03-24)

- cohttp.response: fix malformed status header for custom status codes (mseri aalekseyev mirage/ocaml-cohttp#752)
- remove dependency to base (samoht mirage/ocaml-cohttp#745)
- add GitHub Actions workflow (smorimoto mirage/ocaml-cohttp#739)
- `cohttp-lwt-jsoo`: Forward exceptions to caller when response is null (mefyl mirage/ocaml-cohttp#738)
- Use implicit executable dependency for generate.exe (TheLortex mirage/ocaml-cohttp#735)
- cohttp: fix chunked encoding of empty body (mefyl mirage/ocaml-cohttp#715)
- cohttp-async: fix body not being uploaded with unchunked Async.Pipe (mefyl mirage/ocaml-cohttp#706)
- cohttp-{async, lwt}: fix surprising behaviours of Body.is_empty (anuragsoni mirage/ocaml-cohttp#714 mirage/ocaml-cohttp#712 mirage/ocaml-cohttp#713)
- refactoring of tests (mseri mirage/ocaml-cohttp#709, dinosaure mirage/ocaml-cohttp#692)
- update documentation (dinosaure mirage/ocaml-cohttp#716, mseri mirage/ocaml-cohttp#720)
- fix deadlock in logging (dinosaure mirage/ocaml-cohttp#722)
- improve media type parsing (seliopou mirage/ocaml-cohttp#542, dinosaure mirage/ocaml-cohttp#725)
- [reverted] breaking changes to client and server API to use conduit 3.0.0 (dinosaure mirage/ocaml-cohttp#692). However, as the design discussion did not reach consensus, these changes were reverted to preserve better compatibility with existing cohttp users. (samoht mirage/ocaml-cohttp#741)

**Potentially breaking changes**

- remove `wrapped false` from the codebase (rgrinberg mirage/ocaml-cohttp#734)
- cohttp: add Uri.scheme to Request.t (brendanlong mirage/ocaml-cohttp#707)
- cohttp: update HTTP codes (emillon mirage/ocaml-cohttp#711)
- cohttp-lwt-jsoo: rename Cohttp_lwt_xhr to Cohttp_lwt_jsoo for consistency (mseri mirage/ocaml-cohttp#717)
- cohttp: fix transfer-encoding ordering in headers (mseri mirage/ocaml-cohttp#721)
- lower-level support for long-running cohttp-async connections (brendanlong mirage/ocaml-cohttp#704)
- add of_form and to_form functions to body (seliopou mirage/ocaml-cohttp#440, mseri mirage/ocaml-cohttp#723)
- cohttp-lwt: partly inline read_response, fix body stream leak (madroach dinosaure mirage/ocaml-cohttp#696).
  Note: there is a new warning that may show up in your logs when bodies are leaked, see also [mirage/ocaml-cohttp#730](mirage/ocaml-cohttp#730).
- add comparison functions for Request.t and Response.t via ppx_compare (msaffer-js dinosaure mirage/ocaml-cohttp#686)

## v3.0.0 - aborted

## v2.5.5 (2021-03-15)

- `Cohttp_async.resolve_local_file`, `Cohttp_lwt.resolve_local_file` and `Cohttp_lwt_unix.resolve_file`
  are now the same code under the hood (`Cohttp.Path.resolve_local_file`). The old names
  have been preserved for compatibility, but will be marked as deprecated in the next release. This
  changes the behavior of `Cohttp_lwt_unix.resolve_file`: it now percent-decodes the paths and blocks
  escaping from the docroot correctly. This also fixes and tests the corner cases in these methods
  when the docroot is empty. (ewanmellor mirage/ocaml-cohttp#755)

## v2.5.4 (2020-07-21)

- cohttp: a change in mirage/ocaml-cohttp#694 modified the semantics of Header.replace.
  The semantics change is reverted, and a new Header.update function
  is introduced, following the semantics of Map.update. (mirage/ocaml-cohttp#702 mseri)
- cohttp: reimplement update to support compilers that are older than
  OCaml 4.06 (mirage/ocaml-cohttp#703 mseri)

## v2.5.3 (2020-06-27)

- cohttp-async: adapt to async >= v0.14 (mirage/ocaml-cohttp#699 copy)

## v2.5.2 (2020-06-27)

- cohttp, cohttp-async: correctly set host header for unix domain sockets,
  implement Unix domain socket support for cohttp-async (mirage/ocaml-cohttp#698 Leonidas-from-XIV)
- cohttp: better body encoding management when creating request and
  response, and correction of Header.replace function (mirage/ocaml-cohttp#694 lyrm)

## v2.5.1 (2020-02-18)

- cohttp-lwt: pass ctx through HEAD client requests (mirage/ocaml-cohttp#689 hannesm)

## v2.5.0 (2019-12-17)

- cohttp-async: support async v0.13.0 (mirage/ocaml-cohttp#680 copy)
- cohttp-lwt-jsoo: support js_of_ocaml 3.5.0 and higher (avsm)

## v2.4.0 (2019-11-08)

- mirage: adapt to new mirage interfaces: mirage-flow 2.0.0,
  mirage-channel 4.0.0, mirage-kv 3.0.0 (mirage/ocaml-cohttp#678 hannesm)
- async: use Pipe.singleton instead of Pipe.of_list as it is more efficient
  (mirage/ocaml-cohttp#677 smuenzel-js)

## v2.3.0 (2019-08-18)

- use conduit-mirage instead of mirage-conduit, which was renamed
  upstream in conduit. The minimum OCaml version supported for
  conduit-mirage is now OCaml 4.07 and higher. (mirage/ocaml-cohttp#672 avsm)
- remove deprecation warnings in OCaml 4.08.0 using stdlib-shims (mirage/ocaml-cohttp#672 avsm)
- async: do not read body if none is present (mirage/ocaml-cohttp#671 emillon)

## v2.2.0 (2019-07-20)

- Previously if the client closed the connection while cohttp was
  handling a request, the server would crash (by default, unless the
  user overrode that using `on_exn` or changing Lwt's async exception
  handler). Now, cohttp will just log this at `info` level and
  continue. Exceptions produced by user code are logged as errors,
  while other exceptions generated by cohttp call back to the conduit
  exception handler, as before. (mirage/ocaml-cohttp#669 talex5)

## v2.1.3 (2019-07-12)

- support uri.3.0.0 that has optional sexp support (mirage/ocaml-cohttp#668 avsm)
- use re.1.9.0 api to remove deprecation warnings (mirage/ocaml-cohttp#664 vbmithr)

## v2.1.2 (2019-04-09)

- cohttp: handle empty cookie components gracefully without raising
  an exception (mirage/ocaml-cohttp#663 martinslota)

## v2.1.1 (2019-04-05)

- `cohttp-mirage`: remove dependency on the `result` module
  (mirage/ocaml-cohttp#662 hannesm)
- Support Async v0.12.0 and higher (mirage/ocaml-cohttp#661 copy)

## v2.1.0 (2019-03-01)

- `cohttp-mirage`: update to the newest `Mirage_kv.RO` API

## v2.0.0 (2019-02-04)

Compatibility breaking interface changes:

Async: Expert response action no longer writes empty HTTP body (mirage/ocaml-cohttp#647 by andreas)

In cohttp.0.99, a number of subpackages were turned into explicit
opam packages to simplify dependency management.
To aid migration, some compatibility shims were left in place so that
the old findlib names would continue to work. They have now been removed
as of this release.  If you were still using them, then please rename
them as follows:
- `cohttp.lwt-core` -> `cohttp-lwt`
- `cohttp.lwt` -> `cohttp-lwt-unix`
- `cohttp.js` -> `cohttp-lwt-jsoo`
- `cohttp.async` -> `cohttp-async`
- `cohttp.top` -> `cohttp-top`

Other changes and bugfixes:
* Lwt, Mirage: Add log warnings for uncaught exceptions (mirage/ocaml-cohttp#592 by ansiwen)
* Log invalid client input and do not catch out of memory exceptions (mirage/ocaml-cohttp#652 hannesm)
* Port opam files to opam2 and add local synopsis and descriptions.
* Lwt: Add Expert response action for servers (mirage/ocaml-cohttp#647 by andreas)
* Use the namespaced `js_of_ocaml` interfaces from 3.3.0 onwards (mirage/ocaml-cohttp#654 avsm)
* Use Base64 3.1.0 interfaces (mirage/ocaml-cohttp#655 avsm)
* Clean up redundant conflicts in the `opam` files (avsm)

## v1.2.0 (2018-10-19)

* Support more than a single chunk extension for RFC7320 compliance (mirage/ocaml-cohttp#618 by djs55)
* Lwt-unix: add a `?backlog` argument to the serve function (samoht)
* Use the uri.2.0.0 interfaces for sexpression generation of types (avsm)
* Switch to `sexplib0` for a more lightweight s-expression library (mseri)
* Minimum OCaml compiler version requirement is now 4.04.1 (mseri)
* Add an example of using custom resolvers to the README (mseri)

## v1.1.1 (2018-08-13)

* Update to be compatible with new async/core (mirage/ocaml-cohttp#607 by rgrinberg)
* Remove use of deprecated `Lwt_logs` (mirage/ocaml-cohttp#609 by raphael-proust)
* Do not rely on locale for printing qvalues (mirage/ocaml-cohttp#611 by vbmithr)
* Ppx dependencies aren't just build time dependencies (mirage/ocaml-cohttp#625 by rgrinberg)

## v1.1.0 (2018-03-28)

* Add an "expert mode" to hand off raw responses to a custom handler,
  which in turns makes protocols like Websockets easier (mirage/ocaml-cohttp#488 by msaffer).
* Set the user-agent by default if one is not provided (mirage/ocaml-cohttp#586 by TheCBaH).
* Fix typo in the `cohttp.js` META file.
* Refresh use of the Re library to the latest version (mirage/ocaml-cohttp#602 by rgrinberg).
* Rearrange the ppx dependencies to be more specific (mirage/ocaml-cohttp#596 by yomimono).
* Explicitly depend on sexplib in the Async backend (mirage/ocaml-cohttp#605 by kevinqiu).

## v1.0.2 (2018-01-06)

* Support Async v0.10.0 and OCaml 4.06.0 (mirage/ocaml-cohttp#588 via vbmithr)
* Require `ppx_type_conv`>=v0.9.1` due to a bug with duplicate modules
  present in earlier versions.

## v1.0.1 (2018-01-03)

* cohttp-mirage: expose the missing IO module (mirage/ocaml-cohttp#594, samoht)
* cohttp-mirage: catch exceptions when closing channels in mirage client
  (mirage/ocaml-cohttp#589, ansiwen)

## v1.0.0 (2017-11-16)

* opam: rename `mirage-http` to `cohttp`-mirage` (mirage/ocaml-cohttp#572)
* cohttp-lwt{,-unix}: wrap the libraries in top-level modules (mirage/ocaml-cohttp#568)
* opam: improve dependencies (mirage/ocaml-cohttp#574, mirage/ocaml-cohttp#566, mirage/ocaml-cohttp#575)
* cohttp: add the convenience function `Header.is_empty` (mirage/ocaml-cohttp#576)
* fix compatibility with OCaml 4.06 and `-safe-string` (mirage/ocaml-cohttp#580, mirage/ocaml-cohttp#581)

## v0.99.0 (2017-07-12)

Port build to jbuilder, and break up OPAM packages into multiple
independent packages instead of being optional dependencies against
the main `cohttp` package. This makes it significantly easier to
depend on precisely the libraries you need, but requires porting
applications to use the new `ocamlfind` and `opam` scheme.

The new package layout is:

- `cohttp`: the main `Cohttp` module
- `cohttp-lwt`: the portable Lwt implementation
- `cohttp-lwt-unix`: the Lwt/Unix implementation
- `cohttp-lwt-jsoo`: the js-of-ocaml JavaScript implementation
- `cohttp-async`: the Jane Street Async implementation
- `mirage-http`: the MirageOS compatible implementation
- `cohttp-top`: a toplevel printer for the Cohttp types.

In each of these packages, the `opam` and `ocamlfind` package
names are now _the same_, so you will need to rename the former
subpackages such as `cohttp.async` to `cohttp-async`.  The
implementation is otherwise the same, so no other code changes
should be required.

In return for these breaking changes to the packaging, it is
now significantly easier to depend on a particular backend,
also for us to rev the interfaces towards a stable 1.0 release.
Jbuilder also builds the source tree around 4x faster than it
did previously.

A number of deprecation warnings have been added to the source
tree as well to mark the interfaces that will be removed in 1.0.
These are `Cohttp_lwt.{Client,Server,Net}`, and a `Cohttp_lwt.Body`
alias was added to deprecate the direct use of `Cohttp_lwt_body`.
This will let us unify the namespaces of all the packages to use
a single top-level module for each package in the future.

Most of the release and packaging work here was done by rgrinberg
and avsm.

## 0.22.0 (2017-03-09)

* Lwt: ensure conn_closed is closed once client goes away (mirage/ocaml-cohttp#528)
* Use the Logs library for logging. (mirage/ocaml-cohttp#532)

## 0.21.1 (2017-02-18)
* Remove -principal from type checking temporarily, to workaround
  a bug in the OCaml 4.03 type checker that causes compilation
  hangs (http://caml.inria.fr/mantis/view.php?id=7305).
* Improve documentation in the `test_xhr.ml` js_of_ocaml test.
* XHR: Allow setting withCredentials
* Async: pass along ?ssl_config when connecting to Uri's (mirage/ocaml-cohttp#510)
* Lwt: Add on ?on_exn to Server.create (mirage/ocaml-cohttp#518)
* Add Header.to_frames

## 0.21.0 (2016-05-22)
* Allow to request paths as strings (mirage/ocaml-cohttp#470, mirage/ocaml-cohttp#478)

## 0.20.2 (2016-04-04)
* Update META version (mirage/ocaml-cohttp#473)
* uri.services is only required by cohttp.async

0.20.1 (2016-04-01)
* Switch cohttp to use ppx (mirage/ocaml-cohttp#457)
* Lwt: Fix leak on HEAD client requests (mirage/ocaml-cohttp#467)

0.20.0 (2016-03-25)
* Switch to pa_fields_conv and pa_sexp_conv for camlp4 extensions (mirage/ocaml-cohttp#465)
* Compatibility with latest async (mirage/ocaml-cohttp#468)
* Async: Add support for SSL parameters in client (mirage/ocaml-cohttp#466)
* Lwt: ignore Sig.sigpipe under Windows (mirage/ocaml-cohttp#456)
* Lwt: Fix FD leak (mirage/ocaml-cohttp#447)
* Lwt: Log uncaught user exceptions
* Async: Close non-persistent async connections (mirage/ocaml-cohttp#442)

0.19.3 (2015-09-28):
* Support Async 113.00 by explicitly using the blocking Core `printf` (mirage/ocaml-cohttp#431)
* cohttp_curl_async: add `-data-binary` to send POST data. (mirage/ocaml-cohttp#425)

0.19.2 (2015-08-20):

* Improve Cohttp_async.Client error handling. When a Uri.t fails to resolve it is
  now included in the error. (mirage/ocaml-cohttp#420)

0.19.1 (2015-08-08):

* Bring make_body_writer and write_header in Cohttp.S.Http_io. Needed by
  ocaml-git

0.19.0 (2015-08-05):
Compatibility breaking interface changes:
* Remove `read_form` from the `Request/Response/Header` interfaces
  as this should be done in `Body` handling instead (mirage/ocaml-cohttp#401).

New features and bug fixes:
* Remove `IO.write_line` as it was unused in any interfaces.
* Do not use the `lwt` camlp4 extension. No observable external difference.
* Do not return a code stacktrace in the default 500 handler.
* Add `Cohttp.Header.compare` (mirage/ocaml-cohttp#411)
* Fix typos in CLI documentation (mirage/ocaml-cohttp#413 via moonlightdrive)
* Use the Lwt 2.5.0 buffer API.
* `Cohttp_lwt.read_response` now has a non-optional `closefn` parameter (mirage/ocaml-cohttp#400).
* Add a `Cohttp_lwt_s` module that contains all the Lwt module types
  in one convenient place (mirage/ocaml-cohttp#397).

0.18.3 (2015-07-12):
* Allow `DELETE` requests to have request bodies (mirage/ocaml-cohttp#383).
* Improve the Lwt client `callv` for HTTP/1.1 pipelined
  requests (mirage/ocaml-cohttp#379 via Török Edwin).

0.18.2 (2015-06-19):
* Do not add content encoding for 204's (mirage/ocaml-cohttp#375)

0.18.1 (2015-06-05):
* Remove trailing whitespace from headers (mirage/ocaml-cohttp#372)
* Don't reverse order of list valued headers (mirage/ocaml-cohttp#372)

0.18.0 (2015-06-02):
* Add Cohttp_async.Client.callv. Allows for making requests while reusing an
  HTTP connection (mirage/ocaml-cohttp#344)
* Responses of status 1xx/204/304 have no bodies and cohttp should not attempt
  to read them (mirage/ocaml-cohttp#355)
* Add top level printers. See cohttp.top findlib package (mirage/ocaml-cohttp#363)
* Add `Header.to_string` (mirage/ocaml-cohttp#362)
* Fix chunk truncation in chunked transfer encoding (mirage/ocaml-cohttp#360)

Compatibility breaking interface changes:
* Remove `Request`/`Response` modules outside of Cohttp pack (mirage/ocaml-cohttp#349)

0.17.2 (2015-05-24):
* Remove dependency on the Lwt Camlp4 syntax extension (mirage/ocaml-cohttp#334).
* Add `make github` target to push documentation to GitHub Pages
  (mirage/ocaml-cohttp#338 from Jyotsna Prakash).
* Add Async integration tests and consolidate Lwt tests using the
  new framework (mirage/ocaml-cohttp#337).
* Fix allocation of massive buffer when handling fixed size http bodies (mirage/ocaml-cohttp#345)

0.17.1 (2015-04-24):
* [async] Limit buffer size to a maximum of 32K in the Async backend
  (mirage/ocaml-cohttp#330 from Stanislav Artemkin).
* Add `Cohttp.Conf.version` with the library version number included.
* Remove debug output from `cohttp-curl-async`.
* Add the beginning of a `DESIGN.md` document to explain the library structure.

0.17.0 (2015-04-17):

Compatibility breaking interface changes:
* `CONNECT` and `TRACE` methods added to `Code`.Exhaustive matches will need updating.

New features and bug fixes:
* `Link` header parsing has been added as `Cohttp.Link`, `Header.get_links` and `Header.add_links`
* `cohttp_server_*` now obeys `HEAD` requests and responds 405 to unknown methods
* `Cohttp_async.Server.response` type is now exposed as a `response * body` pair
* Failure to read a body in a pipelined response no longer terminates the stream
* Fix `cohttp_curl_lwt -X HEAD` sending empty chunked body (mirage/ocaml-cohttp#313)
* Fix a bug which left extra `\r\n` in buffer at end of chunked reads
* Fix handling of request URI for query strings and `CONNECT` proxies (mirage/ocaml-cohttp#308, mirage/ocaml-cohttp#318)
* Fix precedence of `Host` header when request-URI is absolute URI
* Fix request URI path to be non-empty except for * requests (e.g. `OPTIONS *`)

0.16.1 (2015-04-09):
New features and bug fixes:
* Fix handling of request paths starting with multiple slashes (mirage/ocaml-cohttp#308)

0.16.0 (2015-03-23):

Compatibility breaking interface changes:
* Response.t and Request.t fields are no longer mutable
* [lwt] Fix types in `post_form` to be a `string * string list` instead
  of a `Header.t` (mirage/ocaml-cohttp#257)
* Simplify the `Net` signature which needs to be provided for Lwt servers
  to not be required.  Only the Lwt client needs a `Net` functor argument
  to make outgoing connections. (mirage/ocaml-cohttp#274)
* The `Request` and `Response` records are no longer mutable, so use
  functional updates instead via `Fieldslib.Field.fset Request.Fields.<field>`. (mirage/ocaml-cohttp#296)
* `Request.has_body` does not permit a body to be set for methods that
  RFC7231 forbids from having one (`HEAD`, `GET` and `DELETE`).

New features and bug fixes:
* Fix linking problem caused by sub-libraries using cohttp modules outside the
  cohttp pack.
* Added async client for S3. (mirage/ocaml-cohttp#304)
* Fix String_io.read_line to trim '\r' from end of string (mirage/ocaml-cohttp#300)
* Fix `cohttp-server-lwt` to correctly bind to a specific interface (mirage/ocaml-cohttp#298).
* Add `Cohttp_async.request` to send raw, unmodified requests.
* Supplying a `content-range` or `content-range` header in any client
  request will always override any other encoding preference (mirage/ocaml-cohttp#281).
* Add a `cohttp-lwt-proxy` to act as an HTTP proxy. (mirage/ocaml-cohttp#248)
* Extend `cohttp-server-async` file server to work with HTTPS (mirage/ocaml-cohttp#277).
* Copy basic auth from `Uri.userinfo` into the Authorization header
  for HTTP requests. (mirage/ocaml-cohttp#255)
* Install binaries via an OPAM `.install` file to ensure that they are
  reliably uninstalled. (mirage/ocaml-cohttp#252)
* Use the `magic-mime` library to add a MIME type by probing filename
  during static serving in the Lwt/Async backends. (mirage/ocaml-cohttp#260)
* Add `Cohttp.Header.add_opt_unless_exists` to set a header only if
  an override wasn't supplied, and to initialise a fresh Header value
  if none is present.
* Do not override user-supplied headers in `post_form` or `redirect`.
* `Request.make` does not inject a `transfer-encoding` header if there
  is no body present in the request (mirage/ocaml-cohttp#246).
* `Server.respond` no longer overrides user-supplied headers that
  specify the `content-length` or `transfer-encoding` headers (mirage/ocaml-cohttp#268).
* `cohttp_server_lwt` and `cohttp_server_async` now include sizes in
  directory listing titles
* Add `Header.add_multi` to initialise a header structure with multiple
  fields more efficiently (mirage/ocaml-cohttp#272).
* Expose `IO.ic` and `IO.oc` types for `Cohttp_async` (mirage/ocaml-cohttp#271).
* Skip empty body chunks in `Transfer_io.write` (mirage/ocaml-cohttp#270).
* With the Lwt backend, `read` hangs if trying to fetch more than
  `Sys.max_string_length` (which can be triggered on 32-bit platforms).
  Read only a maximum that fits into a string (mirage/ocaml-cohttp#282).
* `cohttp-curl-lwt` now takes http method as parameter (mirage/ocaml-cohttp#288)
* Fix installation of server binaries in OPAM metadata. (mirage/ocaml-cohttp#295)

0.15.2 (2015-02-15):
* When transfer encoding is unknown, read until EOF when body size is unknown. (mirage/ocaml-cohttp#241)
* Add some missing documentation to `Cohttp.S.IO` signature. (mirage/ocaml-cohttp#233)
* Add `Cohttp.Header.mem` to check if a header exists.
* Add `Cohttp.Conf` module to expose the library version number. (mirage/ocaml-cohttp#259)
* Add `Cohttp.Header.add_unless_exists` to update a key if it doesn't already exist. (mirage/ocaml-cohttp#244)
* Add `Cohttp.Header.get_location` to retrieve redirection information. (mirage/ocaml-cohttp#254)
* [async] Clean up the `Net.lookup` function to use `Or_error.t` instead of raising. (mirage/ocaml-cohttp#247)
* [tests] Add more tests for `content-range` handling. (mirage/ocaml-cohttp#249)

0.15.1 (2015-01-10):
* Lwt 2.4.7 renamed `blit_bytes_string` to `blit_to_bytes`, so depend
  on the newer API now. (mirage/ocaml-cohttp#230)
* Use `cmdliner` in all of the Lwt client and server binaries.  This gives
  `cohttp-lwt-server` a nice Unix-like command-line interface now that
  can be viewed with the `--help` option. (mirage/ocaml-cohttp#218 via Runhang Li)
* Improve `oasis` constraints and regenerate `opam` file (mirage/ocaml-cohttp#229 via
  Christophe Troestler).

0.15.0 (2014-12-24):

Compatibility breaking interface changes:
* Change `Cohttp_lwt_body.map` to use a non-labelled type to fit the Lwt
  style better (mirage/ocaml-cohttp#200).
* Depend on Base64 version 2, which uses `B64` as the toplevel module name (mirage/ocaml-cohttp#220).

New features and bug fixes:
* Remove use of deprecated `Lwt_unix.run` and replace it with `Lwt_main.run`.
  Should be no observable external change (mirage/ocaml-cohttp#217).
* Improve ocamldoc of `Cohttp.S` signature (mirage/ocaml-cohttp#221).

0.14.0 (2014-12-18):

Compatibility breaking interface changes:
* Simplify the Lwt server signature, so that manual construction of
  a `callback` is no longer required (mirage/ocaml-cohttp#210).
  Code that previous looked like:

```
   let conn_closed (_,conn_id) () = <...>
   let config = { Server.callback; conn_closed } in
```

should now be:

```
   let conn_closed (_,conn_id) = <...>
   let config = Server.make ~callback ~conn_closed () in
```

* Remove the `Cohttp.Base64` module in favour of the external `base64`
  library (which is now a new dependency).

New features and bug fixes:
* Lwt `respond_error` now defaults to an internal server error if no
  status code is specified (mirage/ocaml-cohttp#212).
* Modernise the `opam` file using the OPAM 1.2 workflow (mirage/ocaml-cohttp#211).
* Flush the response body to the network by default, rather than
  buffering by default.  The `?flush` optional parameter can still
  be explicitly set to false if flushing is not desired (mirage/ocaml-cohttp#205).

0.13.0 (2014-12-05):

Compatibility breaking interface changes:

* Add sexp converters for Conduit contexts and `Lwt` client and server
  modules and module types.

New features and bug fixes:
* Can use the Conduit 0.7+ `CONDUIT_TLS=native` environment variable to
  make HTTPS requests using the pure OCaml TLS stack instead of depending
  on OpenSSL bindings.  All of the installed binaries (client and server)
  can work in this mode.
* Add `Cohttp_lwt_unix_debug` which lets libraries control the debugging
  output from Cohttp.  Previously the only way to do this was to set the
  `COHTTP_DEBUG` environment variable at the program start.
* Add `cohttp-curl-lwt` as a lightweight URI fetcher from the command-line.
  It uses the `cmdliner` as a new dependency.
* Remove build dependency check on `lwt.ssl` for `cohttp.lwt`.
  This has been moved to conduit, so only `lwt.unix` is needed here now.

0.12.0 (2014-11-07):

Compatibility breaking interface changes:

* Rename `Cohttp.Auth.t` to `Cohttp.Auth.credential` and `Cohttp.Auth.req`
  to `Cohttp.Auth.challenge`.  Also expose an `Other` variant
  to make it more extensible for unknown authentication types. The
  `Cohttp.Auth` functions using these types have also been renamed accordingly.
* Rename `Cohttp.Transfer.encoding_to_string` to `string_of_encoding`
  for consistency with the rest of Cohttp's APIs.
* The `has_body` function in the Request and Response modules now
  explicitly signals when the body size is unknown.
* Move all the module type signatures into `Cohttp.S`.
* If users have percent-encoded file names, their resolution is changed:
 `resolve_local_file` in `Cohttp_async` and `Cohttp_lwt` now always
  percent-decode paths (mirage/ocaml-cohttp#157)
* Remove the `Cohttp_lwt.Server.server` type synonym to `t`.
* When reading data from a HTTP body stream using the `Fixed` encoding,
  we need to maintain state (bytes remaining) so we know when to finish.
  The `Cohttp.Request` and `Cohttp.Response` interfaces now expose a
  `reader` and `writer` types to track this safely.
* Add `is_empty` function to the `Cohttp.S.Body` module type.
* Add `Strings` representation to `Cohttp.Body` to efficiently hold a
  list of body chunks.
* Move flushing logic for HTTP bodies into the portable `Request` and
  `Response` modules instead of individual Lwt and Async backends.
* Port module interfaces to the latest Conduit (0.6.0+) API.
* Cohttp requires OCaml 4.01.0 or higher now.

New features and bugfixes:

* Add a `Cohttp_lwt_xhr` JavaScript backend that enables Cohttp logic to be
  mapped to `XMLHTTPRequest` in browsers via `js_of_ocaml` (via Andy Ray).
* Add a `Cohttp.String_io` and `String_io_lwt` module that uses OCaml
  `string` or `Buffer.t` to read and write HTTP requests and responses
  instead of network connections.
* `cohttp_server_lwt` and `cohttp_server_async` now return better errors (mirage/ocaml-cohttp#158)
* `cohttp_server_lwt` and `cohttp_server_async` now serve indexes directly (mirage/ocaml-cohttp#162)
* [lwt] Add `stop` thread to terminate a running server if it finishes (mirage/ocaml-cohttp#147).
* Add `Cohttp.Connection.compare` to make ordering of connections possible.
* Add `Body.map` and `Body.as_pipe` to work with HTTP bodies more easily.
* Remove link-time dependency on camlp4 via META fixes (mirage/ocaml-cohttp#127).
* Support HTTP methods and versions other than the standard ones. (mirage/ocaml-cohttp#142).
* Improve `cohttp_server_lwt` and `cohttp_server_async` directory listings (mirage/ocaml-cohttp#158)
* Fix `Cohttp_async.resolve_local_file` directory traversal vulnerability (mirage/ocaml-cohttp#158)
* [async] In the Async server, do not close the Reader too early.
* [async] Close file descriptors more eagerly in the HTTP client (mirage/ocaml-cohttp#167).
* Reduce thread allocation by replacing `return <const>` with `return_none`,
  `return_unit` or `return_nil`.

0.11.2 (2014-04-21)
* Fix build by add a missing build-deps in _oasis.

0.11.1 (2014-04-17):
* Remove an errant async_ssl reference left in the _oasis file that is
  now handled by the Conduit library (mirage/ocaml-cohttp#116).
* Add an Lwt-based SimpleHTTPServer equivalent as `cohttp-server-lwt` (mirage/ocaml-cohttp#108).
* `Cohttp.Connection.t` now exposes sexp accessor functions (mirage/ocaml-cohttp#117).

0.11.0 (2014-04-01):
* Remove dependency on `ocaml-re` in order to make library POSIX thread-safe.
* Shift most of the connection handling logic out to a Conduit library that
  worries about which SSL library to use, and fails if SSL is not available.
* Add Async-SSL support for both client and server (mirage/ocaml-cohttp#102).
* Add Lwt-SSL support for the server side (the client side existed before).
* Fix buggy Async chunked POST handling.

0.10.0 (2014-03-02):
* Interface change: The `Request` and `Response` module types now explicitly
  signal `Eof` and `Invalid` (for errors), to help the backend distinguish them.
* Interface change: Unify HTTP body handling across backends into a `Cohttp.Body`
  module.  This is extended by Async/Lwt implementations with their specific
  ways of handling bodies (Pipes for Async, or Lwt_stream for Lwt).
* [lwt] Interface change: HTTP client calls now raise Lwt exceptions rather
  than return an option type.  This permits better error handling in Lwt.
* [lwt] Interface change: The `Server` callback now always provides a `body`
  argument, since `Cohttp_lwt_body` now explicitly supports empty bodys.
* Add `Cohttp.Header.is_keep_alive` to test if a connection should be reused.
* [lwt] Respect the `keep-alive` header in the server request handling.
* [async] Add a `Body` that takes a `Pipe` or a `string`, similarly to Lwt.
* Install `cohttp-server` binary even if tests are disabled.
* Begin an `examples` directory with some simple uses of the library.

0.9.16 (2014-01-30):
* Add some module type equalities in `Cohttp_lwt_unix` so that
  `Cohttp_lwt_unix.Server.Request.IO.ic` can be equivalen to `Lwt_io.input_channel`.
* Add sexp converters to most Cohttp types (mirage/ocaml-cohttp#83).
* Improve Travis tests to cover more upstream users of Cohttp.
* Refactor build flags to let the portable Lwt-core be built independently of Lwt.unix.

0.9.15 (2014-01-11):
* Remove `Cohttp_mirage` libraries, which have now moved to `mirage/mirage-http-*` on GitHub.
* Add an "HTTP only" `Cookie` attribute (mirage/ocaml-cohttp#69).
* Fix parsing of cookies with `=` in the values (mirage/ocaml-cohttp#71).
* Add `Max-age` support for cookies (mirage/ocaml-cohttp#70).
* Make the `Response` record fields mutable to match the `Request` (mirage/ocaml-cohttp#67).
* Fix compilation with Async 109.58.00 (mirage/ocaml-cohttp#77).
* Make Header handling case-insensitive (by forcing lowercase) (mirage/ocaml-cohttp#75).
* Remove the `>>` operator as it was unused and had incorrect precedence (mirage/ocaml-cohttp#79).

0.9.14 (2013-12-15):
* Install a `cohttp-server` binary that serves local directory contents via a web server (mirage/ocaml-cohttp#54).
* Add a `flush` function to the `IO` module type and implement in Lwt/Async/Mirage.
* Add option `flush` support in the Async and Lwt responders (mirage/ocaml-cohttp#52).
* Autogenerate HTTP codes from citricsquid's JSON representation of the HTTP RFCs.
* Always set `TCP_NODELAY` for Lwt/Unix server sockets for low-latency responses (mirage/ocaml-cohttp#58).
* Added a Server-Side Events test-case from the HTML5 Doctor. See `lib_test/README.md`.
* Async.Server response now takes an optional `body` rather than a mandatory `body option` (mirage/ocaml-cohttp#62).
* Regenerate build system using OASIS 0.4.0.

0.9.13 (2013-12-10):
* The `cohttp.lwt-core` is now installed as an OS-independent Lwt library.
* Add support for Mirage 1.0, via `cohttp.mirage-unix` and `cohttp.mirage-xen`.
* Add a new `Cohttp.Connection` module to manage server's connections identifiers.
* Share the same configuration type for the different server implementations.
* Add `Accept_types` module to the `Cohttp` pack.

0.9.12 (2013-11-28):
* Improve documentation for `Cohttp.Header`.
* Expose Fieldslib setters and getters for most of the `Cohttp` types (mirage/ocaml-cohttp#38).
* `Cohttp.Set_cookie.t` is no longer an abstract type to make it easier to update (mirage/ocaml-cohttp#38).
* [Lwt] ignore SIGPIPE unconditionally if using the Lwt/Unix module (mirage/ocaml-cohttp#37).
* Rename `Cookie` creation parameters for consistency (interface breaking, see mirage/ocaml-cohttp#44).
* Fix transfer-length detection (regression from 0.9.11 in mirage/ocaml-cohttp#42).
* Add Merin editor file (mirage/ocaml-cohttp#41).

0.9.11 (2013-10-27):
* Request module: When sending a request, add the port information in the host header field if available.
* Request module: When parsing a request, add scheme, host and port information in the uri.
* TCP server: When creating the socket for the server, do not force PF_INET6 but take the sockaddr value.
* Add HTTP OPTIONS method.
* Use getaddrinfo instead of gethostbyname for DNS resolution.
* Async: improve HTTP/1.0 support (mirage/ocaml-cohttp#35).
* Build with debug symbols, binary annotations by default.
* Add Travis CI test scripts.

0.9.10 (2013-06-21):
* Add `set-cookie` header extraction functions for clients that read cookies.
* Explicitly flush the debug output when the `COHTTP_DEBUG` env variable is set.
* [async] Add client head/post/patch/delete methods.
* [lwt] Client.head no longer returns a response body, just the metadata.
* [lwt] Do not send chunked encoding headers with GET/DELETE requests that have no body.

0.9.9 (2013-06-12):
* Disable the mirage executable test as it was building too aggressively and breaking builds.

0.9.8 (2013-05-24):
* Lwt interface change: Rewrite Lwt backends to share code, and remove duplicate function calls from Uri.
* Depend on `Uri` 1.3.8+ as it exposes the parameter query functions now removed from `Request`.
* Do not depend on Cstruct in core library, as only Mirage needs it.
* Remove `Cohttp_async.body` type alias and just use `string Pipe.Reader.t` for more explicit types.

0.9.7 (2013-05-10):
* Attach a GC finaliser to the Lwt client to ensure that even an HTTP body isn't consumed, the socket will eventually be closed (mirage/ocaml-cohttp#11).
* Add an Async.Server interface, and revise the Client interface to be more in line with Core standards.
* Add 422 Unprocessable Entity code.
* Refactor modules better across Lwt/Async, but incompatible with earlier releases for Async (Lwt is unchanged at present).
* Add user agent string and User-Agent header helper function
* The git history of this release is full of adventures in parameterised monads and refactoring, but this isn't in the actual release. Yet.

0.9.6 (2013-03-18):
* Depend on Async (>= 109.12.00), which has an incompatible API with earlier versions.
* Rearrange core library files for `obuild` support.

0.9.5 (2012-12-29):
* Fix cookie parsing to retrieve the correct header.
* Update to `mirage-net` 0.5.0 API (based on cstruct 0.6.0).

0.9.4 (2012-12-19):
* Add Lwt `respond_redirect` and `respond_need_auth` helpers.
* Add enough Basic authorization support to serve a password-protected website.
* Fix Lwt file serving to not throw exception on trying to serve a directory.
* Port Async interface to 108.07.00 or higher (incompatible
  with earlier versions).

0.9.3 (2012-10-27):
* Add basic cookie support back to the portable library.
* `Cohttp_lwt.Client.post_form` now uses non-chunked encoding for
  the POST instead of chunked.
* Various improvements and tests for the pipelined Lwt Client.callv
* If an Lwt callback does not consume a body, ensure it has
  been drained by the API to prevent future pipelines from stalls.
* Fix handling of Lwt server non-empty POST bodies.
* Map the `put` functions to HTTP PUT instead of POST.

0.9.2 (2012-09-20):
* Add Request.get_param to extract a singleton key from queries.
* Fix chunked encoding handling when short reads occur.
* Install HTML documentation for all enabled drivers.
* Use ocaml-uri-1.3.2 interface for query parsing.
* Lwt: Add Server.respond_file and resolve_file for the Unix
  library to make it easier to serve static files.
* Lwt: Server.respond_not_found takes an optional Uri.t now.

0.9.1 (2012-09-11):
* Functorise for Async, Lwt_unix and Mirage.
* Use URI and Re libraries to not need Str any more.
* More robust parsing for various HTTP headers.

0.9.0 (2012-08-01):
* Initial public release.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants