Dans le principe, WebAssembly est une forme de bytecode pour navigateur. Le bytecode peut être considéré comme une étape intermédiaire entre le code machine, qui n’est compréhensible que par l'ordinateur, et un langage de programmation typique, lisible pour l'homme mais qui nécessite d’être compilé au préalable. C’est de là que WebAssembly tire sa relative rapidité : le travail de conversion du code par l'ordinateur est fortement minimisé. Mais il est généralement assez malaisé d’écrire en bytecode. L'avantage de Wasm, c’est qu’il évite de devoir travailler soi-même dans ce langage de programmation. Dans la pratique, on peut écrire une application Web en C ou C++, par exemple.
Le code source est ensuite converti grâce à l'application Emscripten. Cet outil existait avant l'arrivée de WebAssembly : sa raison d’être était de convertir le C/C++ en JavaScript (ou ams.js). Mais le code peut également être réécrit en Wasm. Il est précompilé, ce qui évite d'avoir à le compiler ou l’interpréter au moment de l'exécution de l'application. Lorsque celle-ci est ouverte dans le navigateur, une petite machine virtuelle est automatiquement lancée. Techniquement, c’est dans cette machine virtuelle que l'application fonctionne.