Getting StartedReScript

ReScript

Supported versions: ReScript v9 and v10

ReScript v11 support is currently in development (track progress here).

For organizations requiring support for specific ReScript versions, we offer sponsored development options. Please reach out to discuss sponsorship arrangements for prioritized compatibility implementation.

Install

yarn add @davesnx/styled-ppx
# Or
npm install @davesnx/styled-ppx

Packages available

  • @davesnx/styled-ppx/ppx is the ppx as a binary, transforms %styled.div(""), %cx("") and %css("")
  • @davesnx/styled-ppx/rescript is library with the runtime (expose the CSS module)

Update bsconfig.json

Add "@davesnx/styled-ppx/ppx" under bsconfig "ppx-flags". The diff on bsconfig.json should contain the following:

{
  "bs-dependencies": [
    "@rescript/react",
+   "@davesnx/styled-ppx/rescript",
  ],
+ "ppx-flags": ["@davesnx/styled-ppx/ppx"]
}

Note: @rescript/react is optional, and only needed if you use styled components (%styled.div(``)).

Example

module Link = %styled.a((~color=CSS.hex("4299E1")) => `
  font-size: 1.875rem;
  line-height: 1.5;
  text-decoration: none;
  margin: 0px;
  padding: 10px 0px;
  color: $(color);
`)
 
/* This is a unique className pointing to those styles */
let layout = %cx(`
  display: flex;
  width: 100%;
  height: 100%;
  justify-content: center;
  align-items: center
`)
 
/* Later in a component */
<div className=layout>
  <Link
    color={CSS.hex("333333")}
    href="https://sancho.dev"
    rel="noopener noreferrer">
    {React.string("sancho.dev")}
  </Link>
</div>

Playground

If you want to try it out, just fork https://github.com/davesnx/try-styled-ppx and follow the installation instructions there.