package uri-re

  1. Overview
  2. Docs
An RFC3986 URI/URL parsing library


Dune Dependency





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 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 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).

  • 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.

  • 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.