require circulate as external module