Events

Kiri has one event today: "change".

EventFires whenCallback receives
"change" Any time the state updates: dragging, zooming (wheel/pinch/slider), rotating, flipping, resizing the frame, or setFilters(). Also fires once after load() resolves. The same KiriState snapshot getState() returns: { zoom, offset, rotation, flip, filters }.

Subscribing

cropper.on("change", (state) => {
  console.log(state.zoom);
});

// later, if needed:
cropper.off("change", myHandler);

A note on frequency

"change" fires on every pointermove while dragging or every wheel tick while zooming — not just once at the end of a gesture. If you're doing something expensive inside the handler (like calling export(), which does a full canvas render), debounce it rather than running on every single event:

let timer;
cropper.on("change", () => {
  clearTimeout(timer);
  timer = setTimeout(async () => {
    const blob = await cropper.export({ type: "blob" });
    // ...
  }, 200);
});
Next: Settings — every constructor option.