# \[ANN\] Brr 0.0.1, a toolkit for programming browsers

**URL:** <https://discuss.ocaml.org/t/ann-brr-0-0-1-a-toolkit-for-programming-browsers/6608>\
**Category:** Community\
**Tags:** announce\
**Created:** [October 14, 2020, 12:27pm UTC](https://discuss.ocaml.org/t/ann-brr-0-0-1-a-toolkit-for-programming-browsers/6608 "2020-10-14T12:27:56Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![dbuenzli](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/dbuenzli/32/18_2.png) [@dbuenzli](https://discuss.ocaml.org/u/dbuenzli)\
**Post date:** [October 26, 2020, 1:41pm UTC](https://discuss.ocaml.org/t/ann-brr-0-0-1-a-toolkit-for-programming-browsers/6608/5 "2020-10-26T13:41:29Z")

</div>

I’m not sure exactly what you are asking but:

1. If you are asking about the way API are exposed: `brr` does not type JavaScript’s objects as phantom types. It simply relies on OCaml’s abstract data types and plain functions. More about this can be found in brr’s [FFI manual](https://erratique.ch/software/brr/doc/ffi_manual.html) and [FFI cookbook](https://erratique.ch/software/brr/doc/ffi_cookbook.html).
2. If you are asking about binding coverage, you should be able to get a sense of what is bound in `brr` [here](https://erratique.ch/software/brr/doc/index.html#supported_apis).

Regarding 2. `brr`'s coverage of more recent browser APIs is broader and more consistent than in `js_of_ocaml` – Promise support, Fetch, Service workers, Media capture APIs, WebGL2, Webcrypto, WebAudio, etc. Conversly older APIs supported in `js_of_ocaml` may not supported in `brr` (e.g. XMLHTTPRequest). Besides `brr`'s coverage of some of the DOM _element-specific_ interfaces may be shallower than in `js_of_ocaml`. There is however good coverage for the [`HTMLMediaElement`](https://erratique.ch/software/brr/doc/Brr_io/Media/index.html#el), [`HTMLCanvasElement`](https://erratique.ch/software/brr/doc/Brr_canvas/Canvas/index.html), [`HTMLFormElement`](https://erratique.ch/software/brr/doc/Brr_io/Form/index.html) and [`HTMLInputElement`](https://erratique.ch/software/brr/doc/Brr/El/index.html#ifaces) interfaces. For the rest the [attribute and property API](https://erratique.ch/software/brr/doc/Brr/El/index.html#ats_and_props) and the occasional trivial FFI method binding should be able to get you a long way.

---

_[View the full topic](https://discuss.ocaml.org/t/ann-brr-0-0-1-a-toolkit-for-programming-browsers/6608)._
