{"id":18897115,"url":"https://github.com/boywithkeyboard-archive/http-benchmark","last_synced_at":"2026-02-28T17:30:20.601Z","repository":{"id":229391050,"uuid":"772039865","full_name":"boywithkeyboard-archive/http-benchmark","owner":"boywithkeyboard-archive","description":"What's the fastest web framework for Node.js?","archived":false,"fork":false,"pushed_at":"2025-02-12T12:29:46.000Z","size":340,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-13T05:30:48.500Z","etag":null,"topics":["backend","benchmark","framework","hello-world","http","node","nodejs","web","web-framework"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boywithkeyboard-archive.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"boywithkeyboard"}},"created_at":"2024-03-14T12:25:23.000Z","updated_at":"2025-02-12T12:29:50.000Z","dependencies_parsed_at":"2024-05-16T01:06:39.762Z","dependency_job_id":"1a8bbb77-02b2-45ac-94fe-27629dded3b6","html_url":"https://github.com/boywithkeyboard-archive/http-benchmark","commit_stats":null,"previous_names":["boywithkeyboard/http-benchmark","boywithkeyboard-archive/http-benchmark"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boywithkeyboard-archive%2Fhttp-benchmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boywithkeyboard-archive%2Fhttp-benchmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boywithkeyboard-archive%2Fhttp-benchmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boywithkeyboard-archive%2Fhttp-benchmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boywithkeyboard-archive","download_url":"https://codeload.github.com/boywithkeyboard-archive/http-benchmark/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239877751,"owners_count":19712146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","benchmark","framework","hello-world","http","node","nodejs","web","web-framework"],"created_at":"2024-11-08T08:36:21.266Z","updated_at":"2026-02-28T17:30:20.511Z","avatar_url":"https://github.com/boywithkeyboard-archive.png","language":"JavaScript","funding_links":["https://github.com/sponsors/boywithkeyboard"],"categories":[],"sub_categories":[],"readme":"## http-benchmark\n\nThis repository compares the performance of some of the most popular web frameworks for Node.js against `node:http` using [bombardier](https://github.com/codesenberg/bombardier).\n\n```bash\nbombardier -n 100000 -c 50 -p r http://127.0.0.1:3000\n```\n\n### Summary\n\n| RELATIVE | FRAMEWORK | AVG | STDDEV | MAX |\n| :--- | :--- | :--- | :--- | :--- |\n| **100%** | [uWS](#uws) | `75477` | `5568` | `82887` |\n| **84%** | [Hyper Express](#hyper-express) | `63431` | `5074` | `82882` |\n| **35%** | [Node (Default)](#node-default) | `26741` | `7336` | `50713` |\n| **32%** | [Fastify](#fastify) | `24147` | `7273` | `36176` |\n| **29%** | [Hono](#hono) | `22036` | `6083` | `30783` |\n| **25%** | [Koa](#koa) | `18678` | `6860` | `55490` |\n| **11%** | [Carbon](#carbon) | `8602` | `1509` | `10606` |\n| **9%** | [Express](#express) | `6461` | `1012` | `8406` |\n\n\n### In Detail\n\n- #### Carbon\n  [NPM](https://npmjs.com/@sinclair/carbon) | [GitHub](https://github.com/sinclairzx81/carbon)\n  ```js\n  import { listen } from '@sinclair/carbon/http'\n\n  listen({\n    hostname: '127.0.0.1',\n    port: 3000\n  }, () =\u003e {\n    return new Response('Hello World', {\n      status: 200,\n      headers: {\n        'content-type': 'text/plain'\n      }\n    })\n  })\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec      8975.12    4678.54   60797.15\n    Latency        5.56ms     4.24ms   366.61ms\n    HTTP codes:\n      1xx - 0, 2xx - 93779, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 6221\n    Errors:\n      dial tcp 127.0.0.1:3000: connect: connection refused - 6221\n    Throughput:     1.91MB/s\n  ```\n\n- #### Express\n  [NPM](https://npmjs.com/express) | [GitHub](https://github.com/expressjs/express)\n  ```js\n  import express from 'express'\n\n  const app = express()\n\n  app.get('/', function (req, res) {\n    res.send('Hello World')\n  })\n\n  app.listen(3000)\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec      6949.25    4210.95   54793.66\n    Latency        7.19ms     3.85ms   351.16ms\n    HTTP codes:\n      1xx - 0, 2xx - 92632, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 7368\n    Errors:\n      dial tcp 127.0.0.1:3000: connect: connection refused - 7368\n    Throughput:     1.84MB/s\n  ```\n\n- #### Fastify\n  [NPM](https://npmjs.com/fastify) | [GitHub](https://github.com/fastify/fastify)\n  ```js\n  import fastify from 'fastify'\n\n  const app = fastify({\n    logger: false\n  })\n\n  app.get('/', (req, res) =\u003e {\n    res.send('Hello World')\n  })\n\n  app.listen({ port: 3000 }, (err) =\u003e {\n    if (err) throw err\n  })\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec     24490.40    7412.05   36369.39\n    Latency        2.04ms     1.87ms   167.60ms\n    HTTP codes:\n      1xx - 0, 2xx - 100000, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 0\n    Throughput:     5.56MB/s\n  ```\n\n- #### Hono\n  [NPM](https://npmjs.com/hono) | [GitHub](https://github.com/honojs/hono)\n  ```js\n  import { serve } from '@hono/node-server'\n  import { Hono } from 'hono'\n\n  const app = new Hono()\n\n  app.get('/', (c) =\u003e c.text('Hello World'))\n\n  serve(app)\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec     21007.83    5863.31   29231.15\n    Latency        2.38ms     2.01ms   179.52ms\n    HTTP codes:\n      1xx - 0, 2xx - 100000, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 0\n    Throughput:     4.74MB/s\n  ```\n\n- #### Hyper Express\n  [NPM](https://npmjs.com/hyper-express) | [GitHub](https://github.com/kartikk221/hyper-express)\n  ```js\n  import HyperExpress from 'hyper-express'\n\n  const server = new HyperExpress.Server()\n\n  server.get('/', (req, res) =\u003e {\n    res.send('Hello World')\n  })\n\n  server.listen(3000)\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec     64166.43    4232.69   71670.42\n    Latency      776.84us    78.36us     3.33ms\n    HTTP codes:\n      1xx - 0, 2xx - 100000, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 0\n    Throughput:     9.12MB/s\n  ```\n\n- #### Koa\n  [NPM](https://npmjs.com/koa) | [GitHub](https://github.com/koajs/koa)\n  ```js\n  import Koa from 'koa'\n\n  const app = new Koa()\n\n  app.use(ctx =\u003e {\n    ctx.body = 'Hello World'\n  })\n\n  app.listen(3000)\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec     18817.35    6465.07   51208.27\n    Latency        2.65ms     2.34ms   202.36ms\n    HTTP codes:\n      1xx - 0, 2xx - 94737, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 5263\n    Errors:\n      dial tcp 127.0.0.1:3000: connect: connection refused - 5263\n    Throughput:     4.03MB/s\n  ```\n\n- #### Node (Default)\n  [Website](https://nodejs.org/api/http.html)\n  ```js\n  import { createServer } from 'node:http'\n\n  const server = createServer((req, res) =\u003e {\n    res.writeHead(200, {\n      'content-type': 'text/plain'\n    })\n\n    res.write('Hello World')\n\n    res.end()\n  })\n\n  server.listen(3000, '127.0.0.1')\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec     28539.58    8676.07   58248.12\n    Latency        1.75ms     1.79ms   154.88ms\n    HTTP codes:\n      1xx - 0, 2xx - 97174, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 2826\n    Errors:\n      dial tcp 127.0.0.1:3000: connect: connection refused - 2826\n    Throughput:     6.34MB/s\n  ```\n\n- #### uWS\n  [GitHub](https://github.com/uNetworking/uWebSockets.js)\n  ```js\n  import { App } from 'uWebSockets.js'\n\n  const app = App()\n\n  app.get('/', (res, req) =\u003e {\n    res.end('Hello World')\n  })\n\n  app.listen(3000, () =\u003e {})\n  ```\n\n  ```\n  Statistics        Avg      Stdev        Max\n    Reqs/sec     74576.76    5363.43   90502.76\n    Latency      667.57us   157.16us     7.40ms\n    HTTP codes:\n      1xx - 0, 2xx - 96831, 3xx - 0, 4xx - 0, 5xx - 0\n      others - 3169\n    Errors:\n      dial tcp 127.0.0.1:3000: connect: connection refused - 3169\n    Throughput:    11.43MB/s\n  ```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboywithkeyboard-archive%2Fhttp-benchmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboywithkeyboard-archive%2Fhttp-benchmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboywithkeyboard-archive%2Fhttp-benchmark/lists"}