Split client into its own package