
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
rescript-embed-lang
Advanced tools
A general purpose PPX and library for embedding other languages into ReScript, via code generation.
A general purpose PPX and library for embedding other languages into ReScript, via code generation.
The PPX itself is very very simple - just swap out the embedded language string with a reference to the code generated for that embed. The code generation happens elsewhere. This way embedding languages is flexible and light weight.
This package will eventually ship with a set of utils for making the code generation part easy to set up as well.
npm i rescript-embed-lang
And then add the PPX to your bsconfig.json:
"ppx-flags": ["rescript-embed-lang/ppx"]
There, all set!
PPXes can be complex and difficult to maintain, and costs at bit of performance. Therefore, this PPX is intended to be extended to support as many use cases around embedding other languages into ReScript as possible. This way, all language embeds built can use one central PPX rather than implementing their own. Maintenance becomes drastically easier, and performance is only hit once if you use several language embeds.
You can embed EdgeQL directly as an assignment to a let binding:
// Movies.res
let findMovieQuery = %edgeql(`
# @name findMovieQuery
select Movie {
id
title
} filter .id = <uuid>$movieId
`)
Is transformed into:
// Movies.res
let findMovieQuery = Movies__edgedb.FindMovieQuery.query
You can also embed it via a module, in case you want easy access to all of the things emitted in the generated code:
// Movies.res
module FindMovieQuery = %edgeql(`
# @name findMovieQuery
select Movie {
id
title
} filter .id = <uuid>$movieId
`)
Is transformed into:
// Movies.res
module FindMovieQuery = Movies__edgedb.FindMovieQuery
rescript-embed-lang ships with a generic transform, intended to make experimenting with writing new language embeds + generating code for them much easier in user land, without needing you to add a full transform to this PPX. It expects a specific structure (more below) in order to connect your generated code with your ReScript source.
You turn it on by passing -enable-generic-transform in your PPX flags config:
"ppx-flags": [["rescript-embed-lang/ppx", "-enable-generic-transform"]]
It works like this:
// SomeFile.res
let myThing = %generated.css(`
.button {
color: blue;
}
`)
This will be transformed into:
// SomeFile.res
let myThing = SomeFile__css.M1.default
It also works with module references:
// SomeFile.res
module MyThing = %generated.css(`
.button {
color: blue;
}
`)
Is transformed into:
// SomeFile.res
module MyThing = SomeFile__css.M1
Notice that you can put anything to the right of
%generated. The example showscss, but you could use anything else as well. Example:%generated.openapi("...").
The formula for what code to refer to when transforming is be: <filename>__<generated-extension>.M<module-count-for-extension>.default. When using module bindings, the last part .default is omitted.
SomeFile.res and using generated.css, so the generated module is expected to be called SomeFile__css.M + what number of transform for that extension it is, in the local file. So, the first %generated.css module is M1, the second in that same file is M2, and so on.default a target value name, just to have something to refer to.Remember, the actual codegen creating the module we're referring to here from the source
csstext isn't part of this package. This package is just about making it simple to tie together generated things with its source in ReScript.
Embedding for Postgres SQL via pgtyped-rescript.
// Movies.res
let findMovieQuery = %sql.one(`
/* @name findMovieQuery */
select id, title from movies where id = :id
`)
Is transformed into:
// Movies.res
let findMovieQuery = Movies__sql.FindMovieQuery.one
Adding more embeds should be straight forward. Reach out if you're interested!
FAQs
A general purpose PPX and library for embedding other languages into ReScript, via code generation.
The npm package rescript-embed-lang receives a total of 44 weekly downloads. As such, rescript-embed-lang popularity was classified as not popular.
We found that rescript-embed-lang demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.