html_of_jsx icon indicating copy to clipboard operation
html_of_jsx copied to clipboard

Render HTML with JSX

Html_of_jsx logo Html_of_jsx logo

html_of_jsx is an implementation of JSX designed to render HTML on the server, without React or anything else. It's a minimal library that allows you to write components of HTML in a declarative way.

  • Supports most of features from JSX (uppercase components, fragments, optional attributes, punning)
  • but with a few improvements (lowercase components, no need to add annotations)
  • No React idioms (no className, no htmlFor, no onChange, etc...)
  • Type-safe, validates attributes and their types (it can be better thought)
  • Minimal
    • Html_of_jsx.render to render an element to HTML
    • Jsx.* to construct DOM Elements and DOM nodes (Jsx.text, Jsx.int, Jsx.null, Jsx.list)
  • Works with Reason and mlx

Installation

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

Usage

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

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

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

Documentation

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

Credits

This library is extracted from server-reason-react and simplified to just work with HTML5.