← На главную

Bonsai: Jane Street пишет почти все внутренние веб-приложения на OCaml

03.08.2026 08:29 · hackernews

Bonsai — это библиотека для построения реактивных веб-приложений на OCaml, частично вдохновлённая Elm. В Jane Street на ней работают почти все внутренние веб-приложения: от корпоративного справочника до инструментов мониторинга и взаимодействия с торговыми системами.

Компоненты в Bonsai — чисто функциональные конечные автоматы. Они легко комбинируются, а инкрементальность работает для любого значения, а не только для view. В отличие от многих фреймворков, где состояние, инкрементальность и рендеринг склеены в одном компоненте, Bonsai позволяет собирать эти примитивы по отдельности. Тот же механизм, который защищает от лишнего ререндера всей страницы, можно применить к дорогому бизнес-вычислению на живых данных. Если привыкли к React, представьте, что всё построено на хуках, а состояние хранится вне иерархии компонентов.

Состояние не привязано к конкретным компонентам, поэтому в Bonsai есть развитый API для управления его жизненным циклом. Например, если вложить несколько stateful-компонентов внутрь другого компонента, например в табы, Bonsai сам разберётся с состоянием — не придётся вручную поднимать его на верхний уровень. Ещё важный плюс: фронтенд и бэкенд пишутся на одном OCaml с одними типами. Это сильно упрощает поддержку больших кодовых баз.

В Bonsai есть мощный шаблонизатор, поддержка стилей на уровне компонента и система автоматических тестов для всего приложения. Особенно хороши тесты: можно программно управлять элементами интерфейса и наблюдать, как меняется DOM. В примере из статьи тестируют поле ввода. Через Handle.create (Result_spec.vdom Fn.id) создают handle, вызывают Handle.show, затем Handle.input_text с селектором "input" и текстом "Bob", и наконец Handle.show_diff. Bonsai показывает diff: в span "hello" превращается в "hello Bob", причём видно, как меняются атрибуты и классы. Можно включать в тесты мок-вызовы сервера и проверять не только UI, но и состояние, которое им управляет.

Для изучения есть Quick Start и Thinking in Bonsai, а также how-to-статьи, история Bonsai, выпуски подкаста Signals & Threads и коллекция примеров сайтов.

Нюанс: сам Bonsai устроен более общо, чем просто UI-библиотека. Это набор библиотек для инкрементальных композируемых конечных автоматов. Bonsai_web адаптирует ядро для браузерных интерфейсов, Bonsai_term — для терминальных, а на April Fools' Day даже был прототип Bonsai_vr для реактивных VR-интерфейсов. В веб-приложениях на Bonsai часто используют препроцессоры ppx_html для HTML — он похож на JSX — и ppx_css для CSS.

Читать оригинал →