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.

Picture of Andrew Jakubowicz

Andrew Jakubowicz

he/him
Software Engineer at Canva
Links:

Andrew 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.

Picture of Taj Pereira

Taj Pereira

he/him
Technical Lead at Canva
Links: icon of github

Taj 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.