Every task can declare how to undo itself. When a step fails, minisagas runs the compensations in reverse and hands you the list of what it undid.
Results are typed as you chain
Each task widens the result type. A later task reading results.charge gets the real shape of what charge returned. No casts, no manual generics.
Zero dependencies, server or browser
Promises, a for loop and a rollback log. Nothing else in your node_modules, and nothing Node-specific in the bundle. Node 20.3+, Deno, Bun, and browsers from Chrome/Edge 100, Firefox 97 and Safari 15.4.