no, your clients dont typically have backend logic. you would break it down into ktor-client dependencies and ktor-server dependencies. server is typically jvm (and native). i would put ktor-server dependencies in a common-jvm (or main-backend for example) module. as for ktor-client, hope i'm not wrong i think its a complete multiplatform library and can sit all the way in your common code/module to be consumed by all targets. and you have to implement the client side and the backend site of your apis🙂 what you don't use gets removed by dead code removal. i.e. ktor-client code+dependencies will be removed from your backend-jvm target when you build it. ktor-server gets removed from your android target for example (assuming you put it in a common-jvm, android is also jvm). i think the platforms/targets have very different binaries and outputs. 50mb for one of them doesn't tell you anything about the others.
ah only the code in common is "truly multiplatform". most of the code should go to common! in common-jvm, common-js, common-browser, ios-main, wasm-main, etc, i would do my best to write only "bridging abstractions" and i would try to write as much code as i can in common. it can hold all your data types, User, Unicorn, Book, etc, also expect FileManager, expect DocumentManager. and implement them with "actual" in downstream modules. its easier to rely on dead code removal than to be missing something in common. hope this is not confusing 🙂