better api in core and split extra features between node and browser