Note. The table of this page could be used as a comparison matrix.
CamlGI was a CGI and FastCGI connector written entirely in OCaml. It has been merged in OCamlNet2 in the Netcgi2 connectors. CamlGI will become a web framework build on top of OCamlNet2.
Ocsigen is a research project aimed at developing new programming techniques for the Web. It has a fully featured Web server with static pages and traditional CGI, lots of extensions (easy to write), but also a module (Eliom) for dynamic Web page generation using high level concepts. The validity of pages can be checked statically.
Ocsigen can output close to a hundred generated pages per second on a decent machine.
The Web server has all the features required to be used as a replacement for Apache:
Eliom is a programming framework for dynamic Web programming in OCaml which introduces high-level concepts that make programming very concise and safe. The goal is to make large pieces of code easy to maintain and evolve. For example:
Eliom is not a Content Management System, but is intended to be the basis for such higher-level tools. Several projects have already been initiated by the community, like Nurpawiki (by Janne Hellsten), Litiom and Lambdium (by Dario Teixeira), or Ocsimore (by Piero Furiesi and Jaap Boender).
Version 1.0.0 is only the beginning of Ocsigen's story. We have many things in mind for the future.
Ocsigen is developed by Vincent Balat, Jérôme Vouillon, Gabriel Kerneis, Stéphane Glondu, Denis Berthod, Jaap Boender, Piero Furiesi, Thorsten Ohl, Nataliya Guts, Jérôme Velleine and Pierre Clairambault.
Future developments: web sites that are highly dynamic on both client and server side.
OCamlNet is a comprehensive set of libraries which focus on application-level Internet protocols and conventions. As you can see from its documentation, its purpose goes well beyond simple web development. Modules immediately useful for writing web applications are Netencoding for HTML escaping, the netcgi2 modules that offer a wide range of ways (namely: CGI, FCGI, AJP, SCGI and apache "mod" connector) to connect your web application to the webserver of your choice, and a pure OCaml web server. You can run your own HTTP server in a multi-processing or multi-threading setup. Choosing OCamlNet2 is the best way to ensure you can easily run the same code under different web servers.
OCamlNet2 also includes the netplex library that manages parent/children relationships between either forked processes or threads. You can use SunRPC for communication (or whatever you like, but SunRPC support is included). The bad news is that it does not run on the native Windows port, not even in the threaded variant (because there's no socketpair...).
This library was the first connector for writing web CGI scripts. Its capabilities are limited. It should not be used for new web applications. Use instead better featured connectors like those of OCamlnet.
This library provides the bindings for Java servlet programming in OCaml. These bindings entail the use of Cadmium, and Cafesterol can be used to compile to Java bytecode. In both cases, it is possible to generate war files that can then be deployed to a servlet container such as Tomcat for execution.