Debunking Rust Wasm Performance Myths: Why We Moved Core Business Logic to Rust at Canva
by Andrew Jakubowicz and Taj Pereira
There is an ongoing myth in the web community that states you should only reach for WebAssembly when you’re doing “heavy computation”—image processing, games, AI, or complex simulations — because the overhead of Foreign-Function Interface (FFI) across the JS/Wasm barrier is supposedly too high for everything else.
In this talk we put those myths to the test by sharing lessons from shipping production-grade systems in Rust Wasm at Canva.
We will share findings ranging from the usage patterns the community expects (heavy compute running the Vello CPU 2D vector graphics rasteriser) to architectures the community advises against: complex application logic and data modelling via a fine-grained wasm-bindgen API.
We’ll demonstrate why cargo-culted understandings of Rust Wasm performance are dangerously incomplete.
Andrew Jakubowicz
he/himAndrew is a Software Engineer at Canva working on the complex intersection of Rust, WebAssembly, and JavaScript to enhance Canva’s rendering technology. He is an active contributor to the Linebender project, specifically focusing on Vello.
Taj Pereira
he/himTaj is a Technical Lead at Canva paving the adoption of Rust within the organisation. Outside of Canva, Taj is a core maintainer of various Linebender projects like Parley and Vello.