client framework