View on GitHub Edit this page

OCamlverse

Documenting everything about OCaml

Web and Networking

HTTP Servers

  • cohttp : A lightweight HTTP server using either Lwt or Async.
  • httpaf : A high performance web server written in OCaml. Written as a response to a scaling deficiency found in cohttp.
  • Opium – Sinatra like web toolkit for OCaml.

HTTP2 Support

OCaml currently does not support HTTP2. However, work is ongoing and the following parts exist:

  • h2: HTTP/2 framing. WIP: encoding/decoding of binary streams into HTTP/2 frames using Angstrom and Faraday. Parsing is more or less completed, needs help with serialization using Faraday + adding automated testing.
  • hpack: Header compression algorithm required for HTTP2.
  • ALPN:
    1. ocaml-tls
    2. Open pull request for ocaml-ssl: https://github.com/savonet/ocaml-ssl/pull/38

Web Frameworks

  • Ocsigen Eliom: a full-featured multi-tier framework, for developing multi-platform Web and mobile apps as 100% OCaml distributed applications. It can also be used for more traditional Web or mobile apps. Eliom lets you write client and server code in OCaml, where both are typechecked against each other, the client being compiled to JS and the backend to OCaml.
  • webmachine – A REST toolkit for OCaml. OCaml webmachine is a layer on top of cohttp that implements a state-machine-based HTTP request processor. It’s particularly well-suited for writing RESTful APIs. As the name suggests, this is an OCaml port of the webmachine project.
  • Ohm - Ohm was an open source web framework for the OCaml language which is now dead.

Web Apps

  • Cumulus : Hackernews-like website with the OCaml framework Ocsigen (demo is currently down).
  • Prose : A Google-docs-like collaborative editing application written using Eliom/Ocsigen. See the demo here
  • Canopy: A blogging MirageOS unikernel based on git. Can be compiled to Unix as well.

Javascript Compiler

  • js_of_ocaml compiles OCaml bytecode to Javascript. It makes it possible to run OCaml programs in a browser, while sticking to the OCaml paradigms and ecosystem.
    • commonjs_of_ocaml : Easily import and export CommonJS modules from a js_of_ocaml project.
  • BuckleScript compiles OCaml to Javascript directly, prioritizing readability. The code lives in the Javascript ecosystem and generally requires a Javascript toolchain. ReasonML is enabled by this compiler.

Virtual DOM

The browser’s Document Object Model is very expensive to manipulate, and some frameworks work on making DOM manipulation more efficient.

  • vdom: A version of virtual DOM manipulation that goes well with Ocsigen.
  • incr_dom: Jane Street’s version of virtual DOM, backed by the very powerful Incremental library.

Protocol Libraries

  • tyxml : build valid html using combinators. Leverages OCaml’s type system.
  • omd: convert Markdown to html.
  • ocurl : OCaml bindings to libcurl.
  • ocaml-dns – A pure OCaml implementation of the DNS protocol.
  • udns: An opinionated DNS server library written in pure OCaml.
  • fluent-logger : A fluentd logger for OCaml.
  • charrua-unix - charrua-unix is a Unix DHCP daemon based on charrua-core
  • COW – Caml on the Web (COW) is a set of parsers and syntax extensions to let you manipulate HTML, CSS, XML, JSON and Markdown directly from OCaml code.
  • Ocamlnet : has many relevant networking libraries:
  • ocaml-uri – RFC3986 URI parsing library.
  • Goji – An OCaml bindings generator for JavaScript libraries.
  • Syndic – RSS and Atom feed parsing
  • ocaml-mustache – mustache.js logic-less templates in OCaml.
  • atdjs – atd code generator for OCaml/js_of_ocaml.
  • jingoo – OCaml template engine almost compatible with jinja2.
  • dispatch – Path-based dispatching for client- and server-side applications.
  • Lambda Soup - Functional HTML scraping and manipulation with CSS selectors, à la Python’s Beautiful Soup.
  • Markup.ml - Error-recovering streaming HTML5 and XML parsers, serializers.
  • gen_js_api - gen_js_api aims at simplifying the creation of OCaml bindings for Javascript libraries.
  • slacko : command line interface to Slack.

Low Level Protocols

  • mirage-tcpip: Part of mirage OS – a complete implementation of the TCP/IP stack in OCaml.

ReasonML

  • Reason uses Bucklescript to create Javascript code that lives in the npm-world but leverages OCaml’s type system.