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.