mrkeyoor.com_
Wed 12 Aug 17:49 UTC
Dev Toolsevaluationupdated 12 Aug 2026

takumi

Takumi is a Rust rendering engine that turns JSX, HTML, or a simple node tree into PNG, JPEG, WebP, SVG, animation frames, or paged PDF without launching Chrome. It runs through native bindings in Node and Bun, WebAssembly in browsers and Cloudflare Workers, or directly as a Rust crate.

Verdict

Takumi is an excellent choice for controlled, high-volume image templates and a compelling PDF option when its CSS subset covers the document. It is not a universal substitute for browser printing, and that narrower contract is why it can be small and portable. Build a representative fixture suite first; if tables or unsupported visual effects dominate, keep Puppeteer.

Setup5/5Published native and Wasm packages make the first render quick
Docs5/5Excellent examples, migrations, comparisons, caveats, and architecture
Community4/52,770 stars, production users, and responsive current releases
Maturity4/5Versioned multi-runtime packages with a deliberately bounded feature set

Who it’s for

Applications generating many social cards, banners, certificates, or invoices
Edge deployments where shipping a headless browser is impractical
Teams migrating Satori or next/og templates that need Grid and richer CSS
Rust developers who want the renderer inside their own process

Who it’s NOT for

Teams converting arbitrary web pages pixel for pixel, because Takumi intentionally supports less CSS than Chrome
Report systems dependent on semantic HTML tables, because issue 1212 says table layout and repeating table headers are missing
PDFs needing blur, drop shadows, or backdrop filters, which the README says the PDF backend does not support
Templates expecting browser-style remote loading, because Puppeteer migrations must preload assets

Setup reality

Installing takumi-js or takumi-pdf is easy because native binaries cover major operating systems and CPU architectures, with WebAssembly for edge and browser runtimes. The work shifts into templates: register every non-Latin font, load remote images and styles yourself, stay within supported CSS, and compare output across native and Wasm backends. Existing Satori templates migrate more directly than arbitrary browser pages.

A renderer for assets, not websites

Takumi accepts JSX, HTML strings, or a three-kind node tree and produces images or paged documents. It handles layout, text shaping, compositing, and encoding inside a Rust engine, so no Chromium process starts behind the API. Node.js and Bun use native bindings, Cloudflare Workers and browsers use WebAssembly, and Rust applications link the crate directly.

That design is ideal for deterministic assets. Social cards, documentation previews, product banners, code screenshots, invoices, and certificates usually have a known canvas, controlled content, and no need for JavaScript execution. Takumi supports Flexbox, Grid, blocks, inline layout, floats, selectors, pseudo-elements, gradients, masks, clipping, blending, CJK, right-to-left text, emoji, and Tailwind v4 utilities.

PDF uses the same layout primitives but paginates them, embeds subset fonts, keeps text selectable, and supports page breaks plus repeating page headers and footers. Reusing one template vocabulary for images and documents is appealing when a product already expresses visual assets in JSX.

The no-browser trade is the whole decision

A browser brings networking, scripting, an enormous CSS implementation, web fonts, accessibility behavior, and decades of page-printing fixes. Takumi avoids that installation and runtime cost by implementing the subset asset generation needs. The smaller contract enables Wasm deployment on Cloudflare Workers and prebuilt native packages measured in a radically different class from Chrome. It also means browser output is not the compatibility target for every page.

The README is commendably direct. Migrating from Puppeteer requires preloading remote assets, and Takumi supports less CSS. Its PDF backend does not implement blur filters, drop shadows, or backdrop filters. Browser viewers and some text controls from React PDF have no counterpart. PDFKit remains better when a developer wants direct drawing commands. These are not minor footnotes; they define which templates belong here.

Issue 1212 captures a common boundary. Takumi does not currently provide HTML table layout. A user migrating a Chrome report engine tried Grid but encountered doubled cell borders because border-collapse was unavailable, plus no repeating table header on new pages. Invoices can be built with Grid, as the examples show, but data-heavy reports with semantic tables are a poor migration candidate until that capability lands.

Setup is short, templates need discipline

For JavaScript, install takumi-js for images or takumi-pdf for documents. The image package chooses a native binding in Node and Bun and Wasm in browsers and Workers. Prebuilt artifacts cover macOS, glibc and musl Linux, and Windows on x64 and ARM64. Rust users add the takumi crate.

Only a last-resort Latin font is embedded. Real templates must provide fonts as URLs or bytes, use the Google Fonts helper, or register them once on a reusable renderer. That is the correct server-rendering model because it avoids silently depending on machine fonts. It also puts font licensing, caching, variable axes, CJK coverage, emoji behavior, and network failure in the application's hands.

Remote images and other assets need the same explicit treatment. Fetch, validate, bound, and cache them before rendering. An unbounded attacker-controlled image or font can still consume memory even without a browser. Reusing a renderer and registered resources improves throughput, while fixed dimensions and input limits make service capacity predictable.

Native and Wasm implementations share the engine, but runtime limits differ. Workers have CPU and memory ceilings, browsers have cross-origin rules, and Node has filesystem access. Snapshot representative output in every production target rather than assuming a package abstraction removes environmental differences.

Migration paths are unusually thoughtful

Satori users can replace its SVG call with renderSvg, or request encoded pixels. Existing next/og templates retain explicit Flexbox styles, and the compatible response class reduces framework changes. Takumi adds Grid, block and inline layout, floats, richer selectors, effects, raster formats, and animation. That is a meaningful upgrade for card designs that strain Satori's layout rules.

React PDF users exchange Document, View, and Text for HTML elements and CSS. This is attractive if front-end developers already know those tools, though existing React PDF layouts are not drop-in templates. Puppeteer migration is the strictest: remove browser-dependent scripts and page state, preload everything, then simplify styles to the supported set. If simplification destroys the template, migration has failed its own business case.

Takumi publishes a reproducible PDF comparison using an 80-line, two-page invoice on an Apple M1 Pro. The results favor Takumi for cold start and warm rendering, while the text explicitly says Chrome has the fullest CSS. Those figures describe that fixture and machine, not all documents. The benchmark source is included, so buyers should replace the invoice with their hardest production sample and rerun it.

Small backlog, active releases

Release takumi@2.7.2 was published August 12, 2026, the same day as the last repository push. It corrects emoji presentation so pictographs that default to text remain text, while variation selectors explicitly choose text or color emoji. That is a subtle typography fix with visible output consequences. GitHub counted only four open issues and pull requests, including automated dependency tracking and current maintenance work.

Issue 1058 reports SVG currentColor failing to inherit from a red parent in takumi-js 2.5.4, rendering a Lucide-style icon black. Direct path styling works around it. The report predates the current 2.7.2 release, so users should verify rather than assume it persists. The larger lesson is to snapshot icon, font, bidirectional, emoji, and SVG cases during upgrades.

Adoption evidence is good for this category. The README lists Dcard, TanStack, Fumadocs, Nuxt OG Image, Luma, and shiki-image, while examples span Next.js, Workers, TanStack Start, Svelte, Rust, invoices, and video frames. At 2,770 stars, it is smaller than browser-automation projects but has recognizable production users and release discipline.

Takumi succeeds because it does not pretend to be Chrome. Choose it when the template is yours, output formats matter, startup and deployment size hurt, and a CSS subset is acceptable. Keep a browser when input is arbitrary web content or exact page printing is the requirement. For controlled OG imagery, Takumi is the better default; for PDFs, let the hardest table and visual effect decide.

Alternatives

ProjectWhat it isPick it when
SatoriVercel's JSX-to-SVG renderer underlying many `next/og` image routes.Pick this instead when Flexbox-only OG output and the established Next.js path are sufficient.
React PDFA React renderer for PDFs using purpose-built document primitives.Pick this instead when PDF is the only output and its document component model fits your application.
PuppeteerA Chrome automation library capable of printing full browser-rendered pages.Pick this instead when exact browser CSS, scripts, tables, and page behavior outweigh startup and deployment cost.
PDFKitA JavaScript PDF generation library offering low-level drawing and document control.Pick this instead when precise PDF primitives matter more than reusing HTML-like templates.

What people are saying

  1. [github-trending] kane50613/takumi

Sources

  1. Takumi README
  2. Takumi 2.7.2 release
  3. HTML table support request
  4. SVG currentColor report
  5. Takumi documentation