client-side lib