Blender normally lets you set an object origin only by placing the 3D cursor and then setting the origin to its position. Flexorigin takes a different route: it couples an empty to the object origin, and as long as that empty stays in the scene, moving the empty translates the origin with it. You can move the origin interactively with Gkey or the manipulator, and snapping during transform to volume, face, edge, vertex, or increment works through Blender's standard snapping controls.
The same empty also controls the object's local orientation when you rotate it with Rkey or the manipulator. Updates to both origin and orientation happen continuously and in real time, which suits objects carrying origin-dependent modifiers such as Mirror or Cast by giving direct feedback for modifier positioning. Control empties can be created for as many objects as you like, and they save with your .blend file.
The origin can still be set by standard methods, with the control empty moving automatically to the new position. Because empties can be animated, you can animate the object origin or local orientation too. Flexorigin supports Blender versions from 2.8 through 4.0 and is released under the GPL license.