Takumi

Upgrade to v1

Upgrade Takumi from v0 to v1 and update imports, image formats, layout defaults, and font handling.

v1 is the first stable release. Releases within v1.x stay backward compatible under semver. To move on from v1, see Upgrade to v2.

Install

npm i takumi-js@1

Breaking changes at a glance

ChangePackageMigration
display defaults to inlinetemplatesAdd display: flex to flex containers
Runtime auto-detectiontakumi-jsImport from takumi-js/response
emoji optiontakumi-jsOpt into from-font if needed
Lowercase image formats@takumi-rs/core"WebP" -> "webp"
putPersistentImage() takes ImageSource@takumi-rs/corePass { src, data }
Deprecated exports removed@takumi-rs/coreSwitch to non-deprecated APIs
RenderOptions::builder()RustReplace RenderOptionsBuilder
Viewport constructorRustUse Viewport::new(...)
Removed Rust APIsRustSee Removed Rust APIs

Templates

display defaults to inline

Early Takumi defaulted display to flex. v1 defaults to inline, as the CSS specification does, so components written for the web, including LLM-generated ones, lay out as expected.

Add display: flex, or the flex Tailwind class, to every container that needs flexbox.

display defaults to inline
<div
  style={{
    display: "flex",
    alignItems: "center",
    justifyContent: "center",
  }}
>
  {/* Your content here */}
</div>

JavaScript / TypeScript

Unified runtime detection and fallback

takumi-js now picks the right bindings for your environment, such as Node.js or Workers. You no longer import the NAPI (native Node addon) or WASM (WebAssembly) bindings directly.

Unified runtime detection and fallback
import { ImageResponse } from "@takumi-rs/image-response"; 
import { ImageResponse } from "takumi-js/response"; 

emoji option for dynamic emoji loading

takumi-js adds an emoji option that selects the emoji provider, matching Next.js's ImageResponse API. It defaults to twemoji. To draw emoji from a font instead, set it to from-font and include an emoji font in fonts.

See Images & emoji.

emoji option for dynamic emoji loading
import { ImageResponse } from "takumi-js/response";
import notoEmojiFont from "@fontsource/noto-color-emoji/files/noto-color-emoji-emoji-400-normal.woff2";

export function GET() {
  return new ImageResponse(<div>It works! 😀</div>, {
    emoji: "from-font", 
    fonts: [
      {
        name: "Noto Color Emoji",
        data: notoEmojiFont,
      },
    ],
  });
}

Lowercase image formats

Image format options in @takumi-rs/core now take lowercase strings only.

Lowercase image formats
const image = await renderer.render(node, {
  format: "WebP"
  format: "webp"
});

putPersistentImage() takes ImageSource

renderer.putPersistentImage() no longer accepts a raw Buffer as the second argument. Pass an ImageSource object instead.

putPersistentImage() takes ImageSource
const data = await readFile("foo.png");

await renderer.putPersistentImage("foo.png", data); 
await renderer.putPersistentImage({ src: "foo.png", data }); 

v2 removes this method. Pass images through the images render option instead.

Deprecated exports removed

v1 removes all previously deprecated exports from @takumi-rs/core.

Rust

RenderOptions::builder() replaces RenderOptionsBuilder

The standalone RenderOptionsBuilder struct is removed. Call RenderOptions::builder() instead. It uses typed-builder, which checks required fields at compile time, so build() needs no .unwrap().

RenderOptions::builder() replaces RenderOptionsBuilder
let options = RenderOptionsBuilder::default().build().unwrap(); 
let options = RenderOptions::builder().build(); 

Viewport constructor parameter change

Viewport no longer implements From<(u32, u32)>. Use the explicit constructor.

Viewport constructor parameter change
let viewport = (800_u32, 600_u32).into(); 
let viewport = Viewport::new((800, 600)); 

Removed Rust APIs

RemovedReplacement
parse_svg_str(data)SvgSource::from_str(data)
FetchTaskCollectionNode::resource_urls / Style::resource_urls, then feed URLs back to the renderer
SpacePair::from_reversed_pairConstruct SpacePair with values in order
TakumiError re-exporttakumi::prelude::Error (or takumi_core::error::Error)
detailed_css_error featureDetailed CSS errors always on; no feature flag
Removed Rust APIs
use takumi::TakumiError; 
use takumi::prelude::Error; 

Full changelog

For every change, see the releases.

Last updated on