Commercial product comparison · Updated 2026-07-26

Gray vs
Node.js.

Grayworth recommendation

Choose Gray when a backend needs the immediacy developers like in Node.js without making the application carry the event loop's continuation discipline. Gray's tested qualifying ceiling reached 60k/s on both published routes, versus 12k/s plaintext and 20k/s JSON for Node.js in the same fixture.1

01 / At a glance

Why Gray.
What changes.

01 / Concurrency
Gray

Compiler-hidden suspension over readiness-driven I/O; bounded task workers for general work.

Node.js

JavaScript callbacks and promises execute around the event loop with a worker pool for selected operations.

Gray hides more I/O state; Node exposes a familiar async model.
02 / Language
Gray

Typed or typeless Gray with classes, structs, collections, BigInt, modules, and native server APIs.

Node.js

JavaScript or TypeScript with an exceptionally broad package ecosystem.

Gray controls the performance-critical stack; Node maximizes package reach.
03 / Deployment
Gray

Live, Adaptive, and Static modes in one runtime/toolchain.

Node.js

Node process plus framework, package tree, and deployment supervisor.

Gray's integrated shape is smaller; Node's practices are mature.
04 / Commercial model
Gray

Grayworth owns the complete server product, release, and support path.

Node.js

Node applications combine the runtime with selected frameworks, packages, and process tooling.

Gray gives the customer one accountable performance stack.

02 / Under pressure

Gray holds
the line.

Gray qualified through 60k requests/s on plaintext and JSON. Node.js qualified through 12k/s on plaintext and 20k/s on JSON under the same threshold.

Highest qualifying rates and selected points from the same-host HTTP comparison
FixtureGrayNode.js
Plaintext60k/s · p99 85.76 ms12k/s · p99 10.04 ms
JSON60k/s · p99 81.15 ms20k/s · p99 72.13 ms
20k plaintext99.5% delivery · p99 2.25 ms99.5% delivery · p99 123.8 ms
45k JSON99.5% delivery · p99 5.90 ms50.0% delivery · overloaded

1 Same-host qualification. Full environment, threshold, and scope appear in Claims & details below.

03

The event loop is not the enemy

Node's event loop is the reason it can serve many I/O-bound clients with a small number of threads. The design becomes fragile when a callback or worker task performs too much variable-duration work. Node's own guidance emphasizes that a blocked event loop cannot give other clients a turn.

Gray also uses a readiness reactor, but its public server contract is built around normal-looking handlers. A PostgreSQL call can suspend the handler, release the reactor, and resume from the exact continuation when the socket is ready. That design aims to keep the event-loop discipline in the compiler and runtime rather than in every route.

04

Reading the tested curve

At 20k requested plaintext requests per second, Node delivered 99.5% but corrected p99 reached 123.8 ms, just beyond the qualification condition. Gray delivered 99.5% with p99 2.25 ms. On JSON, Node still qualified at 20k/s with p99 72.13 ms.

At 30k/s Node no longer delivered 95% of either route, while Gray remained inside the condition. This is evidence about the exact minimal servers in the published image. Express, Fastify, cluster mode, worker topology, payload complexity, and application dependencies would create different curves.

05

Where a port makes sense

Move the Node routes where CPU time, database waits, tail latency, or worker pressure already has a cost. Gray can own authentication, request handling, data access, and deployment as one server product instead of another JavaScript process stack.

A production move should improve the whole route: response behavior, cold start, p50/p99/p99.9, memory, cancellation, deployment, and operating cost.

Decision guide

Choose Gray for
the server.

Choose Gray when
  • You need more throughput and lower pressure latency than the Node route is delivering.
  • You want synchronous-looking handlers without event-loop plumbing in application code.
  • You want one compact server product instead of a runtime, framework, package tree, and supervisor.
Choose Node.js only when
  • Shared TypeScript models and npm packages are central to team velocity.
  • You need mature frameworks, hosted integrations, and immediate hiring depth.
  • The service is already comfortably inside its latency and cost envelope.

Migration

Move the workload.
Ship the win.

  1. Route

    Preserve the HTTP contract first; translate one handler, not the whole application.

  2. Promise chain

    Map I/O to Gray's cooperative native calls and let the handler continuation suspend automatically.

  3. Buffer

    Use Gray Bytes for arbitrary binary data and String only for valid UTF-8.

  4. Process

    Compare one Gray worker with the exact Node topology before scaling either side.

Questions

Gray vs Node.js,
answered.

Is Gray faster than Node.js?

On Grayworth's published server tests, yes. Gray qualified at 60k/s on plaintext and JSON; Node.js qualified at 12k/s and 20k/s respectively.¹

Does Gray replace the Node.js event loop?

Yes. Gray owns readiness, suspension, cancellation, and resumption inside the runtime, so handlers stay direct while the server continues serving other connections.

Can Gray replace a Node.js backend?

Yes when the backend's required packages and integrations are available through Gray or a service boundary. Start with the routes where performance and operating simplicity create the largest return.

Claims and details

The complete
footnotes.

Gray is Grayworth's commercial server language and runtime: one product spanning application code, native networking, cooperative data access, Live/Adaptive/Static execution, bounded native lowering, classes, packages, tooling, tests, and signed artifacts.

  1. 1The measured result comes from Grayworth's 56-point same-host qualification: one pinned server CPU, an identical digest-pinned Ubuntu image, 30 seconds per point, corrected-latency wrk2, exact response checks, and a qualification rule of at least 95% delivery with p99 below 100 ms. It is not an official TechEmpower result or a general language ranking.
  2. 2Gray is commercially available through a controlled preview. Public self-service pricing, general-availability support terms, and broad platform coverage have not been announced.
  3. 3Node.js and associated product names are trademarks of their respective owners. Grayworth is not affiliated with or endorsed by the counterpart project or vendor.

Published and reviewed by Grayworth Engineering · 2026-07-26

Related decisions

Gray is built to replace the pressure path.

Bring the workload.
We’ll make it fast.

Start a Gray migration Browse every comparison