v4.4.0 2023-09-25
-----------------

* **breaking change** Fix parsing & printing of IPv6 addresses in the host part of an uri

  If we follow the RFC3986 correctly, IPv6 must be surrounded by '[' and ']'. Old versions
  of `ocaml-uri` escaped these characters. The new version interprets these characters to
  recognize an IPv6 address.

  Users should take note of this change in behaviour, which fixes a number of bugs in HTTP
  requests. (@anmonteiro, review by several maintainers, #169)
* Upgrade tests to `ounit2` (@Alessandro-Barbieri, #161)

v4.3.0 2023-04-19
-----------------

* Add `Uri.Absolute_http`, an RFC9110-compliance specialization of a
  `Uri.t`. (#164 #162 @torinnd).
* Add a `uri-bench` package for the benchmarking dependencies in this
  repository (#166 @tmcgilchrist).

v4.2.0 2021-04-26
-----------------

* Do not mutate the base encoder when using custom percent encoders.
  This was a bug introduced in #147. (#156 @aantron)
* Disable Travis CI tests and switch Win/Mac tests to GitHub Actions and
  Linux ones to ocaml-ci (@avsm).

v4.1.0 2021-01-04
-----------------

* `uri-re` is deprecated, it is a legacy implementation that is now outdated. 
  `uri` should be used instead (@dinosaure, #152).
* Fix build system for cross-compilation (@TheLortex, #151).

v4.0.0 2020-01-01
-----------------

* sexp: use the sexplib v0.13 ppx directives (@avsm, #143).
* rework the URI parser with `angstrom` (@anmonteiro, review @avsm & @dinosaure, #142).
* add simple fuzzer tests between `angstrom` parser and _legacy_ parser (with `re.posix`, #142)
* add support of modifying pct encoding (with a custom one) (@orbitz, review @anmonteiro, @tmcgilchrist, @avsm & @dinosaure, #147)
* allow the selection of generic set of safe characters (with `Generic`) (@madroach, review @dinosaure, #141)

v3.1.0 2019-11-23
-----------------

* Add `Uri_sexp.equal` (#139 @vbmithr)
* Update opam files to remove dune as a build-only dep (@craigfe #140)

v3.0.0 2019-07-06
-----------------

* Complete the migration of making sexp an optional dependency that was
  started in 2.0.0. We now remove the `uri.sexp` ocamlfind package and
  have `uri` and `uri-sexp` for both the ocamlfind and opam packages.
  Code that was formerly using `uri.sexp` in its build will now need to
  move to `uri-sexp` instead (#134 @Julow @dinosaure).

* Remove the deprecated `Uri_re` module. All code should be using the
  `Uri.Re` module instead (@avsm @Julow).

* Remove the `uri.top` library, since we install the toplevel printer
  automatically since 2.2.0 via an attribute.

v2.2.1 2019-06-02
-----------------

* Fix deprecation warnings in Re 1.9.0 (#137 @avsm).

v2.2.0 2019-01-31
-----------------

* Add `Uri.pp` as an alias to `Uri.pp_hum`, as the `pp` form
  is more commonly used. (#133 @avsm)
* Add an `[@@ocaml.toplevel_printer]` attribute to Uri.pp
  so that it will be automatically loaded on modern Utop versions. (#133 @avsm)
* Upgrade last remaining `jbuild` file to `dune` (#133 @avsm)
* OCamldoc improvements in section headers (@avsm)

v2.1.0 2018-12-12
-----------------

* Expose a `compare` function in `Uri_sexp` so that it will work
  with `deriving compare,sexp`.
* Upgrade the opam metadata to the 2.0 format.
* Update Travis to test OCaml 4.03->4.07.
* Minimum OCaml version is now 4.04.0+ due to sexplib0 dependency.

v2.0.0 2018-10-15
-----------------

* Create a new subpackage `uri.sexp` for the sexpression converters, so
  that the base Uri package is more dependency free (based on #121 by @Julow).
  To convert old code, simply use `Uri_sexp.t` instead of `Uri.t` in a record
  type for which you are using `[@@deriving sexp]`.  This is a type alias to
  `Uri.t` but also has the right sexp-conversion functions in scope.
* Deprecate `Uri_re` in favour of `Uri.Re`.  The unwrapped `Uri_re` will
  be removed in a future release of this library.
* Switch to using sexplib0 instead of sexplib for easier dependencies
  (based on #123 by @mseri)
* Port build to Dune from jbuilder.
* Add benchmarks using `core_bench` (#125 via @drup)

v1.9.7 2018-07-01
-----------------

* Use latest interfaces in Re >=1.7.2 (#122)
* When resolving URI inherit userinfo from the base URI (#116)

v1.9.6 2018-01-11
-----------------

* Change code generation strategy to avoid big switches in
  the services file; improves build time by 10x (#114 by @gasche).
* Remove deprecated function use (`String.lowercase`)
* Add development Makefile with more targets.

v1.9.5 2017-11-05
-----------------

* Fix build with OCaml 4.06 (and -safe-string) (#108 @hcarty)
* Set (wrapped false) in jbuilder (#105 @avsm)
* Add OCaml 4.06 to the travis CI matrix (#109 @djs55)

v1.9.4 2017-05-30
-----------------

* Port build system to jbuilder (#100 @vbmithr @rgrinberg @avsm @dsheets).
  There should be no observable changes, except that `Uri_services` is now
  in a separate subdirectory. This means that packages that implicitly
  depended on the module without including the ocamlfind `uri.services`
  package may now fail. Just adding the ocamlfind dependency will fix it,
  and is backwards compatible with older Uri releases.
* Restrict build to OCaml 4.03.0+ (was formerly OCaml 4.02.0+).
* Add Appveyor tests for Windows compilation.

v1.9.3 2017-03-06
-----------------

* Port build system to topkg (#95 by @fgimenez)
* Add a tighter opam constraint on `ppx_sexp` (#94)
* Explicitly depend on `ppx_deriving` for improving future compatibility
  with Jane Street upstream (#98).
* Update Travis CI to include OCaml 4.04 and 4.03 in the matrix.

v1.9.2 2016-02-12
-----------------

* Remove sexplib.syntax, `type_conv` deps and camlp4 transitive dependency
* Add `ppx_sexp_conv` dependency
* Require OCaml 4.02.3+

v1.9.1 2015-06-26
-----------------

* Fix `with_password None` when no userinfo present (#78 from Hezekiah M. Carty)

v1.9.0 2015-05-15
-----------------

* Colon (":") is no longer percent-encoded in path segments
* URNs are now supported (#67)
* Relative paths with colons in first segment have "./" prepended in to_string
* Add Uri.empty, the zero length URI reference
* `Uri_services` now includes service aliases (e.g. www, www-http, http)
* `Uri_services` now includes chargen and git
* Add `Uri.canonicalize` for scheme-specific normalization (#70)
* Add `Uri.verbatim_query` to extract literal query string (#57)
* Add `Uri.equal`
* Add `Uri.user` and `Uri.password` accessors for subcomponents of userinfo (#62)
* Add `Uri.with_password` functional setter for password subcomponent of userinfo
* Fix file scheme host normalization bug which introduced empty host (#59)

v1.8.0 2015-02-16
-----------------

* `Uri.with_port` no longer sets the host fragment to a blank value if both
   the host and port are empty (#63).
* `Uri.compare` imposes an ordering by host, scheme, port, userinfo, path,
  query, and finally fragment. (#55).
* Uri is now an `OrderedType` and can be used directly in Maps and Sets (#55).
* Remove deprecation warnings with OCaml 4.02.0+ (#58).
* Drop support for OCaml 3.12.1, and now require OCaml 4.00.1+.
* Modernise Travis scripts to use OPAM 1.2 workflow.

v1.7.2 2014-08-10
-----------------

* Fix empty-but-existing query ("?") parsing bug
* Fix `with_userinfo` against hostless URI representation bug
* Fix `with_port` against hostless URI representation bug
* Fix `with_path` with relative path against hosted URI representation bug (#51)
* Fix `make` without host but with userinfo or port representation bug
* Fix `make` with host, userinfo, or port and relative path representation bug

v1.7.1 2014-07-05
-----------------

* Add RFC6874 compliance for IPv6 literals with zones (#48).

v1.7.0 2014-06-16
-----------------

* Expose the list of known services in the `Uri_services` module via
  new functions that list TCP, UDP and an association list of both.

v1.6.0 2014-04-28
-----------------

* Remove `Uri_IP` module, superseded by the `ipaddr` package (#30).
* Do not depend on `camlp4` for link-time, only compile time (#39).
* Add `with_scheme` and `with_userinfo` functional setters (#40).
* Always percent-escape semicolon in structured query encoding (#44).

v1.5.0 2014-03-24
-----------------

* Make library POSIX thread-safe by removing dependency on `Re_str`.
* Add Merlin IDE configuration.

v1.4.0 2014-02-16
-----------------

* Fix `path` and `path_and_query` encoding bugs (#35).
* Fix userinfo percent-encoding/delimiter bug (#35).
* Add optional scheme parameter to `encoding_of_query`.

v1.3.13 2014-01-16
-----------------

* Remove internal use of Scanf.
* Expose `with sexp` for the Uri types.

v1.3.12 2013-12-28
-----------------

* Be lenient about decoding incorrect encoded percent-strings (#31).
* Improve ocamldoc for `Uri.of_string`.
* Regenerate build files with OASIS 0.4.1.
* Add an `mldylib` to build the cmxs Natdynlink plugin properly (#29).

v1.3.11 2013-10-13
-----------------

* Add relative-relative URI resolution support.
* OCamldoc fixes.
* Add Travis continous build tests.

v1.3.10 2013-09-05
-----------------

* Rename `Install_printer` to `Uri_top` to prevent conflict with other libraries with similar name (#24).

v1.3.9 2013-08-30
-----------------

* Add back support for OCaml 3.12.1 by fixing the compiler-libs linking.

v1.3.8 2013-05-19
-----------------

* Add `Uri.get_query_param` which selects a single value for a query key.
* Add `Uri.get_query_param'` which returns a list of values associated with a query key.
* Fix ocamldoc in `Uri` module to have a header.

v1.3.7 2013-01-23
-----------------

* Add a top-level printer for `Uri.t` that converts it to a string instead
  of just displaying an `<abstract>` type.

v1.3.6 2012-12-29
-----------------

* Add `with_host`, `with_port`, `with_fragment` and `with_host`, to modify
  the respective fields of an input URI.

v1.3.5 2012-12-19
-----------------

* Fix percent encoding of characters from 0x0 to 0xf.
* Add `Uri.remove_query_param` function to remove keys from query sets.

v1.3.4 2012-11-08
-----------------

* Always encode `+` in URLs to be more compatible with form encoding.

v1.3.3 2012-10-14
-----------------

* Add singleton variants of query functions that accept a `string->string`
  instead of a string list of values, for convenience.

v1.3.2 2012-09-20
-----------------

* Fix parsing of unreserved characters in hostnames (e.g. `foo-bar.com`).
* Add unit tests for the `Uri_services` module.
* Various URI parsing bugs and test cases for better RFC3986 compliance.
* Fix `port_of_uri` to detect port overrides in a URI before doing a lookup.

v1.3.1 2012-09-12
-----------------

* Make the `Uri_services_full` library optional, as it takes a loooong time
  to compile. It will return as a UNIX binding to getservent(2) also.

v1.3.0 2012-08-24
-----------------

* Add `Uri_services` to lookup IANA the common well-known ports and services
* Add `Uri_services_full` with a complete database of the IANA database.

v1.2 2012-08-21
---------------

* Add `Uri.path_and_query` to retrieve a path/query combination string.
* Add `Uri.host_with_default` to retrieve a hostname string.

v1.1 2012-08-02
---------------

* Fix query parsing order.
* Improve safe character handling across URI components.

v1.0 2012-08-01
---------------

* Initial public release.
