PRODSovereign European BaaS platformOpen Dashboard →

Performance · 11 min read

WASM vs container cold starts: what runtimes say

Affane Daylami · Fondateur · May 24, 2026

Back to blog

A WebAssembly module instantiates in microseconds or milliseconds depending on published sources. A typical Docker container typically starts in several hundred milliseconds, sometimes several seconds. A Firecracker microVM is between the two: less than 125 ms at startup, according to the AWS research paper that introduced it in 2020. These three families of figures do not share the same methodology, nor the same date, nor the same measurement protocol: they cannot be stacked in a single classification.

This English text was generated automatically from the French original and has not been reviewed yet.

This article brings together what identifiable third-party sources publish about WebAssembly's cold start compared to containers: a paper presented at USENIX NSDI, official documentation from Fastly, WasmEdge and Wasmer, and an academic research project on serverless isolation. No Aurabase figures are included. Our edge functions run well on Wasmtime, verified in the repository, but no cold start benchmark specific to our infrastructure has been published to date, a distinction detailed below. For the general benchmarking method applied elsewhere on this blog, see our pillar article onbenchmarking methodology.

The essentials

  • The AWS Firecracker paper (Agache et al., USENIX NSDI 2020) documents a microVM startup under 125 ms and a memory overhead under 5 MiB: the most precisely quantified reference in this article.
  • Fastly documented WASM instantiation times below a millisecond for its AOT Lucet runtime (the optimizations of which were then merged into Wasmtime) in 2019. This is a figure published by the supplier, never reproduced independently in the sources consulted here.
  • WasmEdge, a project under CNCF governance, claims in its official documentation a significantly lower startup and memory footprint than an equivalent Docker container, without independent countermeasures cited in this article.
  • Wasmtime, Wasmer and WasmEdge do not compile in the same way (Cranelift, Singlepass/Cranelift/LLVM of your choice, own AOT compiler): this choice of backend explains a good part of the gap between their published figures, not just the runtime as such.
  • Aurabase uses Wasmtime in production for its edge functions, verified in aura-functions/Cargo.toml, but to date does not publish any cold start figures measured on its own infrastructure.
Method note on sources

The third-party sources cited below are identifiable by their title, their author or publisher, and their publication date. This research relies on recognized and widely documented publications in the WebAssembly and serverless ecosystem, not a live query of their pages at the time of writing. Where a precise figure could not be confirmed with sufficient certainty, this article uses an order of magnitude rather than an exact value, and states this explicitly.

#
Framing

Why the WASM cold start occupies so much space in the serverless debate

Cold start refers to the additional latency paid by a request when the execution environment must initialize before the application code runs. On a classic edge or serverless function, this is far from being a marginal case: a platform that goes down to zero instances between two traffic peaks, or that distributes its execution across dozens of geographically dispersed edge nodes, pays this cost permanently, not just on the first deployment.

The subject has taken on an almost symbolic importance in the WASM ecosystem since a sentence from Solomon Hykes, co-founder of Docker, published on Twitter in March 2019: “If WASM+WASI existed in 2008, we wouldn’t have needed to create Docker. That’s how important it is. WebAssembly on the server is the future of computing. » This is an opinion of a recognized practitioner, not a measurement. It explains why the subject fascinates, it does not replace a sourced figure.

Aurabase offers two paths for its edge functions: the Studio editor, which runs code in the Deno runtime as documented in our Supabase migration guide, and the aura functions deployCLI, which aims for a separate path for functions written in Rust and compiled to WASM on Wasmtime. It is this second path that this article sheds light on, without giving it a cold start figure which does not yet exist.

#
Architecture

Why a WASM module starts structurally faster than a container

The difference does not come from a faster runtime in absolute terms: it comes from a shorter stack of steps between the query and the application code.

Starting a container mobilizes the host kernel: creating a new process, setting up the cgroups and namespaces that isolate it, mounting the layers of the image, then starting the application runtime inside (Node.js and its V8 engine, for example, themselves have an initialization cost). Each step adds system calls and, for an image never seen locally, a network download before it even begins.

A WebAssembly module is isolated at the virtual machine language level, not at the operating system level. Instantiating a module means allocating its linear memory, binding its imports, then jumping to its entry point, all within the already started process of the host runtime. No new processes, no image layers, no default file system mounts.

The choice of compilation mode adds an additional variable. Wasmtime compiles to JIT via its Cranelift backend when the module loads, or can precompile it in advance with wasmtime compile, which produces a .cwasm file already transformed into native machine code. Early compilation (AOT) removes the compilation step from the critical path of the request: this is exactly the lever that an edge architecture sensitive to cold start must activate.

Cargo.tomltoml
# Actual extract from Aurabase repository
# WASM Runtime
wasmtime = { version = "43", features = ["async", "cranelift"] }

This is a production dependency, not development: it confirms that Wasmtime actually runs on the CLI path of the Aurabase edge functions. However, it does not confirm any latency figures, which remains true as long as no dated benchmark is published.

#
Figures published

Containers and microVM: the most precisely quantified reference

In this area, the strongest source is an industry research paper, not a marketing blog post. Firecracker, the lightweight microVM technology developed by AWS and used notably for Lambda and Fargate, was presented at the USENIX NSDI 2020 conference by Agache et al. in the article “Firecracker: Lightweight Virtualization for Serverless Applications”.

This paper documents a boot time of less than 125 ms and a memory overhead of less than 5 MiB per microVM, with the ability to run thousands of microVMs on the same physical machine. This is a dated figure (2020), sourced from a peer-reviewed academic publication, and widely cited since then in the literature on serverless isolation.

A standard Docker container is generally higher: from a few hundred milliseconds to several seconds depending on the size of the image, the need to download it, and the boot time of the embedded application runtime. There is no single figure universally cited here, unlike Firecracker: the result depends too much on the image tested for a single value to achieve consensus.

#
Figures published

WebAssembly: what Fastly, WasmEdge and academic research document

Three sources, three different statuses: a historical supplier, a project under foundation governance, and a research paper.

Fastly launched Compute@Edge in 2019 on Lucet, its own pre-compiling WASM compiler and runtime. At this launch, the company documented WASM instantiation times below a millisecond, an order of magnitude that had a lasting impact on the WASM cold start discourse in the industry. In 2021, Fastly ceased autonomous development of Lucet and redirected its efforts towards Wasmtime, whose Cranelift compilation backend inherited part of these optimizations: this is one of the reasons why Wasmtime remains a reference today for this type of load.

WasmEdge, a WASM runtime under CNCF governance (originally SSVM, supported by Second State), claims in its official documentation a significantly lower startup and memory footprint than an equivalent Docker container, with an explicit positioning on edge and IoT loads. This is a figure published by the project publisher itself, to be read as such: a product claim, not an independent audit.

On the academic research side, Faasm (Shillaker & Pietzuch, USENIX ATC 2020, also available in pre-publication) builds a stateful serverless platform relying on WebAssembly isolation (via WAVM, not Wasmtime) precisely because it allows a function to be instantiated at a much lower cost than isolation by container or by VM. The paper is not specifically about Wasmtime, but it provides independent academic validation to the structural argument in the previous section.

#
Runtimes

Wasmtime vs Wasmer vs WasmEdge: why the published numbers don't line up

Comparing these three runtimes only by name hides the real variable: the compilation backend chosen, which radically changes the balance between startup speed and execution performance.

WasmtimeCranelift (JIT by default) + AOT via wasmtime compileBytecode Alliance · open governance, used by Fastly, Shopify, Aurabase
WasmerSinglepass, Cranelift or LLVM of your choiceSinglepass minimizes compilation time; LLVM maximizes execution performance
WasmEdgeProject-specific AOT compilerCNCF · positioned edge/IoT and cloud-native

Singlepass, Wasmer's fastest compilation backend, exists precisely because its team identified cold start as a distinct axis of steady-state execution performance: a module compiled in Singlepass starts faster, but runs slower during peak load than the same module compiled in LLVM. It’s an accepted compromise, not a hidden flaw.

A figure published by a runtime vendor is not an independent audit

Wasmer has published its own performance comparisons against Wasmtime, a practice which has sparked debates in the WASM community on the methodology used and the comparability of the scenarios tested. This is not an accusation of bad faith: it is a structural reminder. A runtime editor has a vested interest in publishing the scenario where it wins, which makes independent verification all the more useful before deciding on an architecture choice on a single number.

#
Summary

Comparative table: what each source documents, and what it does not document

<125ms
BOOT FIRECRACKER
Agache et al., NSDI 2020
3
WASM RUNTIMES COMPARED
Wasmtime, Wasmer, WasmEdge
0
BENCHMARK COLD START AURABASE
Wasmtime checked in production, no measurements published
Firecracker (AWS)< 125 ms startup, < 5 MiB overhead Peer-reviewed research paperAgache et al., USENIX NSDI 2020
Lucet → Wasmtime (Fastly)Instantiation under the millisecond (2019) Supplier figure, not reproduced hereAnnouncing Compute@Edge, Fastly
WasmEdgeSmaller startup and memory footprint vs DockerPublisher product claimOfficial WasmEdge documentation (CNCF)
Faasm (search)WASM isolation significantly cheaper to instantiate than a containerUses WAVM, not WasmtimeShillaker & Pietzuch, USENIX ATC 2020
Standard Docker containerHundreds of ms to several seconds No single consensus numberWidely documented behavior

These five lines do not read as a single classification: they come from different methodologies, dates and runtime generations. For a more in-depth methodological critique of the reliability of this type of WASM benchmark, our article on the limits of WebAssembly benchmarks goes further than the present comparison, which remains focused on what each source concretely asserts.

#
Practical implications

What this gap really changes for a choice of edge architecture

The cold start advantage of WASM counts most on the loads most sensitive to the latency of the first request, not on all loads equally.

It particularly weighs on very irregular edge traffic (bursts followed by silences), on isolation per request rather than per container shared between several requests, and on an infrastructure which actually goes down to zero instances between two peaks rather than keeping a hot pool permanently. On a stable and predictable load, where instances remain hot anyway, the cold start gap structurally matters less.

WebAssembly also maintains constraints distinct from cold start: access to the file system or the network goes through WASI, an interface still evolving depending on the runtimes and their versions, and a module compiled to start quickly (Singlepass on the Wasmer side, for example) is not necessarily the fastest once established under heavy load. Cold start and peak execution performance remain two distinct axes, rarely optimal simultaneously on the same compilation profile.

To evaluate a choice of edge architecture on this criterion, three concrete questions to ask any supplier, Aurabase included: which exact runtime is used, which compilation backend (JIT or AOT), and has the advanced cold start figure been measured by an independent third party or only by the runtime publisher itself.

#
Frequently Asked Questions

FAQs

Is WebAssembly cold start still faster than a Docker container?+
In order of magnitude, the sources cited in this article go in this direction: microseconds to milliseconds for the instantiation of a WASM module, compared to hundreds of milliseconds to several seconds for a classic container. But none of these figures come from a measurement protocol common to the two families of technologies, at different dates and on different versions. To be treated as a widely documented trend, not as a numerical guarantee valid for any load.
Why do Wasmtime, Wasmer and WasmEdge announce different starting numbers?+
Because they don't compile the same way. Wasmtime uses Cranelift as its default backend and offers early build (AOT) via wasmtime compile. Wasmer lets you choose between Singlepass (fastest compilation), Cranelift or LLVM (highest runtime performance, slower compilation). WasmEdge includes its own AOT compiler, designed for the edge and IoT. The choice of backend explains a good part of the gap between the figures published by each project.
What does AOT (ahead-of-time) compilation actually change for the cold start?+
An AOT compilation removes the compilation step from the critical path of the request: the WASM module is already transformed into machine code before invocation, all that remains is to load and instantiate it. This is the principle behind wasmtime compiles on the Wasmtime side and WasmEdge's own compiler. A JIT compilation pays part of this cost with each new cold instance, unless the runtime caches the result.
Has Aurabase released a cold start benchmark for its edge WASM functions?+
No. Aurabase uses Wasmtime in production for the CLI path of its edge functions, dependency verified in aura-functions/Cargo.toml (version 43, async and cranelift features), but no cold start figures measured on this infrastructure have been published to date. Our methodology commitment for any future performance figures is detailed in our benchmark methodology article.
What is the difference between the cold start of a WASM runtime and that of a serverless Postgres database?+
These are two different layers of the stack. The cold start described here concerns the code execution environment, the WASM runtime itself. A serverless Postgres database adds its own startup latency, related to the connection pool, when resuming a suspended instance or establishing a new encrypted connection. Our article on serverless Postgres cold start specifically addresses this second layer.
Can we trust the cold start benchmarks published by the WASM runtime editors themselves?+
With caution. A figure published by a runtime's publisher describes its own test conditions, rarely reproduced independently, and the WASM community has already experienced public disagreements over the methodology for performance comparisons between runtimes. Our article dedicated to the limitations of WebAssembly benchmarks details these methodological issues in more depth.

For the database layer of this same problem, see our article on the serverless Postgres cold start.

READY TO DEPLOY?

Your backend in five minutes.

No credit card required · 500 MB free · 50,000 MAU