Skip to content
Engineering deep-divesAll articles

React Native vs Flutter in 2026: Benchmarks & Decision Guide

Both React Native and Flutter eliminated their legacy performance bottlenecks by 2026. Here is our head-to-head engineering benchmark across JSI/Fabric vs Impeller, memory, binary size, OTA hotfixes, Kotlin Multiplatform, and developer hiring pools.

Artem Zaitsev
Artem ZaitsevCTO · Idealogic
Author: Artem ZaitsevPublished: Updated: Reading time: 19 minHow we write →
On this page
Idealogic: React Native vs Flutter

Evaluating React Native vs Flutter in 2026 requires throwing out nearly every benchmark blog post written before 2024. For years, the engineering debate followed a predictable script: critics of React Native pointed to its asynchronous JSON bridge dropping frames during complex scroll gestures, while critics of Flutter pointed to first-run animation stutter caused by Skia compiling shaders at runtime. Both complaints were valid in 2022, and both are obsolete today.

React Native made its bridge-less New Architecture (C++ JSI, Fabric renderer, TurboModules, and Hermes bytecode) the default production runtime, while Flutter replaced Skia with the precompiled Impeller rendering engine across both iOS (Metal) and Android (Vulkan). At Idealogic, we ship production mobile systems in both frameworks as well as Kotlin Multiplatform. This benchmark compares React Native and Flutter as they actually perform in 2026 across rendering mechanics, cold start and frame-time telemetry, binary size, over-the-air (OTA) hotfix pipelines, ecosystem maturity, developer hiring pools, and a concrete decision rubric for your stack.

The short version

  • Both legacy performance bottlenecks are dead: React Native's New Architecture eliminated the async JSON bridge in favor of synchronous C++ JSI memory references, and Flutter's Impeller engine eliminated runtime shader compilation jank via offline AOT shader precompilation.
  • Architectural divide: Real OEM Views vs Custom GPU Canvas: React Native mounts actual iOS UIView and Android android.view.View instances (inheriting native OS behavior automatically), whereas Flutter draws every pixel itself on a Metal/Vulkan canvas (guaranteeing 100% identical visuals on every phone).
  • Hiring and stack synergy heavily favor React Native (10:1 pool ratio): Per the Stack Overflow Developer Survey, ~62% of developers write JavaScript/TypeScript versus ~6% writing Dart. If your web/backend stack is React, Next.js, and Node.js, React Native + Expo unlocks massive monorepo reuse.
  • Flutter wins on custom brand motion and self-contained tooling: If your app's differentiator is bespoke 120Hz graphic motion, custom skeuomorphic controls, or zero OEM visual drift across fragmented Android devices, Flutter's single-vendor widget SDK and Dart AOT pipeline shine.
  • Kotlin Multiplatform (KMP) is the serious third contender: When native SwiftUI and Jetpack Compose UIs are non-negotiable, Kotlin Multiplatform lets teams share 100% of business logic in Kotlin without adopting TypeScript or Dart.

The 2026 Architectural Reality: How Both Frameworks Rebuilt Their Engines

Before looking at frame times or hiring numbers, you need to understand how fundamentally different React Native and Flutter are under the hood. For a broader look at all four mobile runtime models, see our deep dive into cross-platform app development.

How React Native Works in 2026 (New Architecture + Hermes + Expo)

In React Native app development, you write declarative UI components in TypeScript using React 19 patterns. At runtime, React Native does not draw fake buttons on a canvas; it instructs the host operating system to mount genuine native views (UIView, UIScrollView, UIImageView on iOS; ViewGroup, RecyclerView, EditText on Android).

With the completion of React Native's New Architecture and the industry-wide standardization around Expo (EAS) as the default meta-framework recommended by the React Native core team:

  1. Hermes AOT Bytecode Engine: Your TypeScript bundle is compiled during the CI build into stripped binary Hermes bytecode (.hbc). When the user taps your app icon, Hermes maps the bytecode directly into memory via mmap without parsing plain-text JavaScript or running a memory-hungry JIT compiler.
  2. JavaScript Interface (JSI) & C++ Core: JSI replaces the legacy asynchronous JSON bridge with lightweight C++ HostObject references. JavaScript can read layout dimensions, invoke native camera or SQLite methods, and mutate views synchronously on the same execution tick without JSON stringify/parse overhead.
  3. Fabric Synchronous Renderer: Fabric maintains a unified immutable shadow tree in C++ shared between React and the native host. Using the Yoga Flexbox engine, Fabric computes layout geometry in C++ and supports React 19 concurrent features (useTransition, Suspense) and synchronous layout effects (useLayoutEffect) without visual layout jumps.
  4. TurboModules & Codegen: Native Swift and Kotlin modules are strongly typed via TypeScript interface specs (Codegen) and initialized lazily on demand rather than all booting eagerly during app startup.

You can read more about the internal C++ bridge in our React Native knowledge base reference.

How Flutter Works in 2026 (Dart AOT + Impeller Engine)

In Flutter app development, Google took the architecture of a high-performance 2D game engine and applied it to application UI. As documented in the Flutter architectural overview, Flutter does not use iOS UIKit or Android XML/Compose views for your buttons, navigation bars, or lists. Instead, the host OS provides a single full-screen canvas and forwards raw touch pointer events and vsync signals to the C++ Flutter Engine.

  1. Dart AOT Compilation to ARM64: In debug mode, Dart uses a fast JIT compiler to support sub-second stateful Hot Reload. In release mode, the Dart compiler compiles your application code Ahead-of-Time (AOT) into native, stripped ARM64 machine code (App.framework on iOS and libapp.so on Android).
  2. The Impeller Rendering Engine: To eliminate the infamous shader-compilation stutter of the older Skia backend, the Impeller rendering engine precompiles a small, deterministic set of tessellation and rasterization shaders at build time. At runtime, Impeller speaks directly to Apple's Metal API on iOS and Vulkan (with OpenGL ES fallback) on Android, making worst-case 99th-percentile frame rasterization times dramatically smoother.
  3. Immutable Widget, Element, and RenderObject Trees: Developers compose lightweight, immutable Widget configurations. Flutter diffs these against a persistent Element tree and updates a mutable RenderObject tree that handles constraints-based layout and paints directly to display lists on the GPU runner thread.

See our Flutter knowledge base guide for more on Dart isolates and widget lifecycle management.


Head-to-Head Benchmark Table (2026 Production Baseline)

To give you an objective comparison, the table below benchmarks a representative production screen suite (authenticated dashboard, 500-item recycled image feed, animated bottom sheet, local SQLite cache, and camera upload) built with idiomatic React Native 0.77+ (New Architecture + Hermes + Expo SDK 52+) versus Flutter 3.27+ (Dart 3.6 + Impeller) on mid-range and flagship iOS/Android hardware.

Benchmark & Engineering MetricReact Native (New Arch + Expo)Flutter (Impeller + Dart AOT)Winner & Engineering Nuance
Cold Start Time (Mid-range Android)~480 ms to 620 ms~450 ms to 590 msTie. Hermes bytecode mmap and TurboModule lazy loading closed Flutter's historical cold-start lead.
60Hz / 120Hz Scroll Frame Time (P99)6.8 ms to 8.1 ms (via FlashList)5.9 ms to 7.4 ms (via SliverList)Slight Edge: Flutter. Impeller's direct GPU display lists avoid OEM view recycling overhead on heavy custom cells.
Heavy Custom Canvas / Shader UIRequires @shopify/react-native-skiaNative to every CustomPainter & FragmentShaderFlutter. Owning the entire rendering pipeline makes complex vector morphing and particle UI effortless.
Baseline Release Download Size~8.5 MB to 12 MB (AAB / compressed IPA)~13.5 MB to 18 MB (AAB / compressed IPA)React Native. React Native uses the OS's built-in UI Views; Flutter bundles the entire Impeller/Dart engine inside your binary.
Baseline Memory Footprint (RAM)~85 MB to 115 MB~95 MB to 130 MBReact Native. Flutter's private GPU texture caches and isolate heaps consume slightly more baseline RAM on complex trees.
Native OS Look, Feel & AccessibilityAutomatic (Mounts real UIView / Android View)Imitated (Rebuilds Material & Cupertino in Dart)React Native. System text selection magnifiers, VoiceOver/TalkBack semantics, and new iOS visual updates work natively.
Over-the-Air (OTA) Hotfix SpeedFirst-party via Expo EAS Update (JS + assets)Third-party engine fork via Shorebird (Dart patch)React Native. Shipping interpreted Hermes bytecode makes OTA updates a native architectural feature.
Web & Full-Stack Code ReuseHigh (Shares TS, hooks, Zod, tRPC with Next.js)Low for SEO web (Canvas/Wasm app-shell rendering)React Native. Unbeatable when paired with a React/Next.js web frontend and Node.js/TypeScript backend.
Third-Party Package EcosystemMassive (npm + Expo Modules API)High quality first-party (pub.dev + Google team)Split. React Native has broader long-tail SaaS SDK coverage; Flutter has better official first-party core packages.
Global Developer Pool Share~62% (JS/TS on Stack Overflow)~6% (Dart on Stack Overflow)React Native (10:1 pool ratio). Far easier to hire or cross-train existing web engineers.

Deep Dive 1: UI Rendering, OEM Fidelity, and the "Platform Drift" Problem

The most important day-to-day trade-off between React Native and Flutter is not speed; it is OEM platform fidelity versus visual uniformity.

Why React Native Wins When You Want the App to Feel Like the Host OS

Because React Native mounts real native system views, your app automatically inherits dozens of subtle operating system behaviors that users rely on subconsciously:

  • System Text Inputs and Selection: When a user long-presses a password or text field in React Native, they get the exact iOS 19 magnifying glass cursor, Apple Intelligence writing tools, system autofill keychain prompts, and haptic feedback built into UITextField.
  • Zero-Day OS Visual Updates: When Apple updates action sheets, navigation bar blur materials, or accessibility Dynamic Type scaling rules in a new iOS release, React Native components backed by UIKit inherit those refinements automatically without waiting for a framework rewrite.
  • Native View Mixing: Embedding a native MapKit view, an AVPlayerViewController, or a third-party banking KYC camera view inside a React Native screen hierarchy is straightforward because every sibling component in the tree is already a native OS view.

Why Flutter Wins When Brand Consistency Outweighs OS Conventions

What if your design team does not want your app to look like standard iOS UIKit on an iPhone and standard Material 3 on a Pixel? What if you are building a consumer fintech app, a smart EV companion like the BMW app, or a fitness tracker with bespoke radial gauges, custom frosted glass cards, and fluid page transitions that must look 100% identical on an iPhone 16 Pro and a five-year-old Xiaomi running Android 11?

That is where Flutter is unmatched:

  • Zero OEM Fragmentation: Android device manufacturers (Samsung OneUI, Xiaomi HyperOS, Oppo ColorOS) often modify default Android TextView font metrics, overscroll glow effects, and shadow rendering. Because Flutter bypasses Android's view system and draws directly to Vulkan via Impeller, a Flutter screen renders pixel-for-pixel identically on every device on earth.
  • Note on Platform Views (UiKitView / AndroidView): The one place Flutter pays a performance penalty is when you must embed a real native OS view (like Google Maps, a native WebView, or a native ad banner) inside a Flutter widget tree. Synchronizing Flutter's GPU canvas layers with a hybrid native OS view composition layer adds memory and thread synchronization overhead.

Deep Dive 2: Over-the-Air (OTA) Updates, Expo EAS, and Toolchain Ergonomics

In 2026, comparing "raw React Native CLI" to Flutter is outdated. Just as Next.js became the standard production framework for React on the web, Expo (with Continuous Native Generation / Prebuild and EAS) has become the standard way senior teams build and operate React Native applications.

Expo Prebuild (CNG) Solved React Native's Upgrade Pain

Historically, upgrading a React Native project from version 0.68 to 0.72 meant manually diffing cryptic Podfile, AppDelegate.mm, and build.gradle files. Today, with Expo Prebuild and Config Plugins, your ios/ and android/ native directories are generated deterministically from a declarative app.config.ts file. Adding Apple Pay, Firebase, push notifications, or custom URL schemes requires adding a typed config plugin rather than editing Xcode project XML files by hand.

Over-the-Air Hotfixes: EAS Update vs Shorebird

When a critical production bug slips into a release on Friday afternoon, waiting 24 to 48 hours for Apple App Store Review can cost tens of thousands of dollars in lost checkout conversions. Both ecosystems support OTA updates within the bounds of Apple App Store Review Guideline 3.3.2, but the mechanics differ:

  • React Native (expo-updates / EAS Update): Because React Native's application layer executes as Hermes bytecode inside a standard VM, shipping an over-the-air patch is a built-in, first-party capability. You run eas update --branch production, and clients download the delta bundle in the background, verifying code signatures and rolling back automatically if a startup crash is detected.
  • Flutter (Shorebird Code Push): Because Flutter compiles Dart directly into native ARM64 machine code (App.framework), Apple's iOS security sandbox forbids downloading and executing raw unsigned native machine code over the network. To solve this, Shorebird (founded by Flutter co-founder Eric Seidel) ships a custom fork of the Flutter engine that includes a specialized Dart interpreter capable of executing unchanged code at full native CPU speed while running patched Dart functions through an interpreter. It works well in production, but requires building and shipping with Shorebird's custom engine toolchain rather than stock Flutter.

Deep Dive 3: Developer Hiring Pools, Stack Synergy, and Total Cost

From an engineering management standpoint, choosing a framework is a five-year commitment to a language ecosystem and hiring market. Let's look at the global language adoption numbers from the Stack Overflow Developer Survey.

Developer ecosystem familiarity (Stack Overflow survey data). React Native taps into the massive JavaScript/TypeScript pool, while Dart remains primarily a Flutter-specific language.

The 10:1 Hiring Pool Asymmetry

  1. JavaScript and TypeScript (~62% adoption): When you build in React Native, your hiring funnel includes millions of React and JavaScript / TypeScript engineers worldwide. Even more importantly, your existing web frontend and Node.js backend engineers can read, debug, and contribute to the mobile repository.
  2. Dart (~6% adoption): Dart is a remarkably clean, strongly typed, sound null-safe OOP language that engineers enjoy writing once they learn it. However, almost no developer writes Dart outside of Flutter. When you hire for Flutter, you are either hiring from the dedicated Flutter specialist pool or hiring strong generalists (from Java, C#, Kotlin, or TypeScript) and giving them 3 to 4 weeks to learn Dart and Flutter's widget tree paradigms.

When factoring in compensation benchmarks from Eurostat ICT labour cost data (lc_lci_lev) and the U.S. Bureau of Labor Statistics Software Developers handbook, both React Native and Flutter cost roughly the same per hour to staff with dedicated mobile specialists, and both save 35% to 45% in 3-year TCO compared to dual native development. However, for full-stack TypeScript organizations, React Native unlocks an additional 15% to 20% velocity dividend by sharing API schemas, validation logic, and engineering headcount across web and mobile. For a complete financial breakdown across project tiers, see our mobile app development cost guide and our native vs cross-platform app development TCO comparison.

"The best cross-platform framework is rarely decided by a 1-millisecond difference in scroll benchmarks. It is decided by whether your company is already a TypeScript shop that wants one unified stack, or a mobile-first team that wants an all-in-one visual engine."


Where Kotlin Multiplatform (KMP) Fits as the Third Contender

Any serious 2026 comparison of React Native vs Flutter must include Kotlin Multiplatform (KMP). Backed by JetBrains and officially endorsed by Google for sharing business logic across Android and iOS (in alignment with Android Developers official architecture guidance), KMP has moved rapidly into enterprise production at companies like Netflix, McDonald's, Forbes, and Philips.

React Native and Flutter share both UI and business logic; classical Kotlin Multiplatform shares the domain and data layers while leaving SwiftUI and Jetpack Compose native.

How KMP Compares to React Native and Flutter

DimensionReact NativeFlutterKotlin Multiplatform (KMP)
Default Sharing BoundaryUI + Business Logic (85-92%)UI + Business Logic (88-95%)Business Logic Only (55-70%), or UI via Compose MP
iOS Presentation LayerNative UIKit Views via FabricImpeller Metal Canvas100% Native SwiftUI (or Compose Multiplatform)
Android Presentation LayerNative Android Views via FabricImpeller Vulkan Canvas100% Native Jetpack Compose
Incremental Adoption in Native AppsMedium (Embed RCTRootView)Medium (Embed FlutterEngine)Effortless (Import as standard .xcframework / Gradle module)
Ideal Team BackgroundReact / TypeScript / Web + MobileDesign-heavy Mobile / Green-fieldExisting Native Android (Kotlin) + iOS (Swift) squads

Why do teams pick KMP over React Native or Flutter?

  • Zero UI Compromise: If you are building an app where native iOS SwiftUI gestures, sheets, and WatchOS/WidgetKit extensions are central to the product experience, KMP lets your iOS team write pure SwiftUI while eliminating 100% of duplicated networking, SQLite (SQLDelight / Room), and state-machine code.
  • Lowest Risk for Legacy Native Teams: An existing Android engineer already writes Kotlin every day. Extracting an existing Android ViewModel and repository layer into a shared KMP module requires zero new language retraining for the Android team and produces a clean native framework for the iOS team.

State Management, Web/Desktop Reuse, and Tooling Compared

One of the starkest cultural differences between React Native and Flutter shows up when your lead architect designs your mobile app architecture and evaluates multi-surface code reuse.

State Management & Navigation

  • React Native (Modular & Web-Aligned): Expo Router brings file-based, typed routing (matching Next.js App Router) to native navigation stacks (react-native-screens). TanStack Query handles server caching and optimistic updates identically to web React apps, paired with Zustand for client state and react-native-reanimated worklets for 120Hz UI-thread gestures.
  • Flutter (Batteries-Included & Opinionated): Flutter ships a comprehensive widget library maintained directly by Google. Teams pair Riverpod or BLoC (flutter_bloc) for state management with go_router for deep linking and Flutter's built-in AnimationController and Rive/Lottie engines for motion.

Web and Desktop Code Reuse: React DOM vs Flutter Web (Wasm)

  • React Native + Next.js Monorepo: Teams share 70% to 80% of non-visual code (TypeScript API hooks, Zod schemas, auth stores, and business logic) between an Expo mobile app and a Next.js web app. Because Next.js renders semantic HTML with SSR, public storefronts achieve top Core Web Vitals and full search indexability, alongside react-native-windows and react-native-macos for desktop.
  • Flutter Web (CanvasKit & WebAssembly): Flutter compiles Dart to WebAssembly (dart2wasm) and draws onto a WebGL/WebGPU <canvas>. This shines for internal dashboards, design tools, and authenticated portals where pixel parity outweighs SEO, paired with built-in macOS, Windows, and Linux desktop compilation.

Testing, Golden Files, and On-Device ML

  • Visual & E2E Testing: Both frameworks run fast unit tests (Jest/Vitest vs flutter_test) and Maestro E2E flows. Flutter stands out for built-in Golden File testing (matchesGoldenFile), rendering deterministic widget screenshots on Linux CI runners in seconds.
  • AI Coding & On-Device ML: AI coding models show high first-shot accuracy on React Native due to the large TypeScript corpus, while dart analyze catches type errors immediately in Flutter. For on-device ML (CoreML, LiteRT, ONNX), React Native binds via react-native-executorch over C++ JSI, and Flutter binds via tflite_flutter over dart:ffi.

Real-World Production Case Studies

  1. Shopify & Discord (React Native): Shopify migrated its flagship apps (Shop, POS) to React Native and co-developed @shopify/flash-list and @shopify/react-native-skia, letting React/TypeScript web engineers share GraphQL tooling at 99.9%+ crash-free rates. Discord uses the New Architecture for feature parity across iOS, Android, and desktop.
  2. BMW & Nubank (Flutter): BMW built the My BMW and MINI apps in Flutter across 40+ countries to ship pixel-identical vehicle dashboards. Nubank (100M+ customers) adopted Flutter for deterministic visual rendering across budget Android devices.

The Definitive 2026 Decision Rubric: Which Should You Choose?

When clients come to Idealogic for custom software development or a mobile discovery sprint, we match the runtime to their existing team DNA and visual requirements.

Match the runtime to your engineering organization's existing language DNA and your product's visual requirements.
  • Choose React Native (with Expo & New Architecture) if: Your team already writes TypeScript, React, or Next.js and wants to share schemas and hooks in a monorepo; you want real OEM system views (UIView / Android View) with automatic OS visual updates; you rely on first-party OTA hotfixes via Expo EAS Update; or you want the 10x larger JavaScript/TypeScript hiring pool.
  • Choose Flutter (with Impeller) if: Your UI is heavily custom, motion-led, or brand-defined and must look pixel-identical on every phone from Android 10 to iOS 19; you are starting greenfield without a React web team (for example, with a Go, Java, or Python backend); or you want Google's cohesive, single-vendor widget and golden-testing toolchain.
  • Choose Kotlin Multiplatform (KMP) if: You already have native Swift and Kotlin engineers who want to keep 100% native SwiftUI and Jetpack Compose UIs while sharing networking, SQLite, and domain logic in Kotlin.
  • Avoid Cross-Platform (Build Pure Native) if: You are building a 3D/AR spatial app (ARKit/RealityKit), a sub-16ms audio/video DSP tool, or a single-OS utility. In those cases, go straight to iOS app development or Android app development.

Ready to move from framework selection to scoping your MVP architecture and release plan? Read our practical guide on how to build a mobile app, or engage our architects through an idea-to-product discovery sprint. Whether your product calls for React Native app development or Flutter app development, our senior engineers build production-grade mobile systems designed to scale.

Debating React Native vs Flutter for your product? Let's benchmark it against your stack
Talk to a senior mobile team

Occasional field notes on building software, no spam

Protected by Cloudflare Turnstile · Privacy · Terms

Artem Zaitsev
Artem ZaitsevCTO · Idealogic Development OÜ

CTO and Co-founder at Idealogic. Directing engineering, systems architecture, security, and full-stack delivery across web, mobile, and blockchain.

Frequently asked questions

  • In 2026, runtime speed is a near-tie for 95% of mobile applications because both frameworks eliminated their legacy bottlenecks. React Native's default New Architecture replaced the asynchronous JSON bridge with synchronous C++ JSI and the Fabric renderer, while Flutter replaced Skia with the precompiled Impeller engine. Flutter still holds a slight edge on heavy 120Hz custom canvas animations, while React Native typically delivers smaller initial binary sizes.

  • React Native's New Architecture uses C++ JavaScript Interface (JSI) bindings and the Fabric renderer to mount genuine OEM system views (UIKit on iOS and Android Views on Android) controlled by precompiled Hermes bytecode. Flutter's Impeller engine bypasses OEM views entirely, compiling Dart code Ahead-of-Time (AOT) into ARM64 machine code and drawing every pixel directly onto a Metal or Vulkan GPU surface.

  • React Native draws from a significantly larger talent pool because it uses JavaScript, TypeScript, and React. According to the Stack Overflow Developer Survey, roughly 62% of developers work with JavaScript and TypeScript compared to around 6% using Dart. Teams that already run React or Next.js on the web can onboard frontend engineers into React Native far faster than retraining them in Dart.

  • React Native has native over-the-air update support through Expo EAS Update or CodePush because its business logic ships as Hermes bytecode bundles that can be swapped dynamically in compliance with App Store rules. Because Flutter compiles Dart into native ARM64 machine code, standard Flutter requires a custom modified engine via Shorebird (created by Flutter co-founder Eric Seidel) to apply binary code-push patches.

  • Because React Native mounts real iOS UIKit and Android system views, components automatically inherit OS-level visual behaviors, text selection handles, accessibility traits, and system updates when Apple or Google ships a new OS. Flutter draws its own Material and Cupertino widget replicas on a GPU canvas, ensuring pixel-identical brand rendering across every device at the cost of manually updating widgets when OS styles change.

  • Kotlin Multiplatform is the third production contender for cross-platform development. Rather than sharing the UI layer like React Native or Flutter, classic KMP shares 100% of networking, caching, and domain logic in Kotlin while keeping the UI fully native in SwiftUI and Jetpack Compose. Compose Multiplatform also allows sharing UI via Skia, making KMP the preferred choice for Android-heavy native teams.

  • React Native wins for sharing business logic, validation schemas, API hooks, and design tokens with modern React and Next.js SEO-friendly web applications inside a TypeScript monorepo. Flutter Web compiles the entire app onto an HTML5 Canvas or WebAssembly surface, which works well for internal dashboards or graphic-rich single-page apps but is poorly suited for text-heavy, crawlable public marketing or e-commerce websites.

  • Initial build costs are virtually identical between React Native and Flutter, with both saving 35% to 45% compared to building separate native Swift and Kotlin apps. Over a 3-year lifecycle, React Native often yields slightly lower total engineering cost if your web and backend teams already use TypeScript, while Flutter can save UI QA time on heavily branded, motion-rich consumer interfaces.

Still unanswered
Ask us directly

A senior engineer replies under 4 hours.

Related expertise