Bonsai es una biblioteca de interfaz de usuario desarrollada por Jane Street para construir aplicaciones web reactivas y de alto rendimiento en OCaml, en parte inspirada en Elm. Se emplea en prácticamente todas las aplicaciones web internas de Jane Street, desde la guía corporativa hasta herramientas que monitorizan e interactúan con los sistemas de trading de la firma.
A diferencia de otros frameworks como React, Bonsai no mezcla en una sola abstracción el estado, la incrementalidad y el rendering. En su lugar, expone primitivas componibles a la carta: los mismos mecanismos que evitan re-renderizar toda la página durante la interacción del usuario pueden usarse para incrementalizar cálculos costosos de lógica de negocio sobre conjuntos de datos en continua actualización. Los componentes se implementan como máquinas de estado puramente funcionales, fácilmente componibles, y los valores no se recalculan hasta que es estrictamente necesario.
El estado no está atado a componentes explícitos, por lo que la biblioteca ofrece una API extensa para gestionar su ciclo de vida y su ámbito. Por ejemplo, al embeber componentes con estado dentro de otro componente, Bonsai resuelve el problema del "state hoisting" de forma automática.
Otro rasgo destacado es el uso del mismo lenguaje y los mismos tipos en backend y frontend gracias a OCaml, lo que facilita la portabilidad de tipos y lógica de negocio desde interfaces de terminal previas a la web. Bonsai incluye además un sistema de plantillas, soporte para hojas de estilo por componente y un sistema de pruebas automatizadas de toda la aplicación que permite manipular elementos del DOM mediante código y observar los diffs resultantes, sin necesidad de abrir el navegador.
El núcleo de Bonsai es genérico: permite construir máquinas de estado incrementales y componibles de propósito general. Sobre él se apoya Bonsai_web, especializado en UIs de navegador, y existe también Bonsai_term para interfaces de terminal interactivas.
