Drop a full-featured image editor into any app — it's framework-agnostic, so reach for it with vanilla JS, React, or as a Web Component. Crop, adjust, filter, and annotate with text & shapes, on an extensible, themeable block engine.
Edit a real photo with the full editor. No setup required.
Aspect ratio presets, free crop, rotate, flip, and social media resize presets.
Brightness, contrast, saturation, exposure, temperature, and more.
30+ filter presets with adjustable intensity, WebGL-accelerated.
Rich text annotations with fonts, colors, and formatting via Lexical.
Rectangles, ellipses, lines, arrows, polygons, stars — filled or outlined.
Add image annotations on top of your canvas.
Full command-based history with keyboard shortcuts.
Dark, light, and fully custom color themes with CSS variables.
No per-seat fees, no vendor lock-in. Fork it, ship it, own it.
A thin UI over a headless, framework-agnostic block engine. Build your own UI or extend ours.
Register custom tools, render slots, and event hooks — no forking required.
Every edit is a command: fully undoable, replayable, and serializable.
Add an image editor to any app with a few lines of code.
Add <ImageEditor> to your component, pass a src and an onSave callback.
import { ImageEditor } from "@editx/image-editor";
function App() {
return (
<ImageEditor
src="/your-image.jpg"
config={{
tools: ["crop", "adjust", "filter", "text", "shapes"],
theme: { preset: "light" },
}}
onSave={(blob) => {
const url = URL.createObjectURL(blob);
console.log("Saved:", url);
}}
/>
);
}Add a powerful image editor to any app in under 5 minutes.