Ktor separates the HttpClient from the HttpClientEngine. Broadly speaking, I think the HttpClient has all the plugins and configuration, while the engine holds shared resources like threads and connection pools. So perhaps you could allow the user to pass in and reuse an existing engine, but use that engine to create and configure your own client.