$ npm run portfolio
✓ loaded profile · Himanshu Mathpal, Team Lead
✓ compiled 6 projects · 5 testimonials
✓ linked resume, github, medium
→ ready on himanshumathpal.in
// OPEN SOURCE · 2026 · Author
A free, fully typed image editor for React and Next.js: crop, adjust, filter, annotate, redact and export, with every edit saved as JSON.
This is the real package, @image-ultra/react, running inside this page. Edit the sample photo or open your own; nothing is uploaded.
Almost every app ends up needing an image editor: a profile photo to crop, a screenshot that needs an arrow and a blurred email address, a product photo to brighten before it goes live. The options I found didn't fit: I wanted a component that's free in any project, typed end to end, easy to make look like my own app, and ready for Next.js without workarounds. So I built one.
npm install @image-ultra/react, import ImageEditor and its stylesheet, and render it. It works as-is in a Next.js App Router page.EditState, so users can reopen an edit exactly where they left off, and apps can re-render the image at another size later.themeOverrides shortcut. The editor above uses this portfolio's accent colour.Before announcing a release, I install it from npm into a brand-new app. For 0.1.0 that check found a bug my tests had missed: in a fresh create-next-app, the editor looked squashed. All of its CSS lives in @layer image-ultra, so your CSS wins without !important, but unlayered CSS beats every layer. The starter's * { padding: 0; margin: 0; } reset won.
The fix was one unlayered rule: .iu-root :where(*) { all: revert-layer; }. It shipped in 0.1.1 a few hours later, with a test that injects the create-next-app and Tailwind resets and checks nothing moves. Installing from npm into a fresh app is now a fixed step of every release.