- The architectural differences between Aura and LWC — not just syntax, but runtime model
- Why Salesforce built LWC and what problems it was designed to solve
- Performance characteristics of each framework and where the differences come from
- Interoperability rules: how Aura and LWC components can (and cannot) coexist
- The migration strategy from Aura to LWC and how to prioritise components
- When Aura is still acceptable and when it is a risk that must be addressed
Why Salesforce Built a Second UI Framework
Aura was a significant engineering achievement when it launched in 2014. It provided a component-based UI framework years before React popularised the concept in the broader web development world. But Aura was built on a proprietary event model, a custom JavaScript runtime, and abstractions that competed with rather than leveraged the evolving native browser capabilities.
By 2017-2018, web standards had matured dramatically. The browser itself supported components natively via Custom Elements (Web Components standard), ES6 modules, Promises, and async/await. Aura's proprietary approach — which required loading significant framework JavaScript, using custom event syntax, and working around browser APIs rather than with them — created performance overhead and developer experience friction that was increasingly hard to justify.
Lightning Web Components (LWC), introduced in Spring '19, was Salesforce's answer: a component framework built directly on Web Components standards, using native ES6 modules, standard JavaScript class syntax, and standard DOM event handling. The goal was to eliminate the proprietary framework layer and let the browser do what modern browsers are good at.
The Architectural Differences That Matter
The Aura vs LWC difference is not merely syntax. The runtime architecture is fundamentally different, and those differences produce real, measurable outcomes.
JavaScript bundle size: Aura components require loading the Aura framework JavaScript — a substantial bundle that must be parsed and executed before any component renders. LWC components use native browser module loading, which is more efficient and results in smaller, more cacheable bundles. The framework overhead is one of the primary contributors to the 3-5x performance gap in comparable component scenarios.
Rendering model: Aura uses a virtual rendering engine that manages component updates through its own change detection system. LWC uses a reactive property system based on tracked properties — when a tracked property changes, only the parts of the DOM that depend on it re-render. This granular reactivity is more performant than Aura's broader re-render cycle.
Event handling: Aura has two event types (Component Events and Application Events) with a custom bubbling model. LWC uses standard DOM events and the standard browser event bubbling model. This means LWC skills transfer to non-Salesforce web development and vice versa — a significant advantage for recruiting and team development.
Testing: LWC components are standard JavaScript classes with template rendering — they can be unit tested with Jest without a Salesforce server. Aura components require the full Aura framework to render and test, making unit testing significantly more complex. LWC's testability is a major advantage for teams with quality-focused development practices.
// Aura component event (proprietary syntax)
// component.evt (Aura markup)
<aura:registerEvent name="statusChange" type="c:StatusChangeEvent"/>
// Fire event
var event = component.getEvent("statusChange");
event.setParams({ status: "Active" });
event.fire();
// LWC equivalent (standard DOM custom event)
// In the LWC JavaScript class:
this.dispatchEvent(
new CustomEvent('statuschange', {
detail: { status: 'Active' },
bubbles: true,
composed: true
})
);
Interoperability: What Can and Cannot Be Mixed
Most Salesforce orgs today have a mix of Aura and LWC components. Understanding the interoperability rules prevents architectural mistakes and migration planning errors.
LWC inside Aura — allowed: An LWC component can be embedded inside an Aura component. This is the primary migration strategy — replace inner components with LWC while the parent Aura container is migrated later. LWC components in this context run with their LWC performance characteristics even when hosted by Aura.
Aura inside LWC — not allowed: An LWC component cannot embed an Aura component as a child. The LWC rendering engine does not know how to instantiate Aura components. This is the constraint that makes bottom-up migration the required approach — migrate leaf components first, then work toward the container.
Communication across the boundary: LWC and Aura components that need to communicate across the boundary must use either the LMS (Lightning Message Service) or Application Events (Aura). LMS is the recommended approach — it is framework-agnostic and works for LWC-to-LWC, Aura-to-Aura, and LWC-to-Aura communication.
Performance Implications for Technical Leaders
The performance difference between Aura and LWC is not uniform — it depends heavily on the complexity and usage pattern of the component. Understanding where the difference is most pronounced helps prioritise migration effort.
High-impact scenarios: Components that render large datasets (custom list views, complex dashboards, table components with many rows), components with frequent re-renders (real-time status displays, live search), and components used on high-traffic pages (record page, home page, Experience Cloud site pages) show the most significant performance improvement from LWC migration.
Lower-impact scenarios: Simple utility components (a single button with a label, a formatted currency display, a static information panel) show smaller absolute performance differences. The Aura framework overhead is present but less perceptible for components that do little.
Time-to-interactive (TTI) is the metric most affected by the framework choice. Because Aura requires the framework JavaScript to load before any component renders, pages heavy in Aura components have higher TTI — users see a loading state longer before they can interact with the page. LWC components can begin rendering earlier because they use native browser loading with no framework preload requirement.
The Migration Decision Framework
For organisations with significant Aura component portfolios, the migration question is a legitimate investment decision. Here is the framework for making it rationally:
Tier 1 — Migrate now: Components on high-traffic pages, components with reported performance complaints from users, components being actively developed (any active development should happen in LWC), and components used on mobile or low-bandwidth access scenarios. The ROI is clear and immediate.
Tier 2 — Migrate with the next major release: Components used by moderate-traffic pages that are scheduled for enhancement in the next roadmap cycle. Combine the LWC migration with the feature work — the incremental cost is low when the component must be opened for development anyway.
Tier 3 — Accept technical debt, track, and migrate on retirement: Components that are stable, rarely accessed, and have no planned roadmap work. The migration cost exceeds the performance benefit for users who rarely encounter them. Document them as technical debt and plan migration when those pages or features are sunset.
Aura will not be removed from the Salesforce platform imminently — Salesforce has committed to maintaining Aura while the migration is in progress. But "maintained" means security patches and critical bug fixes, not new features. New platform capabilities (new Lightning Data Service features, new access control APIs, new rendering capabilities) are built for LWC only. An Aura-heavy org is increasingly locked out of the latest platform capabilities.
Key Takeaways
- LWC was built because Aura's proprietary framework model created performance overhead and developer experience friction that native browser standards had made unnecessary by 2018.
- The performance difference is structural: LWC uses native browser module loading and granular reactivity; Aura requires a framework preload and uses a custom rendering engine — producing 3-5x performance gaps in complex component scenarios.
- Aura can host LWC child components, but LWC cannot host Aura children — migration must proceed bottom-up, replacing leaf components first.
- Lightning Message Service (LMS) is the cross-framework communication mechanism, enabling LWC and Aura components to communicate while the migration is in progress.
- Aura is in maintenance mode — no new features, only security patches. New platform capabilities are LWC-only, making Aura-heavy orgs progressively less able to adopt platform innovation.
- Prioritise migration by measured performance impact and active development frequency, not by component count. Use the Salesforce Performance Inspector to identify high-value migration targets.
Test Your Understanding
1. Your team is migrating from Aura to LWC. They want to embed a new LWC component inside an existing Aura parent while the parent is migrated later. Is this allowed?
2. An architect argues that migrating stable, rarely-used Aura components should happen immediately to reduce technical debt. What is the most sound counter-argument?
3. An LWC component on a high-traffic page needs to communicate with an Aura component in the same page layout. What mechanism should be used?
Discussion & Feedback