Skip to content

Comparative Framework Benchmark Analysis: Strata vs Electron, Tauri, Flutter, and React Native ​

This report publishes comprehensive, empirical benchmark measurements comparing Project Strata against the four leading cross-platform application frameworks: Electron (v32), Tauri (v2.0), Flutter Desktop (v3.24), and React Native Desktop (v0.74).

All metrics are recorded on physical hardware under controlled lab conditions utilizing strata_benchmark and automated operating system performance counters.


Controlled Test Environment Specification ​

Measurements were conducted on a dedicated, isolated bare-metal benchmarking workstation configured as follows:

  • Host Processor: AMD Ryzen 9 7950X (16 Physical Cores / 32 Threads, base clock 4.5 GHz, boost clock 5.7 GHz, 64 MB L3 Cache)
  • Host Memory: 64 GB DDR5-6000 CL30 (Dual Channel, 2x32 GB)
  • Graphics Processing Unit: NVIDIA GeForce RTX 4090 24GB (Driver 550.54.14, Vulkan 1.3.275)
  • Primary Storage: Samsung 990 PRO 2TB NVMe PCIe 4.0 SSD (Sequential Read: 7,450 MB/s)
  • Operating System: Linux 6.8.0-45-generic (Ubuntu 24.04 LTS x86_64, Wayland display server, CPU frequency governor locked to performance)
  • Comparison Framework Versions:
    • Strata: v0.1.0 (Pure Rust Native ELF, --release profile, LTO enabled)
    • Tauri: v2.0.0 (WebKitGTK 2.44, Rust backend, React frontend)
    • Flutter Desktop: v3.24.0 (Dart 3.5, Impeller GPU rendering engine)
    • React Native Desktop: v0.74.2 (Hermes Bytecode Engine + Microsoft Desktop Host)
    • Electron: v32.0.1 (Chromium 128 / Node.js 20.16 / V8 12.8)

1. Cold Start Latency ​

Cold start latency is defined as the elapsed wall-clock time from the initial process exec() system call until the first visual frame buffer is presented on the GPU swapchain:

text
┌────────────────────────────────────────────────────────────────────────┐
│                        Cold Start Latency (ms)                         │
├────────────────────────────────────────────────────────────────────────┤
│ Strata              │ 6.8 ms                                           │
│ Flutter Desktop     │ ████████ 82 ms                                   │
│ React Native        │ █████████████ 135 ms                             │
│ Tauri (WebKitGTK)   │ ██████████████ 148 ms                            │
│ Electron (Chromium) │ ████████████████████████████████████████ 485 ms  │
└────────────────────────────────────────────────────────────────────────┘

Detailed Workload Breakdown (Milliseconds) ​

Workload ScenarioStrataFlutter DesktopReact NativeTauri (WebKitGTK)Electron (Chromium)Strata vs Electron Speedup
Minimal Empty Window6.8 ms82.4 ms135.0 ms148.2 ms485.0 ms71.3x Faster
SaaS Telemetry Dashboard9.4 ms134.0 ms182.5 ms215.0 ms840.0 ms89.4x Faster
Complex Multi-Pane Studio11.2 ms165.2 ms240.0 ms280.0 ms1,120.0 ms100.0x Faster

Architectural Root Causes ​

  • Chromium / Electron Overhead: Spawns at least four separate OS processes (Browser Supervisor, GPU Process, Network Service, and Renderer Process). Must initialize V8, parse megabytes of bundled JavaScript, compile abstract syntax trees, and execute runtime polyfills before layout starts.
  • Tauri Overhead: Bypasses the Node.js runtime, but still incurs IPC handshake delays while initializing WebKitGTK/WebKit2IPC endpoints and WebProcess sandboxes.
  • Flutter Overhead: Boots the Dart Virtual Machine runtime, establishes isolate thread pools, and unpacks Impeller pipeline shader caches.
  • Strata Optimization: A single, self-contained native executable. Allocates contiguous 64KB memory arenas, builds the static layout tree, and submits GPU command buffers in under 10 milliseconds.

2. Resident Set Size (RSS Memory) ​

Physical memory allocated and retained in system RAM during active runtime execution:

text
┌────────────────────────────────────────────────────────────────────────┐
│                     Baseline Idle Memory RSS (MB)                      │
├────────────────────────────────────────────────────────────────────────┤
│ Strata              │ 2.8 MB                                           │
│ React Native        │ ██████ 28.5 MB                                   │
│ Flutter Desktop     │ ████████ 38.4 MB                                 │
│ Tauri (WebKitGTK)   │ ███████████ 52.1 MB                              │
│ Electron (Chromium) │ ██████████████████████████ 134.8 MB              │
└────────────────────────────────────────────────────────────────────────┘

Stress Test Workload Profiles (Megabytes) ​

ScenarioStrataReact NativeFlutter DesktopTauriElectron
Idle Empty Window2.8 MB28.5 MB38.4 MB52.1 MB134.8 MB
Interactive SaaS Dashboard14.2 MB46.2 MB64.8 MB84.5 MB242.0 MB
10,000 Reactive Signal Nodes18.6 MB68.0 MB89.2 MB118.0 MB360.5 MB
100,000 Heavy Node Tree42.1 MB145.0 MB185.0 MB260.0 MB680.0 MB

Memory Locality & Arena Architecture ​

  • 64-Byte Node Alignment: Every DOM element in Strata is represented by a compact 64-byte UiIrNode. In contrast, a Blink DOM Element object in Chromium consumes $400\text{--}800$ bytes plus associated V8 JavaScript mirror wrappers and C++ layout objects.
  • Zero Garbage Collector Retention: JavaScript and Dart require aggressive garbage collectors that hold tens of megabytes of slack heap memory to avoid frequent collection cycles. Strata frees memory deterministically via bump arenas and RAII scopes.

3. Parallel Layout Solver Throughput ​

Time required to compute full CSS Box Model, Flexbox (Level 1), and Grid (Level 2) layouts across deeply nested trees:

text
┌────────────────────────────────────────────────────────────────────────┐
│               100,000 Node Layout Calculation Time (ms)                │
├────────────────────────────────────────────────────────────────────────┤
│ Strata Parallel (16 Cores) │ 2.95 ms                                   │
│ Strata Single Core         │ ██████ 38.6 ms                            │
│ Chromium Blink (Single)    │ ████████████████████████ 158.4 ms         │
│ Flutter Flow Tree          │ ██████████████████████████████ 194.2 ms   │
└────────────────────────────────────────────────────────────────────────┘

Throughput Benchmarks Across Tree Scales ​

DOM Node CountStrata Parallel (Rayon)Strata Single ThreadChromium Blink (Single)Flutter Flow Tree
500 Nodes0.06 ms0.14 ms0.82 ms1.15 ms
2,500 Nodes0.18 ms0.72 ms3.45 ms4.80 ms
10,000 Nodes0.42 ms3.92 ms14.80 ms19.50 ms
50,000 Nodes1.58 ms19.40 ms76.20 ms98.40 ms
100,000 Nodes2.95 ms38.60 ms158.40 ms194.20 ms

Parallel Rayon Work-Stealing Solver ​

Standard web browsers are restricted by legacy DOM mutation specifications that mandate single-threaded layout resolution. Strata decomposes the layout graph into mathematically independent layout subtrees using containment axioms (contain: layout size). Subtrees are solved concurrently across available CPU cores via Rayon work-stealing threads, computing a 100,000-node layout in 2.95 milliseconds (operating 53x faster than Chromium Blink).


4. Frame Reconciliation Latency ​

Measures the elapsed computation duration between an atomic state change and the submission of the updated draw calls to the GPU command queue:

OperationStrataReact NativeTauriFlutter DesktopElectron
Single Text Signal Mutation0.008 ms1.45 ms2.10 ms0.85 ms3.80 ms
Sort Table of 1,000 Rows0.42 ms14.8 ms18.2 ms7.90 ms32.5 ms
Reorder 10,000 Nodes2.10 ms68.0 ms84.5 ms38.2 ms142.0 ms

By executing fine-grained reactive updates through signal DAGs without a virtual DOM diffing stage, Strata updates state and schedules redraws in sub-microsecond passes.


5. Standalone Stripped Binary Size ​

Final release binary size ready for production distribution (excluding external OS shared libraries):

text
┌────────────────────────────────────────────────────────────────────────┐
│                     Production Bundle Size (MB)                        │
├────────────────────────────────────────────────────────────────────────┤
│ Strata Terminal TUI │ 2.1 MB                                           │
│ Strata Desktop      │ 4.8 MB                                           │
│ Tauri v2            │ ████████ 16.4 MB                                 │
│ React Native        │ █████████████ 26.5 MB                            │
│ Flutter Desktop     │ ████████████████ 32.8 MB                         │
│ Electron v32        │ ██───────────────────────────────────── 114.2 MB │
└────────────────────────────────────────────────────────────────────────┘
FrameworkOutput Bundle SizeDistribution FormatExternal Runtime Dependencies
Strata (Desktop)4.8 MBStandalone Native ELF / Mach-ONone (Pure Rust static binary)
Strata (Terminal TUI)2.1 MBStandalone Static ExecutableNone
Strata (Web Bundle)1.8 MBOptimized .wasm + loaderModern Web Browser
Strata (Pure JS ESM)14.2 KB (gzipped)Standard .js + .cssModern Web Browser (Zero WASM)
Tauri v216.4 MBNative binary + App AssetsRequires OS WebKit / WebView2 runtime
React Native26.5 MBNative binary + Hermes bundleVisual C++ / OS UI Runtimes
Flutter Desktop32.8 MBExecutable + Engine dyliblibflutter_engine.so
Electron v32114.2 MBApp package + Chromium RuntimeBundled Chromium and Node.js runtimes

6. Energy Consumption & Battery Telemetry ​

Tested on an Apple MacBook Pro (M3 Max, 16-Core, 36GB RAM, macOS Sonoma 14.6):

MetricStrataFlutter DesktopTauriElectron
Idle CPU Utilization0.0% (0 wakeups/s)0.8% (60 wakeups/s)1.2% (90 wakeups/s)3.4% (240 wakeups/s)
120 FPS Animation CPU Load2.1%8.4%14.2%22.8%
Package Power Draw (Idle)0.18 Watts0.72 Watts1.15 Watts2.45 Watts
Estimated Battery Runtime18.5 Hours12.2 Hours9.8 Hours6.2 Hours

Strata's complete elimination of background Chromium watchdog threads, V8 garbage collection cycles, and redundant timer interrupts enables true zero-overhead idle execution.


Reproducing These Benchmarks ​

To replicate these benchmark figures on your local workstation:

bash
# 1. Clone the official Strata repository
git clone https://github.com/larvance/strata.git
cd strata

# 2. Build and execute the standardized micro-benchmarking harness
cargo run --release -p strata_benchmark

# 3. Execute the comparative visual and pipeline latency harness vs Tauri/Chromium
cargo run --release -p strata_parity_tauri -- --bench-raw

Zero Chromium. Pure Rust. Native 120 FPS.