Insights / Cloud & Connected Systems

Node.js for IoT: Where It Fits in Backends and Gateways, and Where It Doesn't

Where Node.js is a good fit in an IoT system, where another runtime or language is the better choice, and the practices that keep a Node.js IoT back end stable.

Portrait of Yevhen Fedoriuk

Yevhen Fedoriuk

VP of Delivery

VP of Delivery, at Indeema since 2019, responsible for how client projects are run and for the company's internal delivery practices.

View leadership profile

A Node.js hub linking devices, connectivity, data ingestion and edge processing to cloud services, real-time data, integrations and security, beside a sensor enclosure on a mast

The short answer

Node.js fits the I/O-heavy parts of an IoT system: services that hold many device connections, MQTT and WebSocket bridges, APIs, real-time dashboard back ends, and gateways running on Linux-class hardware. Its event loop handles many concurrent connections with modest resources, and its package ecosystem covers the common IoT protocols. It is the wrong tool for microcontroller firmware, hard real-time control and CPU-heavy analytics, which belong in C, C++ or Rust on the device, or in separate services in the cloud.

What Node.js is, and where it sits in an IoT system

Node.js is a JavaScript runtime for servers and other machines with an operating system. In IoT it does not usually run on the sensor itself. It runs where data arrives: in the cloud services that receive device messages, in the APIs that apps call, and on gateways that bridge local devices to the cloud.

No language is the best choice for every IoT project. Python, Java, Go, C++ and others all build working IoT back ends. The useful question is which parts of your system match what Node.js does well.

Event loop
The single-threaded scheduler at the core of Node.js. It handles many network connections at once by never waiting on I/O, which suits message traffic, but a long CPU-bound task blocks every connection behind it.

Where Node.js fits in IoT, and where it doesn't

Where Node.js fits in an IoT system and what to use or watch for elsewhere.
Part of the systemFitWhy
Device-facing ingestion and protocol bridgesGoodMany concurrent connections, mostly I/O; mature MQTT and WebSocket libraries
APIs for mobile and web appsGoodSame language as the front end; quick to build and change
Real-time dashboard back endsGoodStreams and WebSockets push updates to many clients
Gateways on Linux-class hardwarePossibleWorks on single-board computers; watch memory use and plan updates
CPU-heavy analytics or model inferencePoor on the event loopBlocks other work; use worker threads or a separate service
Microcontroller firmwarePoorToo little memory and no real-time guarantees; use C, C++ or Rust
Hard real-time controlPoorGarbage collection and scheduling are not deterministic

For large back ends, TypeScript adds static types on top of JavaScript, which helps keep device payloads and API contracts consistent as a team and codebase grow.

Handling heavy device traffic

Devices generate a steady stream of messages and requests. Node.js handles this well when the architecture keeps the event loop free:

  • Queue heavy operations instead of doing them in the request path.
  • Cache frequently read data, such as device configuration and latest state.
  • Optimise database queries, and keep each service responsible for one small part of the system.
  • Use streams to read and write large data without loading it all into memory.
  • Scale horizontally with containers behind a load balancer, and understand how the orchestration you choose is configured and maintained.
  • Log results and test in sandboxes so behaviour under load can be checked before real data is involved.

If you use a managed IoT platform, it can take the connection load and route messages to storage or functions by rules, so your Node.js services only handle the product's own logic. Learn the platform's features before writing your own equivalent.

Storage and real-time data for users

Design the data model before the services. Storage is the hardest part of an IoT back end to change later, so plan how data is written, how often, in what volume and how it will be queried. Time-series databases suit telemetry; a document or relational store usually holds devices, users and configuration. Using more than one store is normal; a simple task does not need a powerful general database.

When users need live data, do not connect web clients to the device messaging layer directly. Put a separate WebSocket service between them that authorises each user, filters and aggregates data, and has no way to send commands to devices it should not reach. Watch for memory leaks in long-lived WebSocket connections, and do not push a raw firehose to the browser: it slows down or crashes when the data flow is too large.

The engineering implication: security is in the configuration

IoT security rests on sound code architecture, access rights scoped to each function, and verified identity for every device and user. Cloud IoT services offer fine-grained certificates and permissions, but a common mistake is to issue one certificate for everything, with unlimited access to resources and the ability to read any data in the system.

When to choose Node.js for an IoT back end

Node.js is a good choice when

  • The service is mostly I/O: receiving, routing and serving device messages.
  • Your team already works in JavaScript or TypeScript across web and back end.
  • CPU-heavy work can move to worker threads or separate services.
  • Gateways have an operating system and enough memory, with a remote update path.
  • Device firmware is written separately in a language suited to the hardware.
  • Each device has its own identity and scoped permissions from day one.

Was this useful?

Where this shows up in our work

ExpertiseCloud engineering for the systems behind connected productsChoosing runtimes per service, designing ingestion and storage for device traffic and securing the cloud side of a connected product is the cloud engineering work our teams do.

Apply this to your product

Review your platform architecture

Review your platform architecture