DOMIoT: Document Object Model for IoT

By using HTML and JavaScript, developers can create interactive physical systems in the same way they create web pages.

The DOM for IoT fully preserves the original DOM API, exposing exactly the same methods as those used in web development such as getElementById, setAttribute and addEventListener.

GitHub: domiot-io

Proposal

Title Date
Document Object Model for IoT, Building IoT systems with HTML and JavaScript 2025-06-07
Addendum to Document Object Model for IoT, Building IoT systems with HTML and JavaScript 2025-06-18
Programming the Physical World the Web Way - Using HTML and JavaScript to Build Interactive Physical Systems 2025-06-25
Using a Web Browser to Orchestrate Physical Systems 2025-07-08

Implementations

Browser

Name Platform Description npm Repository
domiot-browser Browser Implementation of the Document Object Model for IoT for Browser Environments: Extends the native DOM to support IoT elements and hardware bindings. You can interact with physical IoT devices using the same DOM API methods used in web development such as getElementById, setAttribute and addEventListener. GitHub
iot-elements-browser Browser HTML/DOM IoT Elements: Collections of HTML/DOM IoT elements (<iot-room>, <iot-button>, etc.) organized by domain (home, retail, hospitality, etc.) for browser environments. GitHub
iot-bindings-browser Browser HTML/DOM IoT Binding Elements: Collections of HTML/DOM binding elements for linking DOM elements with physical components in browser environments. GitHub

Node.js

Name Platform Description npm Repository
jsdomiot Node.js Document Object Model for IoT: Extends jsdom library to support physical-world elements and hardware bindings. It creates a DOM where you can interact with physical-world devices using the same DOM API methods used in web development such as getElementById, setAttribute and addEventListener. npm GitHub
jsdomiot kickstart Linux, Node.js Simply run a script, and the entire setup will be installed for you. A complete setup script for DOMIoT (Document Object Model for IoT) on Linux systems. GitHub
iot-elements-node Node.js HTML/DOM IoT Elements: Collections of HTML/DOM element factories for physical-world systems by domain (home, retail, hospitality, etc.). npm GitHub
iot-bindings-node Node.js HTML/DOM IoT Binding Elements: Collections of HTML/DOM binding elements for linking DOM elements with physical components. npm GitHub
examples Node.js Examples of the DOMIoT implementation in Node.js. GitHub

Examples

Browser

Name Platform Description Repository
0-buttons-shelving-units Browser Buttons Shelving Units - Basic IoT Interaction: This example demonstrates fundamental DOMIoT Browser concepts through a retail store aisle interface where physical button presses trigger video overlays and light color changes on shelving units. GitHub
1-retail-store-podium-with-touch-screen Browser Retail Store Podium with Touch Screen - Interactive Display: This example showcases the integration of physical touch buttons with a web application, allowing physical button presses and releases to modify web page elements. GitHub
2-phidget-vint-button-modifies-div Browser Six Physical Buttons Connected to a Phidget VINT Modify Div: Showcases the integration of physical touch buttons with a web application, allowing physical button presses and releases to modify web page elements. For this example we connect six touch buttons to a Phidget VINT ( What is VINT? ). GitHub

Node.js

Name Platform Description Repository
0-retail-buttons-shelving-units Node.js Retail Buttons & Shelving Units Example This simple yet illustrative example demonstrates how to create an interactive supermarket using jsDOMIoT where customers can press buttons to highlight corresponding shelving units with colored lights. GitHub
1-hotel-room-door Node.js Hotel Room Door Example This example demonstrates how to create an interactive hotel room door system using jsDOMIoT with electronic lock control and LCD message display. GitHub
2-retail-store-podium Node.js Retail Store Podium Example This example demonstrates how to create an interactive perfume display unit using jsDOMIoT with perfume bottles pickup/putdown detection, lighting animations and synchronized video commercials. GitHub

Drivers

Drivers for testing

Name Platform Description Repository
ihubx24-sim linux ihubx24-sim: Input Hub x24 digital input channels module for simulation/testing. Linux module that simulates 24 digital inputs with high (1) and low (0) states. The states of the inputs change randomly every 10 seconds. GitHub
ohubx24-sim linux ohubx24-sim: Output Hub x24 digital output channels module for simulation/testing. The driver exposes 24 output lines (channels), each controllable via a bit. GitHub
iohubx24-sim linux iohubx24-sim: Input/Output Hub x24 digital input/output channels module for simulation/testing. The driver exposes 24 input/output lines (channels), each controllable via a bit. GitHub
lcd-sim linux lcd-sim: LCD module for simulation/testing. The driver exposes a virtual LCD display used to display text. GitHub
video-sim linux video-sim: Video module for simulation/testing. The driver provides a virtual video display interface for testing video output functionality. GitHub

Other drivers

Name Platform Description Repository
phidgetvintx6 linux phidgetvintx6: Linux module for interfacing with a Phidget VINT Hub x6 IO device using a serie of 6 bits (010010). What is VINT? GitHub