Browser programming toolkit for OCaml






v0.0.4 2022-12-05 Zagreb

Changes for upcoming js_of_ocaml effect support

The following changes are needed for the upcoming effect support in
js_of_ocaml. Thanks to Jérôme Vouillon for his help.

  • Important Add Jv.callback. When the effect support lands it
    will no longer be possible to invoke an OCaml function f from
    JavaScript by simply using (Jv.repr f) to get a Jv.t value as
    was suggested in the cookbook. You have to use (Jv.callback ~arity f) with arity the arity of the function. The recipes of the
    cookbook to deal with callbacks and exposing OCaml functions to
    JavaScript have been updated accordingly.

  • Brr.Ev.listen no longer returns unit but an abstract value of type
    Brr.Ev.listener. If you don't need to unlisten you can simply ignore
    that value. If you do, see next point.

  • Brr.Ev.unlisten is changed to take a value of type Brr.Ev.listener.
    Previously you had to invoke it with the same arguments you gave to
    Brr.Ev.listen like in JavaScript.


  • Add Brr_webmidi, bindings for Web MIDI.

  • Brr.At, add support for accesskey, action, autocomplete,
    autofocus, list, method, selected, style attributes.
    Make sure MDN doc links do not 404.

  • Add Brr.At.float.

  • Add Brr.At.{void,is_void,if',if_some} and deprecate
    Brr.At.{add_if,add_if_some}. The new scheme if more convenient
    and clearer when working with list literals.

  • Add Brr.File.relative_path.

  • Add Brr_canvas.{C2d,Gl}.get_context and deprecate
    Brr_canvas.{C2d,Gl}.create whose names are misleading (#36).

  • Add Brr_canvas.C2d.{set_transform',transform'} taking matrix
    components directly.

  • Add Jstr.binary_{of,to}_octets to convert between OCaml strings
    as sequence of bytes and JavaScript binary strings (#18 again)

Breaking changes

  • Brr.El.v, perform attribute merging like we do with
    At.class. This is a breaking change if you had El.v calls with
    multiple style attributes definition and expected the last one to
    take over. Note that the value is introduced in this version.

Bug fixes and internal changes

  • Fix Brr_canvas.C2d.transform it was binding to resetTransform
    instead of transform (#38).

  • Adapt to js_of_ocaml-toplevel changes.

  • Make the modules' initialisation bits web worker safe.
    We had toplevel code that accessed properties of values that are not
    allowed in workers (e.g. Brr.El accessing document or Brr_note
    accessing mutation observers). These modules may still be linked in
    your web worker code (e.g. if you fork()-like your workers) in which
    case these toplevel initialisation bits would get executed and fail.

v0.0.3 2022-01-30 La Forclaz (VS)

  • Require js_of_ocaml 4.0.0:

    • Allows brr, js_of_ocaml, and gen_js_api bindings to be used in the
      same program.

    • Adding -no-check-prims during bytecode linking is no longer required.

    Thanks to Hugo Heuzard for making the ground work in js_of_ocaml and
    providing a patch (#2, #33).

  • Add Brr.Ev.beforeunload.

  • Add Brr.Ev.Pointer.as_mouse.

  • Tweak Brr.Ev.{Drag,Wheel}.as_mouse_event into
    Brr.Ev.{Drag,Wheel}.as_mouse to avoid coercion madness.

  • Add Brr.El.{previous,next}_sibling.

  • Add Brr.El.remove_inline_style.

  • Add Brr.El.Style.{top,left,right,bottom,position,z_index}.

  • Fix Blob.of_jstr. It was not working. Thanks to Kiran Gopinathan for
    the report (#31).

  • Ev.target_{of,to}_jv take and return a Jv.t value instead of an 'a.
    Thanks to Joseph Price for the report (#28).

v0.0.2 2021-09-23 Zagreb

  • Change the Brr.Base64 module (atob, bota) to make it more
    useful and less error prone (#18).
    Thanks to Armaël Guéneau for shooting himself in the foot.

  • Add' (#20).
    Thanks to Boris Dob for the suggestion and the patch.

  • Rename Brr_webcrypto.Crypto_algo.rsassa_pks1_v1_5 to rsassa_pkcs1_v1_5.
    Thanks to Hannes Mehnert for the report and the fix.

  • Add Brr.El.parent (#10).
    Thanks to Sébastien Dailly for the suggestion and the patch.

  • Add Brr.El.{find_first_by_selector,fold_find_by_selector} to
    lookup elements by CSS selectors.

  • Jstr.{starts_with,ends_with}, change labels to follow Stdlib labelling.

  • Add optional base argument to Brr.Uri.{v,of_jstr}.

  • Add Brr.Uri.Params.is_empty.

  • Add Brr_io.Form.Data.{is_empty,has_file_entry,of_uri_params,to_uri_params}.

  • Tweak interfaces of Brr_canvas.Image_data.create,
    Brr_webaudio.Node.connect_node, Brr_webaudio.Node.connect_param to
    not trigger the 4.12 definition of the warning

  • Fix for uncaught JavaScript exceptions in the OCaml console (#21).
    The fix is brittle, the right fix is to solve (#2).

  • Fix Brr_canvas.Gl for browsers that do not support GL2 contexts.
    On these browsers this would lead to obscure failures in separate
    compilation mode.
    Thanks to Duncan Holm for the report (#9).

  • Fix wrong value of Request.Credentials.include.

  • Fix Blob.of_array_buffer (#23). Didn't work at all.
    Thanks to Armaël Guéneau for the report and the fix.

  • Fix Jstr.concat when sep is unspecified (#14).
    Thanks to Sébastien Dailly for the report.

  • Fix signature of Brr_webcrypto.Subtle_crypto.{export,import}_key.
    Thanks to Romain Calascibetta for the report and the fix.

v0.0.1 2020-10-14 Zagreb

First release.