finds.dev← search

// the find

kane50613/takumi

★ 1,871 · Rust · Apache-2.0 · updated Jun 2026

Render JSX, HTML, and CSS to images without a headless browser. OG cards, animated GIFs, and video frames from Node.js, edge runtimes, browsers, or Rust. Drop-in next/og replacement.

Takumi is a Rust rendering engine that turns JSX, HTML, or JSON node trees into PNG/JPEG/WebP/GIF/APNG without spinning up Chromium. It ships as a Node.js native addon, a WASM module for Cloudflare Workers and browsers, and a Rust crate — all from the same rendering core. Primary audience is teams generating OG images at scale who want deterministic output without the operational overhead of a headless browser pool.

1. CSS coverage is genuinely better than Satori/next/og: CSS Grid, pseudo-elements (::before/::after), :is()/:where() selectors, backdrop-filter, blend modes, clip-path, conic gradients, RTL text, and Tailwind v4 arbitrary values. This addresses the most common frustration with the existing next/og approach. 2. Architecture delegates the hard parts to well-maintained Rust crates — taffy for layout, parley + skrifa for text shaping, resvg for SVG compositing — rather than building everything from scratch. The time-axis threading through the render pipeline for animation is clean: same tree, sampled at different timestamps, no duplicated code path. 3. One rendering core compiles to three deployment targets: native Node.js addon, WASM for edge and browser, Rust crate for direct embedding. Output should be consistent across all three. 4. Non-trivial production users — Dcard, Fumadocs, Nuxt OG Image — give confidence that the happy path holds under real load.

1. takumi-css is a custom CSS parser written entirely in-house. A custom CSS parser is a vast surface area; expect spec deviations and edge-case behavior that won't surface until someone hits them in production and files a bug. 2. WASM bundle size is never mentioned in the docs or README. Rust image rendering compiled to WASM can easily exceed 5 MB, which collides with Cloudflare Workers' 10 MB compressed limit — worth benchmarking before committing to that deployment target. 3. Font handling is thin on detail. The bundled fonts cover Latin and a handful of scripts; if you need comprehensive CJK support or custom brand fonts, you are largely on your own figuring out loading order, subsetting, and fallback behavior. 4. Contributor base is small — 38 forks against 1871 stars suggests most users treat it as a dependency, not a community. Bugs in text shaping, bidirectional layout, or obscure CSS interactions are likely to sit with a single primary author.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →