opam-version: "2.0"

synopsis: "Tidy, feature-complete Web framework"
tags: ["http" "web" "framework" "websocket" "graphql" "server" "http2" "tls"]
description: """
Dream is a feature-complete Web framework with a simple programming
model and no boilerplate. It provides only two data types, request and
response.

Almost everything else is either a built-in OCaml type, or an
abbreviation for a bare function. For example, a Web app, known in
Dream as a handler, is just an ordinary function from requests to
responses. And a middleware is then just a function from handlers to
handlers.

Within this model, Dream adds:

- Session management with pluggable back ends.
- A fully composable router.
- Support for HTTP/1.1, HTTP/2, and HTTPS.
- WebSockets.
- GraphQL, including subscriptions and a built-in GraphiQL editor.
- SQL connection pool helpers.
- Server-side HTML templates.
- Automatic secure handling of cookies and forms.
- Unified, internationalization-friendly error handling.
- A neat log, and OCaml runtime configuration.
- Helpers for Web formats, such as Base64url, and a modern cipher.

Because of the simple programming model, everything is optional and
composable. It is trivailly possible to strip Dream down to just a
bare driver of the various HTTP protocols.

Dream is presented as a single module, whose API is documented on one
page. In addition, Dream comes with a large number of examples.
Security topics are introduced throughout, wherever they are
applicable."""

license: "MIT"
homepage: "https://github.com/aantron/dream"
doc: "https://aantron.github.io/dream"
bug-reports: "https://github.com/aantron/dream/issues"
dev-repo: "git+https://github.com/aantron/dream.git"

author: "Anton Bachin <antonbachin@yahoo.com>"
maintainer: "Anton Bachin <antonbachin@yahoo.com>"

depends: [
  "base-unix"
  "base64" {>= "3.1.0"}  # Base64.encode_string.
  "bigarray-compat"
  "caqti-lwt"
  "conf-libev"
  "cstruct"
  "dune" {>= "2.7.0"}  # --instrument-with.
  "fmt" {>= "0.8.7"}  # `Italic.
  "graphql_parser"
  "graphql-lwt"
  "hmap"
  "lwt"
  "lwt_ppx"
  "lwt_ssl"
  "logs" {>= "0.5.0"}
  "magic-mime"
  "mirage-crypto" {>= "0.8.1"}  # AES-256-GCM.
  "mirage-crypto-rng" {>= "0.8.0"}  # Signature of initialize.
  "multipart-form-data" {>= "0.3.0"}
  "ocaml" {>= "4.08.0"}
  "opam-installer" {build}
  "uri"
  "yojson"  # ...

  # Currently vendored.
  # "gluten"
  # "gluten-lwt-unix"
  # "httpaf"
  # "httpaf-lwt-unix"
  # "h2"
  # "h2-lwt-unix"
  # "websocketaf"

  # Dependencies of vendored packages.
  "angstrom" {>= "0.14.0"}
  "bigstringaf" {>= "0.4.0"}
  "digestif" {>= "0.7"}  # websocket/af, sha1.
  "faraday" {>= "0.6.1"}
  "faraday-lwt-unix"
  "psq"  # h2.
  "result"  # http/af, websocket/af.

  # Testing, development.
  "alcotest" {with-test}
  "bisect_ppx" {dev & >= "2.5.0"}  # --instrument-with.
  "ppx_expect" {with-test}
]

conflicts: [
  "gluten"
  "httpaf"
  "h2"
  "websocketaf"
]

build: [
  ["dune" "build" "-p"
    "dream,gluten,gluten-lwt,gluten-lwt-unix,websocketaf,httpaf,httpaf-lwt,httpaf-lwt-unix,hpack,h2,h2-lwt,h2-lwt-unix"
    "-j" jobs]
]

install: [
  ["opam-installer" "--prefix" prefix "dream.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/gluten/gluten.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/gluten/gluten-lwt.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/gluten/gluten-lwt-unix.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/websocketaf/websocketaf.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/httpaf/httpaf.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/httpaf/httpaf-lwt.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/httpaf/httpaf-lwt-unix.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/h2/hpack.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/h2/h2.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/h2/h2-lwt.install"]
  ["opam-installer" "--prefix" prefix "src/vendor/h2/h2-lwt-unix.install"]
]

url {
  src: "https://github.com/aantron/dream/releases/download/1.0.0-alpha1/dream-1.0.0-alpha1.tar.gz"
  checksum: "md5=b8ad7f3e30f3e88e5451d92e42b49ce4"
}
