Hey friends!
We currently do not have client-side in-browser Javascript (or WASM) bindings on the 2020 roadmap, but we have made some exciting and relatively unexpected progress just this week that make it much more feasible.
At a high level, there are a couple of challenges we need to overcome for this to work:
- We need the code running inside the browser. This is relatively straightforward these days to be honest - even though the Uplink library is large, Go natively can target WASM modules, which can then be used to interoperate with the browser inside Javascript. Recent testing just this week suggests that this WASM module can be delivered compressed in a much smaller package than we thought it would, so while it won’t be the smallest Javascript library, it is well within the range of reasonableness now. We have some more testing and work to do before this is part of our build process, which may not happen for some time because:
- We need the browser to be able to talk to nodes directly over SSL which requires browser trusted certificates for all storage nodes. For a flavor of how this works, please check out https://blog.filippo.io/how-plex-is-doing-https-for-all-its-users/. It’s an exciting solution that will require we provide DNS entries to all storage nodes automatically. Unlike that blog post though, we probably can’t afford the same agreement with Digicert. Luckily, Let’s Encrypt might be able to help us here! We are working on some approaches to combine Let’s Encrypt CA signed certs with our existing decentralized certificate authority node identity system.
- We need to support proxying traffic over HTTP requests to storage nodes. Our current protocol does not use HTTP.
Once we’ve tackled these three things, then browsers will be able to talk to storage nodes directly with a Javascript library. Sadly it’s not quite as straightforward as we’d like, which is why we’re still expecting a long time estimate on it (it’s not slated for 2020), but we do believe all of these problems are directly tractable and solveable. If anyone wants to help contribute to the project to get these steps across the line sooner than 2020, please let me know!