The software architecture of iTwin.js was driven by the following goals:
- Support iModel-based services running in any cloud or on-premise
- Support iModel-based web/desktop/mobile apps
- Re-use business logic across cloud, web, desktop, and mobile apps
- Re-use HTML GUI across web, desktop, and mobile apps
Backend Architecture Layers:
- Application Backend (TypeScript)
- iTwin.js Backend Framework (TypeScript)
- iTwin.js Native Libraries (C++)
Frontend Architecture Layers:
- iTwin.js Frontend Framework (TypeScript)
- HTML GUI
- Web Browser
iTwin.js Web App backends are Node.js applications.
This is how the iTwin.js Native Libraries are exposed to the iTwin.js backend framework.
Portable application logic is written in TypeScript and calls TypeScript APIs exposed from the
Notice that the backend architecture is identical between Agents and backends for interactive Web Applications.
Web App frontends run in a web browser and use HTML GUI for presentation, and APIs exposed from the
@itwin/core-frontend package for Remote Procedure Calls (RPC) to request services from the backend.
The frontend --> backend communication is over HTTPS for interactive web applications.
Also see Logging and ActivityIds
iTwin.js desktop applications use the Electron Framework. The backend architecture is the same as with iTwin.js Web Apps because Electron also uses Node.js. The primary difference in the frontend architecture is that an embedded Chromium Browser replaces a standalone Web Browser.
The frontend --> backend communication is over Inter Process Communication (IPC) as provided by Electron. Note that iTwin.js desktop applications always have at least two (one frontend and at least one backend) processes active together.
The following diagram compares the architecture of web, desktop, and mobile applications and shows how the goals of portability and reuse are accomplished.
Last Updated: 29 September, 2021