LARC Architecture Overview
High-Level Architecture
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#667eea','primaryTextColor':'#fff','primaryBorderColor':'#5568d3','lineColor':'#764ba2','secondaryColor':'#48bb78','tertiaryColor':'#ed8936'}}}%%
graph TB
subgraph Browser["π Browser"]
subgraph App["π¦ LARC Application"]
HTML["π HTML Document"]
IM["πΊοΈ Import Map"]
subgraph Components["π§© Components Layer"]
C1["βοΈ Component 1"]
C2["βοΈ Component 2"]
C3["βοΈ Component 3"]
C4["βοΈ Component N..."]
end
subgraph Comm["π¬ Communication Layer"]
PAN["π PAN Bus<br/>Pub/Sub System"]
end
subgraph State["πΎ State Layer"]
LS["π Local State"]
SS["π Shared State"]
PS["πΏ Persistent State<br/>localStorage/IndexedDB"]
end
subgraph Router["π§ Router Layer"]
R["πΊοΈ pan-router"]
end
end
subgraph APIs["π§ Browser APIs"]
CE["π·οΈ Custom Elements"]
SD["ποΈ Shadow DOM"]
ESM["π¦ ES Modules"]
F["π Fetch API"]
WS["π WebSocket"]
end
end
subgraph External["βοΈ External Services"]
CDN["π CDN<br/>jsDelivr/unpkg"]
API["π REST API"]
WSS["π WebSocket Server"]
end
HTML --> IM
IM --> C1 & C2 & C3 & C4
C1 & C2 & C3 & C4 <--> PAN
C1 & C2 & C3 & C4 --> LS
PAN <--> SS
SS <--> PS
C1 & C2 & C3 & C4 --> CE & SD & ESM
C1 & C2 & C3 & C4 --> R
IM -.loads from.-> CDN
C1 & C2 & C3 & C4 -.HTTP.-> API
C1 & C2 & C3 & C4 -.WebSocket.-> WSS
classDef primary fill:#667eea,stroke:#5568d3,stroke-width:3px,color:#fff,font-weight:bold
classDef secondary fill:#764ba2,stroke:#6a3f99,stroke-width:3px,color:#fff,font-weight:bold
classDef success fill:#48bb78,stroke:#38a169,stroke-width:3px,color:#fff,font-weight:bold
classDef warning fill:#ed8936,stroke:#dd6b20,stroke-width:3px,color:#fff,font-weight:bold
classDef info fill:#4299e1,stroke:#3182ce,stroke-width:3px,color:#fff,font-weight:bold
class HTML,IM,R primary
class PAN secondary
class SS,PS,CDN success
class API,WSS warning
class C1,C2,C3,C4 info
Component Communication Flow
%%{init: {'theme':'base', 'themeVariables': { 'actorBkg':'#667eea','actorBorder':'#5568d3','actorTextColor':'#fff','signalColor':'#764ba2','signalTextColor':'#2d3748','labelBoxBkgColor':'#f7fafc','labelBoxBorderColor':'#cbd5e0'}}}%%
sequenceDiagram
participant U as π€ User
participant C1 as βοΈ Component 1
participant PAN as π PAN Bus
participant C2 as βοΈ Component 2
participant C3 as βοΈ Component 3
participant API as π Backend API
U->>+C1: π±οΈ Click Button
Note over C1: Handle user event
C1->>+PAN: π’ publish('user.action', data)
Note over PAN: Broadcast to subscribers
PAN-->>C2: π¬ notify subscriber
PAN-->>-C3: π¬ notify subscriber
Note over C2: Process event
C2->>C2: π¨ Update UI
Note over C3: Fetch data
C3->>+API: π fetch('/api/data')
API-->>-C3: β
Response
C3->>+PAN: π’ publish('data.loaded', result)
PAN-->>C1: π¬ notify subscriber
PAN-->>-C2: π¬ notify subscriber
Note over C1,C2: Render updates
C1->>-C1: π¨ Update UI
C2->>C2: π¨ Update UI
No-Build Architecture
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#667eea','primaryTextColor':'#fff','secondaryColor':'#f56565','tertiaryColor':'#48bb78'}}}%%
graph LR
subgraph Traditional["βοΈ Traditional Framework"]
S1["π Source Code"]
T1["π Transpile<br/>Babel"]
B1["π¦ Bundle<br/>Webpack"]
M1["ποΈ Minify"]
O1["π€ Output"]
S1 --> T1 --> B1 --> M1 --> O1
end
subgraph LARC["β‘ LARC"]
S2["π Source Code"]
BR["π Browser"]
S2 -.β‘ directly loads.-> BR
end
classDef source fill:#667eea,stroke:#5568d3,stroke-width:3px,color:#fff,font-weight:bold
classDef browser fill:#48bb78,stroke:#38a169,stroke-width:3px,color:#fff,font-weight:bold
classDef output fill:#f56565,stroke:#e53e3e,stroke-width:3px,color:#fff,font-weight:bold
classDef process fill:#ed8936,stroke:#dd6b20,stroke-width:2px,color:#fff
class S2,S1 source
class BR browser
class O1 output
class T1,B1,M1 process
Module Loading with Import Maps
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#667eea','secondaryColor':'#48bb78','tertiaryColor':'#4299e1'}}}%%
graph TB
subgraph HTML["π index.html"]
IM["πΊοΈ Import Map<br/><script type='importmap'><br/>{<br/> '@larcjs/core': 'https://cdn...',<br/> 'app/': '/src/'<br/>}"]
SM["π Module Script<br/><script type='module'><br/>import '@larcjs/core'<br/>import 'app/components/...'"]
end
subgraph Resolution["π Resolution"]
IM --> R1["π Resolve @larcjs/core"]
IM --> R2["π Resolve app/"]
R1 --> CDN["π Load from CDN"]
R2 --> Local["πΎ Load from /src/"]
end
subgraph Browser["π Browser"]
CDN --> Cache1["β‘ Browser Cache"]
Local --> Cache2["β‘ Browser Cache"]
Cache1 --> Exec["βΆοΈ Execute Modules"]
Cache2 --> Exec
end
classDef primary fill:#667eea,stroke:#5568d3,stroke-width:3px,color:#fff,font-weight:bold
classDef success fill:#48bb78,stroke:#38a169,stroke-width:3px,color:#fff,font-weight:bold
classDef info fill:#4299e1,stroke:#3182ce,stroke-width:3px,color:#fff,font-weight:bold
class IM,SM primary
class Exec success
class R1,R2,CDN,Local info
Deployment Architecture
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#667eea','secondaryColor':'#48bb78','tertiaryColor':'#764ba2'}}}%%
graph TB
subgraph Dev["π¨βπ» Development"]
Developer["π€ Developer"]
Code["π Source Code"]
Git["ποΈ Git Repository"]
Developer -->|βοΈ writes| Code
Code -->|π€ commits| Git
end
subgraph CICD["π CI/CD Pipeline"]
GH["βοΈ GitHub Actions"]
Test["π§ͺ Run Tests"]
Build["ποΈ Optional Build<br/>Minify"]
Git -->|β‘ triggers| GH
GH --> Test
Test --> Build
end
subgraph Prod["βοΈ Production"]
CDN["π CDN<br/>CloudFlare/AWS"]
Static["π¦ Static Host<br/>Netlify/Vercel"]
Build -->|π deploy assets| CDN
Build -->|π deploy app| Static
end
subgraph Users["π₯ Users"]
Browser["π Browser"]
Static -->|π HTML| Browser
CDN -->|π¦ JS/CSS/Assets| Browser
end
classDef developer fill:#667eea,stroke:#5568d3,stroke-width:3px,color:#fff,font-weight:bold
classDef production fill:#48bb78,stroke:#38a169,stroke-width:3px,color:#fff,font-weight:bold
classDef user fill:#764ba2,stroke:#6a3f99,stroke-width:3px,color:#fff,font-weight:bold
classDef cicd fill:#ed8936,stroke:#dd6b20,stroke-width:3px,color:#fff,font-weight:bold
class Code,Developer,Git developer
class Static,CDN production
class Browser user
class GH,Test,Build cicd