Render HTML and print CSS to PDF inside Ruby, using the Rust Forme engine. No browser, Node.js, WebAssembly or separate rendering service is needed.
This is an independent MIT-licensed binding maintained by ClearStack, not an official upstream project. 0.1.0 is available on RubyGems.
Add to your Gemfile and run bundle install:
gem "forme-ruby", "~> 0.1.0", require: "forme_pdf"Or install directly:
gem install forme-ruby -v 0.1.0RubyGems selects a matching native package where available. The same packages and checksums are available in the GitHub release.
require "forme_pdf"
pdf = FormePDF.render_html("<h1>Hello from Ruby</h1>")
File.binwrite("hello.pdf", pdf)Ruby 3.2 or later is required. Native packages target Apple Silicon macOS 15+ and Linux AMD64 glibc 2.28+ and need no compiler. Source installs require network access to locked upstream dependencies. See installation.
| Native gem | Qualification environments |
|---|---|
arm64-darwin |
Apple Silicon macOS 15 and 26 |
x86_64-linux-gnu |
Red Hat UBI 8, 9 and 10; Ubuntu 24.04 and 26.04; Arch Linux rolling |
Version 0.1.0 passed the full release matrix. Red Hat testing uses official UBI images, not RHEL certification. Linux ARM64, Windows and Alpine/musl binaries are not provided. See the installation guide for Ruby and source-build requirements.
Authorize and select application data first, then render explicitly:
html = render_to_string(template: "invoices/pdf", layout: "pdf", formats: [:html])
send_data FormePDF.render_html(html),
type: "application/pdf", disposition: "inline", filename: "invoice.pdf"Rails is optional. The Rails guide also covers the opt-in
FormePDF::Rails adapter. The gem installs no middleware or routes.
- Rendering guide: CSS, fonts, diagnostics and error handling.
- Development: build, test and contribute.
- Community guidelines: participating respectfully.
- Release guide: package qualification and future publication.
- Changelog, license and third-party notices.
Use trusted HTML and assets. The engine can read local image paths and is not a sandbox for untrusted documents. See security. Report reproducible bugs through GitHub issues with synthetic input, Ruby/platform versions and renderer diagnostics.