Brr v0.0.1
Brr is a toolkit for programming browsers in OCaml with the js_of_ocaml
compiler. It provides:
- Interfaces to a selection of browser APIs.
Note
based reactive support (optional and experimental).- An OCaml console developer tool for live interaction with programs running in web pages.
- A JavaScript FFI for idiomatic OCaml programming.
Manuals
These manuals are available:
- The Web page howto explains how to compile and integrate your OCaml program in a web page.
- The OCaml console manual has intructions to setup the developer tool WebExtension to peek into your programs at runtime.
- The FFI manual explains how OCaml and JavaScript values are represented by
js_of_ocaml
and Brr. Recommended reading. - The FFI cookbook has off-the-shelf design answers for common JavaScript binding scenarios.
Library brr
This library has the JavaScript FFI and the interfaces to the supported browser APIs.
Library brr.note
This library has the Note
reactive infrastructure for browsers and a few higher-level APIs.
Experimental, will break in the future.
Libraries brr.poke[d]
and brr.ocaml_poke[_ui]
The brr.poke
library provides a function to define a poke object for your program so that the OCaml console can interact with it. Use brr.poked
to poke your program by side-effect without modifying its source. In both cases you need compile your JavaScript appropriately.
The brr.ocaml_poke
library provides support to find and access the ocaml_poke
object provided by your program. The brr.ocaml_poke_ui
library provides an HTML interface to the poke object as an interactive toplevel (REPL). These APIs are used by the OCaml console.
Supported browser APIs
The following JavaScript and browser functionality is supported:
- General support for JavaScript values is in
Jv
. - JavaScript
String
s are inJstr
. - Left-pad support in is
Jstr.pad_start
. - JavaScript
Promise
s are inFut
to safely type them.Brr.Abort
has support for aborting them. - JavaScript
ArrayBuffer
s andTypedArray
s are inBrr.Tarray
. - Data encoding are in
Brr.Base64
,Brr.Json
. - Global objects and functions are in
Brr.G
. - A remixed HTML DOM API is provided by
Brr.Ev
,Brr.At
andBrr.El
. - Some browser functionality is in
Brr.Console
,Brr.Window
,Brr.Navigator
. - The Blob API is in
Brr.Blob
- The Broadcast and Channel Messsaging API is in
Brr_io.Message
. - The Canvas 2D API is in
Brr_canvas.C2d
. - The Cache API is in
Brr_io.Fetch.Cache
. - The Clipboard API is in
Brr_io.Clipboard
. - The File API is in
Brr.File
. - The Fetch API is in
Brr_io.Fetch
. - The Form element and Form Data API is in
Brr_io.Form
. - The Geolocation API is in
Brr_io.Geolocation
. - The History API is in
Brr.Window.History
. - The Media capture, media streams and media element APIs are in
Brr_io.Media
. - The Notification API is in
Brr_io.Notification
. - The Performance API is in
Brr.Performance
. - The Service Worker API is in
Brr_webworkers.Service_worker
. - The URL API is in
Brr.Uri
. - The Web Audio API is in
Brr_webaudio
. - The Web Crypto API is in
Brr_webcrypto
. - The WebGL2 API is in
Brr_canvas.Gl
. - The Web Sockets API is in
Brr_io.Websocket
. - The Web Storage API is in
Brr_io.Storage
. - The Web Workers API is in
Brr_webworkers.Worker
.
Finally note that:
- Brr is incomplete. Exhaustiveness is a non-goal.
- Brr tracks long-term, universal and forward-looking browser changes.
- Brr does not provide one-to-one bindings to JavaScript APIs. Some of them may be remixed, tweaked and functionality may be deliberately left out.
- If you would like to add something, first get in touch on the issue tracker.