[[LocalSend]] is an open source project for file sharing in local network.
**TC;SC**: https://github.com/CrossCopy/localsend-ts.git
## Why?
> Why I built this library.
My project [[crosscopy]] is abandoned for now. My focus has shifted to [[kunkun]], which is a much larger superset of [[crosscopy]]. CrossCopy is just a few features in the design of Kunkun.
Kunkun already implemented a local network file transfer, and I am planning to implement P2P file transfer as well. However, one problem I have is cross-platform.
Both CrossCopy and Kunkun are designed to be cross-platform, but at the moment I don't have the capacity to build apps for mobile platforms.
So it's a good idea to start by integrating with existing cross-platform apps like LocalSend.
So users can send files to Kunkun in local network when Kunkun's mobile app isn't ready yet.
Luckily, LocalSend already provides their protocol https://github.com/localsend/protocol
So I just need to implement this protocol.
I considered integrating it directly into the app with Rust, for the best performance.
And there are existing Rust port of LocalSend
- https://crates.io/crates/localsend
- https://github.com/tom8zds/localsend_rs
But I still want to start with a TypeScript implementation
1. It's easier to prototype with TypeScript
2. There is no existing implementation in TypeScript
3. I love TypeScript
4. Implement LocalSend as a Kunkun extension to enrich #kunkun/extensions ecosystem; also as a demo/tutorial for writing more complicated #kunkun/extensions
I am going to make a #kunkun/extensions with this library.
LocalSend already provides a CLI, so I am not sure if I should write another one. It should be simple. Writing a CLI could be helpful for me to test and experiment with this library.
## Technical Stuff
- [[LocalSend]] uses [[Multicast]] to discover other hosts
- This is a more efficient way to broadcasting information than sending http request to each host (You don't know who is online, so you need to send to everyone in the subnet)
- I used Hono's [[OpenAPI]] to generate openapi schema and type-safe client, then use the generated client to interact with the TS LocalSend hono server.
- There is a cost though. With native `http` server and client, the bundle size is ~86KB, and increased to ~300KB+ with hono, valibot schema validation and openAPI schema docs.
- But I don't think it's a big deal, 300KB is still pretty small. Once we can generate openAPI schema, clients in other languages can be easily generated.