Skip to content

davesnx/html_of_jsx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

dc66e63 · Feb 8, 2025
Nov 4, 2023
Jun 26, 2024
Dec 21, 2024
Dec 21, 2024
Sep 25, 2024
Dec 21, 2024
Feb 8, 2025
Feb 8, 2025
Mar 6, 2024
Nov 4, 2023
Nov 4, 2023
Jun 27, 2024
Feb 10, 2024
Jun 7, 2024
Sep 25, 2024
Jun 6, 2024
Jun 26, 2024
Jun 26, 2024

Repository files navigation

Html_of_jsx logo Html_of_jsx logo

Render HTML with JSX

html_of_jsx is a JSX transformation and a library to write HTML declaratively in OCaml, Reason and mlx.

Features

  • Brings the "component model" to HTML
  • Supports all of the Reason's JSX features (uppercase components, fragments, optional attributes, punning)
  • but with a few improvements (lowercase components, no need to add the ppx annotation)
  • No React idioms (no className, no htmlFor, no onChange, etc...)
  • Integrates well with htmx
  • Type-safe, validates attributes and their types (it can be better thought)
  • Works with OCaml, Reason and mlx
  • Minimal
    • JSX.render to render a JSX element to a HTML string
    • JSX.* to construct DOM Elements and DOM nodes (JSX.string, JSX.int, JSX.null, JSX.list and JSX.unsafe)
  • Designed to work on the server, but can be used on the client-side as well (with Melange or jsoo)

Installation

opam install html_of_jsx
+ (library html_of_jsx)
+ (preprocess (pps html_of_jsx.ppx))

Usage

let element: JSX.element = <a href="https://x.com/davesnx">
  <span> {"Click me!"} </span>
</a>

let html: string = JSX.render(element);

Check the demo/server.re file to see a full example.

Check the Documentation to know more about the API and features.

Credits

This library was extracted from server-reason-react and later simplified to work only with HTML5.