Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: Configuration Language Lock 1.0.2 Minor update available for module config_language_lock (1.0.2). Release: Canvas Override 1.0.1 Minor update available for module canvas_override (1.0.1). Release: Media Remote Image 8.x-1.2 Minor update available for module media_entity_remote_image (8.x-1.2). Release: IDNA Convert Service (punycode) 2.0.4 Minor update available for module idna (2.0.4). Release: Bootstrap Cloud 7.1.3 Minor update available for theme bootstrap_cloud (7.1.3). Release: Token Browser 1.0.2 Minor update available for module token_browser (1.0.2). Release: Varbase Project 11.0.8 Minor update available for module varbase_project (11.0.8). Release: Media Remote Image 2.0.0-beta1 First beta version released for module media_entity_remote_image (2.0.0-beta1). Usage Milestone: Term CSV Export Import Module term_csv_export_import crossed 1,000 active installs. Security Coverage: Module Scout Module module_scout now has official Drupal security advisory coverage.

This project provides a way to convert MJML code into HTML emails directly within PHP projects by including pre-built, self-contained binaries. This eliminates the need for a Node.js installation at runtime. It automatically detects your system and downloads the correct binary during installation.

Standalone MJML to HTML renderer for PHP with pre-built binaries. No Node.js required at runtime.

This package provides a self-contained MJML binary and a PHP wrapper that converts MJML markup into responsive HTML email. It is designed to be used as a dependency of the MJML Render Engine module, but can also be used independently in any PHP project.

How It Works

MJML is a markup language for building responsive emails. Normally it requires Node.js to render. This package eliminates that requirement by shipping pre-built standalone binaries compiled with @yao-pkg/pkg — the Node.js runtime is embedded directly in the binary.

A Composer plugin automatically detects your platform during composer install and downloads the correct binary from a platform-specific release tag. The binary is placed at a single known path: vendor/drupal/mjml_render_bin/bin/mjml.

Supported Platforms

Platform Architecture Linux x64 Linux ARM64 macOS (Darwin) x64 macOS (Darwin) ARM64

Installation

composer require drupal/mjml_render_bin

Usage


use Drupal\mjml_render_bin\MjmlBinaryRenderer; $renderer = new MjmlBinaryRenderer(); $html = $renderer->render('<mjml><mj-body>...</mj-body></mjml>');

Custom Binary Path

You can provide a custom binary path:

$renderer = new MjmlBinaryRenderer('/path/to/custom/mjml');

When used with the MJML Render Engine module, configure the path in settings.php:

$settings['mjml_render_bin.path'] = '/path/to/custom/mjml';

Building a Custom Binary with Docker

Build the latest MJML binary without installing Node.js locally:


# Latest version for Linux x64 docker run --rm -v $(pwd)/custom-bin:/output node:22-alpine sh -c \ "npm install -g mjml @yao-pkg/pkg && \ pkg \$(which mjml) -t node22-linuxstatic-x64 -o /output/mjml" # Specific version (e.g., 4.15.3) docker run --rm -v $(pwd)/custom-bin:/output node:22-alpine sh -c \ "npm install -g [email protected] @yao-pkg/pkg && \ pkg \$(which mjml) -t node22-linuxstatic-x64 -o /output/mjml"

Release Strategy

This package uses a branching strategy to deliver platform-specific binaries without bloating the main package:

  • The main branch contains only PHP code (~50KB)
  • Platform branches (linux-x64, darwin-arm64, etc.) contain the same code plus the binary
  • Stable tags (e.g., 1.0.0) are created on main
  • Platform-suffixed tags (e.g., 1.0.0-linux-x64) are created on platform branches
  • The Composer plugin automatically downloads the binary from the matching platform tag

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
8
Tracked since
Apr 2026
Latest release
3 months ago
Releases (12 mo)
8 ▲ from 0
Maintenance
Active

Release Timeline

Releases

Version Type Core Release date
1.0.1 Stable May 28, 2026
1.0.0 Stable May 3, 2026
1.0.0-beta5 Pre-release May 3, 2026
1.0.0-beta2 Pre-release May 3, 2026
1.0.0-beta1 Pre-release May 3, 2026
1.0.x-dev Dev May 3, 2026
1.0.0-beta4 Pre-release Apr 27, 2026
1.0.0-beta3 Pre-release Apr 27, 2026