Technology · Backend

Node.js

One language from database to pixel — TypeScript on the server, sharing types with every client we ship.

Created by
Ryan Dahl / OpenJS
First release
2009
Language
JavaScript / TypeScript
In our stack since
2018
In plain English

What it is, and why we use it.

Node.js runs JavaScript on the server. Its superpower in a product studio isn't speed — it's that the API, the web app, and the mobile app's logic can share one language, one type system, and often the same validation code. Fewer translation layers, fewer bugs.

Node (with TypeScript, usually Fastify or Next.js API routes) is our default backend for product APIs. We reach for Go when raw throughput or tiny memory footprints matter, and Python when the workload is ML-shaped.

Key differences

Node.js vs Python vs Go.

Node against Python and Go — the three backends we actually deploy, each with a clear lane.

DimensionNode.jsPythonGo
LanguageTypeScript / JavaScriptPythonGo
Sweet spotProduct APIs, realtime, BFFs for appsML, data pipelines, scripting, AI servicesHigh-throughput services, infrastructure
Concurrency modelEvent loop — superb for I/O-heavy APIsAsyncio capable; the GIL limits CPU-bound workGoroutines — best-in-class, trivial to use
Type safetyStrong via TypeScript, shared with frontendGradual (type hints), often unenforcedStatic, enforced, simple
Raw performanceGood for I/O; weak for CPU-bound workSlowest of the threeFastest of the three
Team leverageSame language as every client we build — hugeThe entire AI ecosystem speaks itSmall, deliberate language — easy to maintain

Node wins when

  • The backend mostly orchestrates I/O: databases, queues, third-party APIs
  • Types shared end-to-end with React/React Native clients
  • Realtime features — websockets and server-sent events are native territory

Python wins when

  • The workload is ML inference, embeddings, or data science
  • You're gluing together the AI ecosystem (it all speaks Python first)
  • Notebook-to-production research workflows

Go wins when

  • Tens of thousands of requests per second on small machines
  • Long-running infrastructure: gateways, workers, streaming
  • Deployment simplicity — one static binary, no runtime
Our take

Node is our default because it collapses the team: the engineer who built the screen can fix the endpoint. We split out Go services when the load profile demands it and Python services when the work is AI-shaped — all behind the same Postgres.

Thinking about Node.js?

Tell us what you're building — we'll tell you honestly whether Node.js is the right tool for it.