A Yew WebRTC Chat
About
This project showcase a simple HTML chat using WebRTC and programmed in Rust and compiled to WASM. Live Demo
After reading this wonderful post by the Cheerp team I wanted to see if the same can be done with "pure" Rust using WASM.
Since doing a game from scratch was too complicated as a first step I aimed to just play along with Rust, HTML (using Yew) and WebRTC by doing a chat application. 3D and WebGL will come another time.
It turns out that it is not very difficult to get something working as you can see below:
Notes
If you try to run locally prefer testing with Chrome locally because I encountered issues with Firefox. Also, be wary that some extensions might block WebRTC connections. Also, if you are testing with a friend it might not work as I am using only a STUN server. From the tests I made, I found out that the connections are often blocked on corporate networks and using a TURN server would solve the problem. But unlike STUN server there aren't free TURN servers. Finally, the error handling is not totally done yet as I don't know how I actually handle errors (and also what the WebRTC API allows me to do). If you are stuck reload the page on both side and try again.
Build and Run
To build this project you need to:
- Install wasm-pack with
cargo install wasm-pack
- Install http-server
cargo install http-server
To run it once build you need to type
- Compile code with
wasm-pack build --target web --no-typescript --out-dir ./static/pkg
- Run web server in the
static
dir withhttp-server -p 8080
(Alternatively you can use any static file server likepython3 -m http.server
)
Special thanks
- The Rust team for making a great language
- The Yew team for making an awesome front-end framework
- Sajad Hashemian for making this nice HTML chat