decoupled from node_export