One engine, nine paths

Your first PDF.
Your runtime.

Pick the environment you already ship. Every guide starts from a clean project, produces a real PDF, then explains configuration, resources, lifecycle, and runtime limits.

Native entry points

Run inside your application.

Use native bindings when your service needs in-process execution, explicit ownership, and packaged platform libraries.

Librarycrates.io

Rust

The full API: byte output, writers, async file conversion, local resources, and opt-in remote fetching.

Start with Rust
Binarycargo install

Command line

Convert HTML or Markdown files from a shell, a script, or standard input without writing application code.

Start with the CLI
Native ABIGitHub Releases

C

Link a versioned static or shared library through opaque handles, stable status codes, and explicit ownership.

Start with C
BindingPyPI

Python

Install an ABI3 wheel and receive Python bytes from a native Rust renderer on Linux, macOS, or Windows.

Start with Python
BindingNuGet

.NET

Install one managed package with its native library for Linux, macOS, or Windows.

Start with .NET
BindingMaven Central

Java

Use a Java 17 facade with deterministic ownership and native libraries for five platforms.

Start with Java
BindingRubyGems

Ruby

Use an idiomatic chainable converter backed by the same native Rust engine and package contract.

Start with Ruby

Portable WebAssembly

One npm package, two hosts.

Browser and Node.js use the same WebAssembly renderer. Supply fonts and document resources as bytes from the host application.

Client sideironpress

Browser JavaScript

Initialize the WASM module, render locally, and turn the returned Uint8Array into a Blob for download or preview.

Start in the browser
Server sideironpress/node

Node.js

Use the package-owned WASM asset from Node.js 22 or 24 with ESM and write the returned Uint8Array where you need it.

Start with Node.js

Choose by capability

The important differences.

All paths render HTML and Markdown with reusable converter settings. Host integration is what differs.

CapabilityRustCLIC.NETJavaPythonRubyWASM
PDF bytesYesFileYesYesYesYesYesYes
Local resourcesYesYesHost bytesHost bytesHost bytesYesYesHost bytes
Direct file outputYesYesNoNoNoYesYesNo
Streaming or asyncYesNoNoNoNoNoNoNo
Remote HTTPOpt-inNoNoNoNoNoNoNo