Node.js suits I/O-heavy back ends. It is not the answer to everything
Node.js runs JavaScript on the server with an event loop that holds thousands of open connections cheaply. That makes it a natural fit for APIs that spend most of their time waiting on databases and other services, for chat and live dashboards, and for teams that already write React and want one language across the stack. Most of the custom Node.js development we take on falls into one of those three groups.
As a Node.js development company in India working with clients at home and abroad, we care about the unglamorous parts that decide whether a service survives its second year: a supported runtime, strict TypeScript, an audited dependency tree, structured logs and tests on every pull request. Node 20 reached end-of-life on 30 April 2026, so a lot of the work arriving now is upgrades, which we run as projects in their own right. The rest is new APIs, integrations and real-time features under our wider software development service.
If you are comparing vendors, read the decision tables further down first. Sometimes the honest answer is Python, Go or an off-the-shelf product, and we would rather say so on the first call than halfway through a build.
Node.js development services we offer
Choose the closest match. Every build is in TypeScript, on a supported LTS line, with tests and CI from the first week.
Node.js API development
The problem
Your web or mobile app needs a back end, or the current one is a single Express file with no tests, no input validation and a database layer nobody wants to touch.
How we build it
We agree the API contract first (OpenAPI or a GraphQL schema), validate every request at the edge with a schema library, and build on Fastify or NestJS with a typed data layer over PostgreSQL or MySQL. Authentication, rate limits and versioning are in the first release, not a later ticket.
What you get
- OpenAPI or GraphQL schema
- Typed API with request validation
- Auth, rate limiting and audit logs
- Integration tests in CI
Real-time & event-driven services
The problem
Users expect live order status, chat and dashboards. Polling every few seconds is slow and costly, and a single WebSocket server falls over at the first traffic spike.
How we build it
We run WebSockets or server-sent events behind a load balancer, fan messages out through Redis or a managed broker, and push slow work onto queues with retries and dead-letter handling, so a burst of events never blocks the API.
What you get
- WebSocket or SSE gateway
- Redis or broker fan-out
- Job queues with retries
- Load test at your target concurrency
Node 20 upgrades & modernisation
The problem
Production still runs Node 20 or older, which gets no more security fixes, and the upgrade keeps losing to features because nobody knows what will break.
How we build it
We list native modules, deprecated APIs and stale dependencies, upgrade to Node 24 or 26 in a branch with the test suite as the safety net, and roll out one service at a time with a rollback ready. Where it pays off, we move CommonJS to ES modules and JavaScript to TypeScript in the same pass.
What you get
- Dependency and native-module audit
- Upgrade to a supported LTS line
- CI matrix on old and new runtimes
- Staged rollout with rollback plan
Integrations & webhooks
The problem
Payment, CRM, ERP, WhatsApp and shipping providers all send callbacks, and today they land in one fragile endpoint that drops events when a partner retries.
How we build it
We build an integration service that verifies signatures, stores every inbound event before acting on it, processes idempotently and gives your support team a replay tool. Each provider gets its own adapter, so one vendor’s API change does not break the others.
What you get
- Signed, idempotent webhook intake
- One adapter per provider
- Event store with replay
- Alerts on failed deliveries
Dedicated Node.js developers
The problem
You have a product team and a roadmap but not enough senior Node.js engineers, and hiring is taking months.
How we build it
Engineers join your stand-ups, work in your repository and follow your review process, or a small project team owns a defined scope end to end. In both cases the code is yours and the handover is written down.
What you get
- Engineers in your tools and rituals
- Code reviews and pairing
- Weekly written progress notes
- Handover documentation
The Node.js stack we use
Chosen for long-term maintenance rather than novelty. Versions as of October 2026, pinned per project.
Node.js 24 and 26 LTS
Node 26 became Active LTS on 28 October 2026 and is supported until 30 April 2029. Node 24 moved to maintenance on 20 October 2026 and runs until 30 April 2028.
TypeScript 7
The native, Go-based TypeScript compiler shipped in July 2026. Node can now run type-annotated files directly, but it does not check types, so we still type-check in CI.
Fastify 5, NestJS 12, Express 5, Hono 4
Fastify for lean JSON APIs, NestJS when a large team needs structure, Express 5 for existing code, Hono for edge and serverless functions.
PostgreSQL, MySQL, Redis, MongoDB
Relational by default, with a typed query layer and migrations in version control. MongoDB where documents genuinely fit; Redis for caching, rate limits and queues.
Vitest, Playwright, ESLint or Biome
Unit and integration tests on every pull request, contract tests for APIs other teams rely on, and end-to-end tests for the flows that make money.
Containers, OpenTelemetry, pino
Structured JSON logs, traces across services, health checks and graceful shutdown, deployed to containers or serverless on AWS, Azure or Google Cloud.
Tools we use alongside Node.js
- pnpm
- npm
- Zod
- Drizzle
- Prisma
- BullMQ
- Socket.IO
- Redis
- PostgreSQL
- Puppeteer
- Docker
- GitHub Actions
- OpenTelemetry
- Sentry
Versions and vendor details checked October 2026. We pin versions per project and upgrade on a schedule you approve.
Node.js in 2026: versions, frameworks, security and cost
This guide is for founders and CTOs deciding whether to build on Node.js, which version and framework to choose, and what a sensible engagement looks like. Every version and date below was checked in October 2026.
Which Node.js version should you run?
Production should only run Active or Maintenance LTS releases. The Node.js project publishes the schedule on GitHub and nodejs.org.
| Release line | Status | End of life | What to do |
|---|---|---|---|
| Node.js 26 | Active LTS since 28 October 2026 | 30 April 2029 | Default for new services once your key dependencies and hosting platform support it. |
| Node.js 24 | Maintenance LTS since 20 October 2026 | 30 April 2028 | Fine for production. Plan the move to 26 within the next year. |
| Node.js 22 | Maintenance LTS | 30 April 2027 | Schedule the upgrade for the next six months. |
| Node.js 20 and older | End-of-life (20 ended on 30 April 2026) | Passed | Upgrade now. There are no more security fixes. |
The schedule itself is changing. From Node.js 27 there is one major release a year: an alpha phase from October, a Current release in April, then promotion to LTS in October with 30 months of support. Every line becomes LTS, so odd and even numbers no longer matter. In practice, budget one runtime upgrade a year and you will never fall off support. One caveat: AWS Lambda’s Node.js 26 runtime is still in public preview, with general availability targeted for November 2026, so Lambda workloads should sit on nodejs24.x for now.
Moving off Node 20: an upgrade checklist
- Find every place Node runs: servers, Docker base images, CI runners, serverless runtime settings and developer machines. The forgotten cron container is usually the one still on 18.
- List native add-ons (image, crypto and database drivers) and confirm each has a build for the target version.
- Read the breaking-change notes for every major you skip, not just the last one.
- Run the test suite on both the old and new runtime in CI. If coverage is thin, write tests around the risky paths first.
- Upgrade one low-risk service, watch error rates and memory for a week, then do the rest.
- On Lambda, change the runtime identifier per function. The
nodejs20.xruntime was deprecated on 30 April 2026 and function updates are blocked from 31 August 2027. - Pin the new version in
.nvmrc,enginesand the Dockerfile so it cannot drift back.
Express, Fastify, NestJS or Hono?
| Framework | Version | Choose it when | Watch out for |
|---|---|---|---|
| Express | 5.x | You already have an Express codebase, or need middleware that only exists for Express. | Very little structure; validation, logging and error handling are yours to assemble. Express 4 apps need route-syntax and error-handling changes to reach 5. |
| Fastify | 5.x | New JSON APIs where throughput and schema-based validation matter. | The plugin encapsulation model takes some learning. |
| NestJS | 12.x | Several teams, many modules, and a need for enforced structure and dependency injection. | More boilerplate. It relies on decorators, which Node’s built-in type stripping does not support, so it needs a compile step. |
| Hono | 4.x | Edge and serverless functions, or code that must run on Node, Bun, Deno and Cloudflare Workers. | A smaller ecosystem with fewer ready-made integrations. |
Our default for a new API is Fastify, NestJS for large multi-team back ends, and Express only when there is existing Express code worth keeping.
Node.js, Python or Go?
| Node.js | Python | Go | |
|---|---|---|---|
| Strongest at | I/O-heavy APIs, real-time features, sharing code with a React front end | Data, ML and AI work; admin-heavy web apps | High-throughput network services, CLIs and infrastructure tools |
| Concurrency | One event loop per process; worker threads for CPU work | asyncio or threads; process pools for CPU work | Goroutines spread across all cores |
| CPU-heavy work | Weak unless moved to workers | Fine when the heavy lifting happens in C-backed libraries | Strong |
| What you deploy | Runtime plus dependencies, or a bundle | Interpreter plus a virtual environment | A single static binary |
| Typical risk | Dependency sprawl and supply-chain exposure | Slow request paths and packaging drift | More code to write yourself |
TypeScript is the baseline
TypeScript 7, released on 8 July 2026, is a native port of the compiler written in Go and type-checks large projects far faster than 6.x did. Separately, Node.js can now run .ts files directly: type stripping is on by default and marked stable in current releases. It removes types without checking them and rejects enums, namespaces with runtime code, parameter properties and decorators. So the rule does not change: type-check in CI, and validate input at runtime with Zod or JSON Schema, because types vanish once the code runs.
npm supply-chain security after the 2025 worms
On 8 September 2025 a phished maintainer account was used to publish malicious versions of chalk, debug and about 16 other popular packages, with code that tampered with crypto-wallet transactions in the browser. A week later the Shai-Hulud worm stole tokens and cloud keys from developer machines and CI, then used them to publish infected versions of more packages; CISA’s alert counted over 500. A second wave in November 2025 ran in preinstall scripts, before installation had even finished. GitHub responded by pushing trusted publishing from CI, which attaches provenance automatically for public packages, and by announcing shorter-lived tokens and the retirement of classic tokens. What we do on every project:
- Commit the lockfile and install with
npm cior a frozen pnpm install, never a floatingnpm installin CI. - Block dependency install scripts unless a package is explicitly allowed. pnpm refuses unapproved build scripts by default and can hold back versions younger than a set age.
- Verify registry signatures and provenance with
npm audit signatures. - Keep long-lived publish tokens and broad cloud keys out of CI; use short-lived credentials instead.
- Review dependency updates like any other code change, and prefer fewer, well-maintained packages.
MERN, in one section
MERN (MongoDB, Express, React, Node.js) is still a quick way to build a prototype, or a product whose data really is documents: catalogues with varied attributes, content, event logs. For money, stock levels and data with many relationships, a relational database makes consistency far easier. Many teams who ask for MERN are better served by React through Next.js, a Node.js API and PostgreSQL, with MongoDB kept only for genuinely document-shaped parts.
Dedicated Node.js developers in India, or a project team?
Both models work. They differ in who manages the work and who carries delivery risk. With staff augmentation, engineers join your team, take tickets from your backlog and follow your reviews; you keep technical direction, so it suits companies with a strong tech lead. With a project team, we plan the milestones, manage the engineers and answer for delivery against a written scope, which suits companies without in-house engineering leadership. Our staff augmentation vs agency comparison goes deeper. In either model, the code should live in your repository from day one.
What drives the cost of a Node.js project
People researching the cost to hire Node.js developers usually compare hourly rates. The rate matters less than these factors, and the cheapest rate rarely produces the cheapest project once rework is counted. We do not publish prices; you get a written proposal after discovery.
- Integrations. Each payment, CRM, messaging or ERP connection adds design, error handling and testing, and some vendor sandboxes take weeks to obtain.
- Scale and real-time targets. Five hundred concurrent users and fifty thousand are different architectures.
- Data migration from an old system, especially when the data is messy.
- Compliance. Audit trails, data residency and access controls for HIPAA, GDPR or DPDP work.
- Testing expectations. A tested API costs more up front and much less in year two.
- Support after launch. Round-the-clock cover is available only under a managed-service SLA.
Common mistakes we fix
- An end-of-life Node.js inside a Docker base image nobody has rebuilt for a year.
- Synchronous file, crypto or image work inside a request handler, blocking the event loop for every user.
- Trusting TypeScript types at runtime instead of validating input.
- Sessions or rate-limit counters held in process memory, which break the day a second instance starts.
- No graceful shutdown, so every deploy drops in-flight requests.
- Microservices before there is a team to own each one.
How to choose a Node.js development partner
- Ask which LTS line they will start on, and who upgrades it and when.
- Ask to see a pipeline that runs tests, type checks and dependency audits on every pull request.
- Ask how they control install scripts and freshly published dependency versions.
- Confirm the repository, cloud accounts and domains are in your name from the start.
- Meet the engineers who will write the code before you sign.
- Check what handover includes: documentation, runbooks and architecture notes.
- Notice whether they ever tell you Node.js is the wrong choice.
Node.js in our own products
Two of our platforms run Node.js in production. Modest examples, but real ones we operate ourselves.
Insight OS
Analytics, live chat & leads in one script Mostly Laravel, but it includes a Node.js headless-browser rendering service built on Puppeteer and axe-core, which we run in production. Visit insight.hi4.in
Sentinel — ReconLab
Ethical-hacking command library & live recon lab A Next.js 16 and React 19 application on MySQL: the ethical-hacking command library and recon lab we operate, running on Node.js in production. Visit sentinel.radiatus.comA typical first engagement: Node.js health check and upgrade plan
Fixed scope, about three to four weeks. Useful whether you are starting a new service or stuck on Node 20.
Discovery & access
We meet whoever owns the code and the servers, get read-only access to repositories and cloud, and list every Node.js service, its runtime and how it is deployed.
Code & dependency review
Runtime versions, framework, test coverage, dependency age, install scripts, known vulnerabilities and event-loop hot spots, each with evidence.
Proof upgrade
We move one representative service to a supported LTS line in a branch, run your tests on both runtimes and record exactly what broke.
Written plan & proposal
A prioritised roadmap for upgrades, security fixes and new features with effort ranges. Carry it out with your own team, with us, or both.
Guides and related pages
Guides
Questions about Node.js projects
For new work, Node.js 26, which became Active LTS on 28 October 2026 and is supported until 30 April 2029, once your key dependencies and hosting platform support it. Node.js 24 is a safe choice until 30 April 2028. Node.js 22 ends on 30 April 2027, and Node.js 20 reached end-of-life on 30 April 2026, so anything on 20 or older should be upgraded now.
For a single service with reasonable tests and no unusual native modules, often days rather than weeks. Estates with many services, old native add-ons, no tests or outdated framework versions take longer, mostly because tests have to be written first. The health check in our first engagement gives you a per-service estimate before you commit.
Keep Express 5 if you already have a large Express codebase that works. Choose Fastify for new APIs where performance and schema validation matter, and NestJS when several teams will share many services and you want enforced structure. Hono suits edge and serverless functions. We explain the trade-off for your case rather than pushing one framework.
Yes. Engineers can join your team through our staff augmentation service, working in your repository and tools with agreed overlap hours, or we can run a project team that owns a defined scope. You own all code and accounts in both models. We do not publish rates; you receive a written proposal after a short discovery call.
It depends on scope: the number of integrations, real-time and concurrency targets, data migration, compliance needs such as audit logs, testing expectations and whether you need support after launch. We do not quote from a rate card. A free first consultation and a short discovery lead to a written proposal covering scope, milestones and price.
We commit lockfiles and install with npm ci, block dependency install scripts unless a package is explicitly allowed, hold back freshly published versions, verify registry signatures and provenance where packages publish them, keep long-lived tokens out of CI and review dependency updates like any other code. No process removes the risk entirely, but this greatly reduces exposure to attacks like the 2025 npm worms.
Stuck on Node 20, or starting a new API?
Tell us what you run today. A senior engineer will reply with a straight view on effort, risk and whether Node.js is the right tool.






Compliance-first delivery