Architecture Overview
Watt is designed as a next-generation Node.js application server that reimagines how distributed applications are built and deployed. Unlike traditional monolithic or microservice architectures, Watt provides a modular monolith approach that combines the best of both worlds.
Executive Summaryβ
Watt delivers a complete application runtime that orchestrates multiple applications within a single process, providing:
- Unified Development Experience: Build multiple applications with different technologies (Next.js, Express, Fastify) as a single application
- Built-in Application Mesh: Automatic inter-applications communication without complex networking setup
- Enterprise-Grade Operations: Production-ready logging, monitoring, and observability out of the box
- Cloud-Native Deployment: Deploy as containers or serverless functions with zero configuration changes
Conceptual Architectureβ
π Documentation Note: This diagram uses Mermaid syntax for interactive visualization. If your documentation platform doesn't support Mermaid diagrams, you can:
- Use Mermaid Live Editor to generate static images
- Replace with ASCII diagrams (examples provided throughout this document)
- Use alternative diagram formats supported by your platform
graph TB
Client[Client Applications] --> LB[Load Balancer]
LB --> Watt[Watt Runtime Instance]
subgraph "Watt Application Runtime"
subgraph "Application Mesh Layer"
Router[Request Router]
Discovery[Application Discovery]
LBInternal[Internal Load Balancer]
end
subgraph "Applications"
Frontend[Frontend Application<br/>Next.js/Astro/Vite]
API[API Application<br/>Fastify/Express]
Backend[Backend Application<br/>Database APIs]
end
subgraph "Infrastructure Applications"
Telemetry[Telemetry & Metrics]
Logging[Centralized Logging]
Cache[HTTP Cache Layer]
end
end
subgraph "External Dependencies"
DB[(Database)]
External[External APIs]
end
Router --> Frontend
Router --> API
Router --> Backend
API --> Backend
Frontend --> API
Backend --> DB
API --> External
Telemetry --> Prometheus[Prometheus/OTEL]
Logging --> LogAggregator[Log Aggregator]
Why Watt's Architecture Mattersβ
Traditional Problemsβ
Monoliths: Single point of failure, difficult to scale individual components, technology lock-in
Microservices: Complex networking, service discovery overhead, debugging challenges, deployment complexity
Watt's Solutionβ
Watt introduces the Modular Monolith pattern:
- Applications are logically separated but physically co-located
- Zero network latency between applications (in-process communication)
- Unified deployment with independent scaling capabilities
- Technology diversity within a single runtime
Technical Architecture Layersβ
1. Runtime Orchestration Layerβ
The Watt runtime acts as a sophisticated process manager and application orchestrator:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Watt Runtime Manager β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β Application β β Worker β β Health & β β
β β Loader β β Coordinator β β Monitoring β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β Config Mgmt β β Process β β Resource β β
β β β β Manager β β Management β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Responsibilities:
- Application lifecycle management (start, stop, restart, health checks)
- Configuration distribution and environment management
- Worker thread orchestration for horizontal scaling
- Resource allocation and limits enforcement
2. Application Mesh Layerβ
Watt includes a built-in application mesh that handles all inter-application communication:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Application Mesh Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β Request β β Application β β Load Balancer β β
β β Router β β Discovery β β (Round Robin) β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β Interceptor β β Cache β β Telemetry β β
β β System β β Manager β β Hooks β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Features:
- Automatic Application Discovery: Applications register automatically using
.plt.localdomain - Zero-Config Networking: No manual application registration or endpoint management
- Built-in Load Balancing: Round-robin distribution across application workers
- Request Interceptors: Extensible middleware for cross-cutting concerns
- HTTP Caching: Intelligent caching with cache-aside patterns
3. Worker Thread Architectureβ
Watt leverages Node.js Worker Threads for true horizontal scaling within a single process:
βββ Main Thread (Runtime Manager) βββ
β β
β βββββββββββββββββββββββββββββ β
β β Application Configuration β β
β βββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββ β
β β Round Robin Loader β β
β βββββββββββββββββββββββββββββ β
βββββββββββββββββ¬ββββββββββββββββββββ
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Worker β β Worker β β Worker β
β Thread 1 β β Thread 2 β β Thread N β
βββββββββββββββ€ βββββββββββββββ€ βββββββββββββββ€
β Application β β Application β β Application β
β Instance β β Instance β β Instance β
β β β β β β
β Mesh β β Mesh β β Mesh β
β Client β β Client β β Client β
β β β β β β
β Health β β Health β β Health β
β Monitor β β Monitor β β Monitor β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
Benefits:
- True Parallelism: Each worker runs on a separate thread, utilizing multiple CPU cores
- Fault Isolation: Worker failures don't affect other workers or the main runtime
- Independent Scaling: Different applications can have different worker counts
- Memory Efficiency: Shared code with isolated heaps per worker
4. Capabilities Integration Layerβ
Watt's "Capabilities" provide first-class support for popular Node.js frameworks:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Capabilities Layer β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Next.js β β Astro β β Vite β β Remix β β
β β Capability β β Capability β β Capability β β Capability β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β Express β β Fastify β β Node β β NestJS β β
β β Capability β β Capability β β Capability β β Capability β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β
β β
β βββββββββββββββββββββββββββββ β
β β Capability Runtime API β β
β βββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββ
Capability Features:
- Framework Abstraction: Each capability handles framework-specific concerns
- Unified Configuration: Single configuration format across all frameworks
- Common Applications: Shared logging, telemetry, and caching across capabilities
- Build Integration: Unified build pipeline regardless of framework choice
Application Communication Patternsβ
Internal Application Communicationβ
Applications within a Watt application communicate through the internal application mesh:
// Automatic application discovery - no configuration needed
const response = await fetch('http://user-application.plt.local/api/users/123')
// Applications are automatically load-balanced across workers
const products = await fetch('http://product-api.plt.local/products')
External Communicationβ
External API calls are enhanced with observability and caching:
// External calls get automatic tracing and metrics
const weather = await fetch('https://api.weather.com/current')
// HTTP caching is applied automatically based on cache headers
const cached = await fetch('https://api.slow-application.com/data')
Note: HTTP caching must be enabled in your configuration file to take advantage of automatic caching:
{
"$schema": "https://schemas.platformatic.dev/wattpm/3.0.0.json",
"httpCache": true,
"autoload": {
"path": "web"
},
"entrypoint": "api"
}