For example, if we have something named similar to an engine, perhaps things like animations should be separate?
A car, has an engine. When you turn it on, the engine just spins cycles, and that's it. Input from the outside turns the steering wheel or presses the pedal, and that make the car/engine do things.
Would it perhaps make sense to separate things out into smaller packages?
For example, the engine/motor/boxer/famin thing could just provide that, an engine. The engine simply ticks and runs a scene graph. It doesn't have to render anything. It'd be just a scene "engine" that make updates tick (when specified with components, etc). Nodes in the engine have things like Position, Size, etc, which are equivalent to the steering wheels and pedals of the car. Externals things would modify those properties by, for example, animating some numbers then setting the values of a Node's properties (a Tween library perhaps, with it's own worker abstraction in order to put tween calculations in a thread). An external physics library could have a way to map it's parameters to arbitrary properties (f.e. the position/align/etc properties of a Node). The separate physics library package/library might have it's own worker abstraction.
So, my question is, how much do we actually want in the engine library, and what do we want to have as separate libraries? f.e.
infamous/render (contains basic API, plus ability to use Three.js, Babylon, etc)
infamous/motion (timeline (and tweens?))
infamous/ui (components of the UI variety made with a culmination of everything)