Pre-compilation
MDEx uses the :mdex_native dependency for its Rust-backed Markdown parser, HTML sanitizer, and syntax highlighter. Precompiled binaries are available for these targets, so Rust is not required in the common case:
aarch64-apple-darwinaarch64-unknown-linux-gnuaarch64-unknown-linux-muslarm-unknown-linux-gnueabihfriscv64gc-unknown-linux-gnux86_64-apple-darwinx86_64-pc-windows-gnux86_64-pc-windows-msvcx86_64-unknown-freebsdx86_64-unknown-linux-gnux86_64-unknown-linux-musl
Note: The pre-compiled binaries for Linux are compiled using Ubuntu 22 on libc 2.35, which requires minimum Ubuntu 22, Debian Bookworm or a system with a compatible libc version. For older Linux systems, you'll need to compile manually.
Compile manually
If you need to compile the native dependency yourself:
Install a C compiler or build packages
It depends on your OS, for example in Ubuntu you can install the build-essential package.
- Run:
export MDEX_NATIVE_BUILD=1
mix deps.get
mix compile
To enable syntax highlighting with Lumis, add :lumis to your deps:
{:lumis, "~> 0.1"}Then configure :mdex_native before compiling dependencies:
config :mdex_native, syntax_highlighter: :lumisTo use Syntect instead:
config :mdex_native, syntax_highlighter: :syntectDisable with nil to download a minimal NIF without any syntax highlighter:
config :mdex_native, syntax_highlighter: nilSyntax highlighting is disabled by default in MDEx. Even after compiling :mdex_native with Lumis or Syntect, pass :syntax_highlight options to enable highlighting for a render.
With syntax_highlight: nil, MDEx still adds the language class for code blocks but does not syntax highlight them.
Legacy CPUs
Modern CPU features are enabled by default in :mdex_native. If your environment has an older CPU,
you can use legacy artifacts by adding the following configuration to your config.exs:
config :mdex_native, use_legacy_artifacts: true