initial port of synchronet frame.js library