Maildeno ships official SDKs for JavaScript/TypeScript, Python, and PHP. All three expose an identical conceptual surface — only the language idioms differ.

All three SDKs render in-process: each fetches a template’s JSON from Maildeno once via GET /v1/sdk/template/{id}, caches it locally (memory or disk), and renders HTML / React Email / MJML on your own server. Your merge tags and visibility context never leave your infrastructure. JavaScript/TypeScript and Python render through an embedded WebAssembly engine; PHP renders through a small native binary instead — no Wasm runtime or FFI extension required — as of PHP SDK v1.0.0. See JS Caching / Python Caching / PHP Caching for the caching model.

These SDKs are clients for Maildeno’s hosted Render API and require an API key. Rendering an already-exported template JSON file with no API key, no account, and no network access at all? See the open-source @maildeno/renderer package instead.

Available SDKs

Language Package Version Minimum runtime

JavaScript / TypeScript

maildeno on npm

2.1.6

Node.js 18+ (or any runtime with native fetch)

Python

maildeno on PyPI

2.0.6

Python 3.9+

PHP

maildeno/maildeno on Packagist

1.0.3

PHP 8.1+

Quick comparison

Feature JavaScript SDK Python SDK PHP SDK

Async support

Native (async/await, Promise-based)

AsyncMaildenoClient (asyncio / httpx)

Not available (SDK is sync-only)

Sync support

N/A (JS is async by nature)

MaildenoClient (blocking httpx)

MaildenoClient (blocking CurlTransport)

Transport

Native fetch

httpx (bring-your-own client supported)

HttpTransport (default CurlTransport, injectable)

Type safety

Full TypeScript types exported

Full PEP 561 type stubs (mypy / pyright)

Native PHP 8.1+ type declarations

Error type

MaildenoError

MaildenoError

MaildenoError

Validation errors

err.issues: ValidationIssue[]

err.issues: list[ValidationIssue]

$err→issues (array of ValidationIssue)

Rendering

In-process (embedded engine)

In-process (embedded Wasm engine)

In-process (native binary, no Wasm/FFI)

Caching

Memory (default) or disk, with stale-on-error fallback

Memory (default) or disk, with stale-on-error fallback

Memory (default) or disk, with stale-on-error fallback

Render methods

All three SDKs expose the same methods — PHP uses the same camelCase names as JavaScript/TypeScript:

JavaScript / PHP Python Returns

render(options)

render(options)

Full result object (output, target, templateId)

renderHtml(id, data?)

render_html(id, data)

Rendered HTML string

renderReact(id, data?)

render_react(id, data)

Rendered React/TSX string

renderMjml(id, data?)

render_mjml(id, data)

Rendered MJML string

Where to go next