GizStack
View .mdOpen in ChatGPTOpen in Claude

Benchmarks

Each number on this page is a measurement, read from the published results of a benchmark suite (bench/results). Each table gives its date, its machine and its method.

  • Who measured. We did, on our own hardware. These are not official leaderboard submissions. A result that projects onto a public board says so.
  • Which build. The development build of the date in each table, unless the table names a release. We run each table again on every release.
  • Machine. Each table names its machine. A shared host gives a noisy number: read a difference of less than 15% as equal.
  • Measure it yourself. Install the toolchain. It carries the suites we use and these results, so you need no source. Each table ends with its command: giz bench run SUITE for a whole suite, giz bench compare SUITE/ITEM for one row beside our number, and --size quick for a small input. giz bench list shows the suites on your machine. A row that a suite cannot measure by itself tells you why when you run it. A table of a suite that needs the GizStack sources says so.
  • Where a number comes from. A table marked as taken from our notes was measured before its suite existed. The suite has not recorded it again yet.
  • What we do not show. Results on commercial databases whose licenses forbid publication.

Toolchain

Toolchain: the first run 2026-10-13. AMD Ryzen 9 7945HX (16 cores, 32 threads), 64 GB, Ubuntu 24.04.
Gizlang
First giz main.giz (compiles, links and runs)0.72 s
Second run (from the cache)0.22 s
giz test main.test.giz0.33 s

The released toolchain on a clean user account. giz init hello, then in hello: the first giz main.giz (it compiles, links and runs, with an empty cache), the second (from the cache) and giz test main.test.giz.

A clean user account.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

Measure it again with the toolchain: giz bench run tools/firstrun, or one row on a small input: giz bench compare tools/firstrun/first --size quick.

Web: a whole app against Next.js and Rust + React

Two identical apps, each written on GizWeb and on the comparison stack. The pages, actions, session token and data are the same.

Comments app against Next.js 16 2026-10-14. a build host, 16 cores, load average about 7.
GizWebNext.js 16
Start-up to first page66 ms271 ms
Thread page, one CPU (Next.js: one process)1,739 req/s197 req/s
Thread page, 8 server CPUs2,398 req/s, a thread for each CPU197 req/s, one process
p50 latency, one CPU14.4 ms152 ms
p99 latency, one CPU58.5 ms562 ms
Thread page HTML60,154 B (3,438 B gzip)102,736 B (10,164 B gzip)
Page CSS15,013 B (4,777 B gzip)1,035 B (534 B gzip)
JavaScript sent to the browser26,157 B (9,448 B gzip)592,598 B (196,717 B gzip)
Memory after load (PSS)68.3 MB378 MB
App code (non-blank lines)506 (409 code)474 (453 code)
Edit: add a validated link field (changed lines)3 files, 13 lines4 files, 35 lines

The same threaded realtime comments app on GizWeb and on Next.js 16 (App Router, server actions, node:sqlite): the same pages, actions and session token, and 60 seeded comments. Each server is one process on 8 server CPUs; the load (bench/web/lib/load.c, 32 keep-alive connections) is on 8 other CPUs. GizWeb runs on one server CPU, then on a thread for each server CPU, with GizDB in the process. Throughput is the best of 3 runs.

GizDB in the process (`Data.database`).

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

This suite needs the GizStack sources, so the release does not carry it yet.

Todos app against nextrs (Rust + React) 2026-10-10. AMD Ryzen AI Max+ 395 (16 cores, 32 threads), 128 GB, Linux 6.17.
GizWebnextrs
Page /, 1 CPU60,762 req/s55,909 req/s
Page p50 latency, 1 CPU0.82 ms0.84 ms
Page p99 latency, 1 CPU0.94 ms1.78 ms
JSON API, 1 CPU111,446 req/s74,011 req/s
JSON API p50 latency, 1 CPU0.42 ms0.63 ms
JSON API p99 latency, 1 CPU0.59 ms1.14 ms
Memory after load, 1 CPU (PSS)5.1 MB12.8 MB
Page /, 8 CPUs339,193 req/s277,735 req/s
Page p50 latency, 8 CPUs0.1 ms0.16 ms
Page p99 latency, 8 CPUs0.66 ms0.46 ms
JSON API, 8 CPUs608,451 req/s351,828 req/s
JSON API p50 latency, 8 CPUs0.06 ms0.13 ms
JSON API p99 latency, 8 CPUs0.29 ms0.47 ms
Memory after load, 8 CPUs (PSS)11.6 MB14.4 MB
Start-up to first page21 ms27 ms
Server binary1.4 MB6.1 MB
Page HTML4,427 B (1,983 B gzip)3,002 B (1,557 B gzip)
JavaScript sent to the browser (static imports)1,188 B (671 B gzip)300,083 B (100,800 B gzip)
App code (non-blank lines)221 (191 code)689 (549 code)

The same todos app on GizWeb and in the examples/react-todos that nextrs measures itself with: the same three todos, page, detail page, filter, JSON API and live updates. Each server runs on one CPU, then on the 8 server CPUs (GizWeb with a thread for each CPU, the tokio of nextrs with a thread for each CPU). The load comes from 8 other CPUs, with 50 connections, on the two routes that the own benchmark of nextrs loads.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

This suite needs the GizStack sources, so the release does not carry it yet.

HTTP server

HttpArena profiles 2026-10-13. AMD Ryzen AI Max+ 395, 16 of 32 logical CPUs online, load average 9 to 28.
GizlangactixBundusty
baseline302,589 req/s212,098 req/s269,761 req/s229,754 req/s
limited-conn258,147 req/s171,938 req/s220,013 req/s232,148 req/s
async151,459 req/s160,278 req/s179,585 req/s140,491 req/s
json-tls76,398 req/s53,955 req/s98,285 req/s21,331 req/s
json-comp-409630,152 req/s69,874 req/s59,020 req/s58,471 req/s
json-comp-1638431,968 req/s66,052 req/s60,353 req/s53,113 req/s
latency-10k (CPU per request)34.6 µs33.3 µs70.9 µs37 µs
latency-1m (CPU per request)8.7 µs8.1 µs10.2 µs8.26 µs
latency-1m (p99)939 ms51 ms577 ms1,038 ms
8gbit (CPU per request)49.5 µs33.4 µs60.1 µs114 µs
Rank on the composite of the board (estimate)4th of 95———
Composite score (estimate)6,337———

The scored profiles of HttpArena with the load tools and arguments of the board, scaled to 8 server CPUs and 8 load CPUs (pinned rates / 8), best of 3 runs (latency profiles: 2). actix, Bun and dusty ran at the same time on the same CPUs. score.giz projects the result onto the composite of the board through the references measured at the same time. A latency profile shows the CPU time of each request at the fixed rate.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

This suite needs the GizStack sources, so the release does not carry it yet.

Against nginx and Caddy 2026-10-13 to 2026-10-18. AMD Ryzen AI Max+ 395 (16 cores, 32 threads), 128 GB, Linux 6.17.
Gizlangnginx
Plaintext GET /bench607,104 req/s647,664 req/s
Conditional GET (304)188,000 req/s189,000 req/s
Static file, 1 KiB50,000 req/s110,000 req/s
Static file, 64 KiB41,000 req/s66,000 req/s
Static file, 1 MiB5,600 req/s6,900 req/s
gzip of a 61 KB page1,100 req/s3,600 req/s
Reverse proxy174,383 req/s176,659 req/s
TLS 1.3202,000 req/s193,000 req/s

Each server gets one worker for each server CPU, with the same files, upstream and certificate. The load runs on 8 other CPUs (load.c, or wrk for TLS) with 256 connections; the proxy upstream is an nginx with two workers on two more CPUs. The value is the median rate of 3 rounds, with the server order turned in each round.

2 workers on 2 CPUs, a quiet machine. 4 workers on 4 cores, a shared machine (load average 4 to 26); run A.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

This suite needs the GizStack sources, so the release does not carry it yet.

GizDB: analytics

GizDB is the one of the three that is also a transactional PostgreSQL-protocol server, a Redis server and an embedded engine. On hot runs of TPC-H SF10 and ClickBench (10M rows) it takes less time than DuckDB 1.5.6 over all queries (the geometric mean of the time ratios); some single queries are still slower, and each table lists them. The TPC-H SF1 table is an older measurement over the PostgreSQL protocol.

ClickBench, 10 million rows of `hits`, all 43 queries, hot, against DuckDB 1.5.6 2026-10-24. AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB, Linux 7.0; the 12 benchmark CPUs (6-11, 18-23).
GizDBDuckDB
ClickBench 10M: GizDB time over DuckDB time, geometric mean0.56 x1 x
Q00.2 ms0 ms
Q11.2 ms1 ms
Q21.9 ms2 ms
Q32.5 ms3 ms
Q412.5 ms46 ms
Q514.3 ms63 ms
Q60.2 ms0 ms
Q71.7 ms1 ms
Q845.7 ms54 ms
Q958.1 ms92 ms
Q107 ms12 ms
Q117.2 ms13 ms
Q1215.1 ms46 ms
Q1353 ms83 ms
Q1437.3 ms50 ms
Q1516.6 ms48 ms
Q16114 ms100 ms
Q1712.4 ms89 ms
Q18203 ms158 ms
Q190.5 ms0 ms
Q2019.5 ms50 ms
Q2120 ms43 ms
Q2241.3 ms86 ms
Q2363.4 ms52 ms
Q241.3 ms6 ms
Q256 ms9 ms
Q261.2 ms6 ms
Q2784.4 ms60 ms
Q281,312 ms1,379 ms
Q292.1 ms7 ms
Q3044.4 ms42 ms
Q3163.5 ms49 ms
Q32418 ms300 ms
Q3387.4 ms193 ms
Q3490.9 ms209 ms
Q3514.3 ms61 ms
Q364.2 ms24 ms
Q371.8 ms12 ms
Q383.1 ms11 ms
Q3971.2 ms57 ms
Q402.5 ms3 ms
Q413.1 ms3 ms
Q423.8 ms9 ms

10 million rows of ClickBench's hits, loaded once into a GizDB folder and a DuckDB 1.5.6 file. bench/db/engine/hot.giz runs each query of bench/db/clickbench/queries.sql 4 times in one session of each engine on the same 12 CPUs: one warm run, then the best of 3 (psql's \timing for GizDB over the PG protocol, DuckDB's .timer), in ms. Row counts must match. The geometric mean is of GizDB's time over DuckDB's, over the queries DuckDB takes 1 ms or more for.

29 of 40 queries at or below DuckDB's time. Measured alone at 0486c83b under other loads on the host (DuckDB 300 ms, 244 at 523f9210 on a quieter host).

This suite needs the GizStack sources, so the release does not carry it yet.

TPC-H SF10, all 22 queries, hot, against DuckDB 1.5.6 2026-10-24. AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB, Linux 7.0; the 12 benchmark CPUs (6-11, 18-23).
GizDBDuckDB
TPC-H SF10: GizDB time over DuckDB time, geometric mean0.764 x1 x
Q1134 ms176 ms
Q221.1 ms44 ms
Q399.3 ms119 ms
Q467.1 ms148 ms
Q5146 ms124 ms
Q630.4 ms37 ms
Q797.9 ms101 ms
Q871.3 ms113 ms
Q9641 ms530 ms
Q10126 ms271 ms
Q1130.9 ms20 ms
Q1259.1 ms93 ms
Q13373 ms456 ms
Q1447 ms91 ms
Q1576.5 ms69 ms
Q16112 ms113 ms
Q1760.6 ms107 ms
Q18342 ms451 ms
Q1964.2 ms208 ms
Q20120 ms91 ms
Q21321 ms420 ms
Q2272.4 ms76 ms

CALL dbgen(sf=10) (60 million lineitem rows), loaded once into a GizDB folder and a DuckDB 1.5.6 file. bench/db/engine/hot.giz runs each query of bench/db/tpch/queries.sql 4 times in one session of each engine on the same 12 CPUs: one warm run, then the best of 3 (psql's \timing for GizDB over the PG protocol, DuckDB's .timer), in ms. Row counts must match. The geometric mean is of GizDB's time over DuckDB's, over the queries DuckDB takes 1 ms or more for.

17 of 22 queries at or below DuckDB's time. A second pass 30 minutes later: 0.757, 17 of 22.

This suite needs the GizStack sources, so the release does not carry it yet.

TPC-H SF1, all 22 queries 2026-10-24. AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB, Linux 7.0; the 12 benchmark CPUs (6-11, 18-23).
GizDBPostgreSQL 16DuckDB
All 22 queries0.449 smore than 607 s (2 stopped)0.666 s
Q120 ms998 ms28 ms
Q25 ms151 ms12 ms
Q312 ms226 ms22 ms
Q48 ms117 ms19 ms
Q521 ms142 ms22 ms
Q64 ms203 ms7 ms
Q720 ms194 ms24 ms
Q810 ms185 ms17 ms
Q972 ms661 ms76 ms
Q1036 ms432 ms40 ms
Q117 ms107 ms7 ms
Q128 ms281 ms16 ms
Q1352 ms389 ms57 ms
Q146 ms223 ms19 ms
Q1510 ms234 ms11 ms
Q1641 ms185 ms63 ms
Q179 msstopped at 5 min15 ms
Q1833 ms1,636 ms73 ms
Q199 ms252 ms34 ms
Q2023 msstopped at 5 min19 ms
Q2131 ms291 ms63 ms
Q2212 ms98 ms22 ms
Load lineitem by COPY8.57 s15.6 s—
Load orders by COPY2.08 s3.45 s—

CALL dbgen(sf=1) (6 million lineitem rows), loaded into GizDB and PostgreSQL by psql's \copy and analyzed. Each query runs once, then 5 more times; the value is the median of those, in ms. GizDB and PostgreSQL are timed at the client over the PG protocol, DuckDB by its own timer. A query stops at 5 minutes. Every answer must equal DuckDB's.

Servers and DuckDB on 8 benchmark CPUs (6-9, 18-21), the runner on 4 others. DuckDB 1.5.6, PostgreSQL 16.15.

This suite needs the GizStack sources, so the release does not carry it yet.

10 million rows, six OLAP queries 2026-10-24. AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB, Linux 7.0; the 12 benchmark CPUs (6-11, 18-23).
GizDBDuckDB
Q1: sum(a) over a date range5 ms7 ms
Q2: group by 100 keys20 ms21 ms
Q3: group by 100k keys, top 3106 ms127 ms
Q4: join and group35 ms19 ms
Q5: count(DISTINCT c)45 ms94 ms
Q6: top-N6 ms9 ms

f(id PK, c, a, d, s) with 10 million rows from generate_series (c 100k values, a 1000, d 365 days, s 100 texts) and dim(id PK, r) with 100k rows. Each query runs once, then 5 more times; the value is the median of those, in ms. Every answer must equal DuckDB's.

Both engines on 8 benchmark CPUs (6-9, 18-21), the runner on 4 others. DuckDB 1.5.6.

Measure it again with the toolchain: giz bench run db/olap, or one row on a small input: giz bench compare db/olap/Q1 --size quick.

GizDB: transactions and durability

pgbench TPC-B, scale 10, READ COMMITTED 2026-10-24. AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB, Linux 7.0; the 12 benchmark CPUs (6-11, 18-23).
GizDBPostgreSQL 16
TPC-B, 1 client244 tps265 tps
TPC-B, 16 clients2,143 tps1,008 tps
pgbench -i over COPY0.7 s1.2 s

pgbench -i -s 10 (1 million accounts), then the built-in TPC-B script with -M prepared for 8 s. GizDB runs with --threads 8; fsync is on in both, so every commit waits for its sync. The load step is timed alone: pgbench -i -s 10 -q (CREATE, COPY of 1 million accounts from the client, VACUUM, primary keys).

Servers on 8 benchmark CPUs (6-9, 18-21), pgbench on 4 others (10, 11, 22, 23). PostgreSQL 16.15.

Measure it again with the toolchain: giz bench run db/pgbench, or one row on a small input: giz bench compare db/pgbench/tpcb1 --size quick.

kill -9 while committing 2026-10-24. AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB, Linux 7.0; the 12 benchmark CPUs (6-11, 18-23).
GizDB
Acknowledged transactions whole after the kills17,846 acknowledged, all whole after 1,000 kills

Each loop starts the server on the same folder, runs 4 connections that commit 3-row transactions (and in one loop of 7 a CHECKPOINT), kills the server with SIGKILL after 5 to 150 ms, restarts it and checks the loop's rows: an acknowledged transaction must be there whole, one in flight whole or absent, and nothing else. One loss fails the run.

1,000 kills; 4,000 transactions in flight at the kills, each whole or absent; 56,625 rows checked.

This suite needs the GizStack sources, so the release does not carry it yet.

GizDB: Redis protocol

Redis protocol against Redis 2026-10-24. AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB, Linux 7.0; the 12 benchmark CPUs (6-11, 18-23).
GizDBRedis 7.4
SET, synced every second61,482 req/s99,950 req/s
SET pipelined 16, synced every second159,744 req/s399,202 req/s
GET, synced every second66,622 req/s114,220 req/s
SET, synced before each answer11,570 req/s6,093 req/s
SET, no persistence79,968 req/s114,286 req/s
Server CPU for each SET15.2 µs9.1 µs
Memory after the run (PSS)216 MB20.5 MB
Restart with 100k keys109 ms231 ms

One server on one CPU, redis-benchmark on other CPUs: 50 connections, 200,000 requests, 64-byte values, data on disk. Each mode gives the same guarantee on both servers: no persistence (GizDB still writes its log and never syncs it), a sync every second, or a sync before each answer. Server CPU counts the plain SETs.

1 shard on 1 CPU (6), 1 I/O thread each; Redis 7.4.1. Load from 8 other benchmark CPUs.

This suite needs the GizStack sources, so the release does not carry it yet.

Live updates

Edit to live 2026-10-11. AMD Ryzen AI Max+ 395 (16 cores, 32 threads), 128 GB, Linux 6.17.
Gizlang
An app of 800 lines: edit to one function body (p50)53 ms
12,500 lines: edit to one function body (p50)108 ms
100,000 lines: edit to one function body (p50)436 ms

run.giz writes a generated web app, starts giz live on it and edits a literal in a handler body 20 times. Each edit is timed from the save of the file (a rename, as an editor saves) to the line on the app's stdout that shows the response of the new code. The value is the p50.

Load average 9 to 23.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

This suite needs the GizStack sources, so the release does not carry it yet.

In production on GizStack 2026-10-10. GizStack production.
Gizlang
Deploy to the change in an open page, in production1.86–1.96 s

Five deployments of a changed title to a page that was already open, timed from Deploy to the change in the page. The text and focus in a form field stayed. Measured by hand.

Five deployments.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

This suite needs the GizStack sources, so the release does not carry it yet.

Language

LangArena Runtime Score 2026-10-09. AMD Ryzen AI Max+ 395 (16 cores, 32 threads), 128 GB, Linux 6.17.
GizlangRustC
Runtime score90.790.690.2

LangArena: 50 realistic programs, written safe and idiomatic in each language. Each test alternated with Rust on the same machine, then the formula of the board was applied against its runs of 2026-10-05.

Against the runs of the board of 2026-10-05.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

Measure it again with the toolchain: giz bench run compiler/langarena, or one row on a small input: giz bench compare compiler/langarena/score --size quick.

Tasks against Go goroutines 2026-10-10. AMD Ryzen AI Max+ 395 (16 cores, 32 threads), 128 GB, Linux 6.17.
GizlangGo 1.22
1,000,000 switches between 100 hot tasks18 ms73 ms
Memory for each task, at 100,000 tasks4.4 KB2.5 KB

main.giz spawns N tasks that each pause ROUNDS times, then joins them; main.go does the same with goroutines on one OS thread (GOMAXPROCS(1)), as a Gizlang World runs its tasks. The switch time is 100 tasks that pause 10,000 times (1,000,000 switches). The memory is the peak RSS of 100,000 tasks, divided by the task count.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

Measure it again with the toolchain: giz bench run runtime/tasks, or one row on a small input: giz bench compare runtime/tasks/switch --size quick.

Process start 2026-10-13. AMD Ryzen AI Max+ 395 (16 cores, 32 threads), 128 GB, Linux 6.17.
GizlangNode 24Bun 1.4
Process start (load the packages, exit)2.06 ms17.7 ms6.9 ms

The three engines run in turn on the same pinned CPUs, with the order turned in each round. A process loads the packages fast-deep-equal, ms and cookie and exits; the value is the median wall time of 31 processes.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

Measure it again with the toolchain: giz bench run compiler/js, or one row on a small input: giz bench compare compiler/js/start --size quick.

AI inference

Language model (`gizai:llm`) 2026-10-19. NVIDIA RTX 4070 Ti SUPER (16 GB).
Gizlang
Decode, 1 sequence (MTP drafts)95 tokens/s
Decode, 4 sequences, in total357 tokens/s
Decode, 8 sequences, in total395 tokens/s
Prefill, 1K-token prompt1,062 tokens/s
Prefill, 32.8K-token prompt (8-bit keys and values)38 s (862 tokens/s)

Qwen3.8-27B, linear layers in 4 bits and the output layer in 6 bits, on one NVIDIA RTX 4070 Ti SUPER (16 GB). run.giz speed warms every kernel shape, then times a 1024-token prefill and 128 tokens of greedy decode for each batch size, with MTP drafts. The decode rate is the tokens of all sequences together.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

Measure it again with the toolchain: giz bench run ai/llm, or one row on a small input: giz bench compare ai/llm/decode1 --size quick.

Serving a language model: Gizlang, vLLM and MAX 2026-10-24. AMD Ryzen 5 5600 6-Core Processor (12 threads), 63 GB, Linux 6.8.
GizlangvLLMMAX
1 chat: tokens/s of an answer75 tokens/s72 tokens/s70 tokens/s
1 chat: first token63 ms61 ms87 ms
4 chats: tokens/s in total260 tokens/s258 tokens/s194 tokens/s
4 chats: first token192 ms177 ms183 ms
16 chats: tokens/s in total732 tokens/s832 tokens/s637 tokens/s
16 chats: tokens/s of an answer51 tokens/s57 tokens/s44 tokens/s
16 chats: first token498 ms443 ms734 ms

Qwen3-4B-Instruct-2507 in BF16 (weights and keys and values) on one NVIDIA RTX 4070 Ti SUPER (16 GB), contexts of 2048 tokens, each server's prefix cache on. One client (bench/ai/llm/load.giz) holds 1, 4 or 16 chats at once with each server's OpenAI chat API, streamed and greedy: a chat starts with a prompt of 512 words and asks twice for more, 256 tokens an answer at most. The first token is the median of the first turns; tokens/s of an answer is the median after its first token. The servers write their answers' tokens with the same greedy rule, so their lengths differ a little.

Measure it again with the toolchain: giz bench run ai/serving, or one row on a small input: giz bench compare ai/serving/c1-rate --size quick.

Image: FLUX.3 klein against ComfyUI 2026-10-20. NVIDIA RTX 4080 SUPER.
GizlangComfyUI
One denoising step0.175 s0.172 s
Text encoding0.04 s0.19 s
VAE decode0.226 s0.3 s
One image, 16 steps (text, sample, decode; no PNG save)3.29 s3.31 s
One image, step cache 0.3 (the default)1.95 s—
Edit, one reference, 1248 x 832 (ComfyUI's INT8 file)4.25 s6.63 s
Edit, two references6.86 s11.8 s
Edit with refresh 4 (option; one reference, two)3.97 s, 5.68 s—
Prompt upsampler caption (Qwen3.5-9B, 4-bit, about 300 tokens)2.7 s—
One image, INT4 products (option)2.33 s—

FLUX.3 klein, 1024 x 1024, against ComfyUI on the same NVIDIA RTX 4080 SUPER with the same BF16 checkpoint. Gizlang's step runs on INT8 matrix cores; its image matches ComfyUI's by eye. The step cache (First Block Cache) is on at 0.3 by default, and 0 turns it off. INT4 products are an option, a little softer. ComfyUI's edit times include its PNG save.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

Measure it again with the toolchain: giz bench run ai/diffusion, or one row on a small input: giz bench compare ai/diffusion/step --size quick.

Video: MiniMax H3 against WanGP 2026-10-20. NVIDIA RTX 4070 Ti SUPER (16 GB).
GizlangWanGP
One denoising pass4.29 s10.8 s
Video and audio decoding5.73 sabout 13 s
A requestabout 31.5 s85 s

MiniMax H3, 832 x 480, 124 frames, 6 steps, its W4A8 checkpoint with the turbo LoRA, against WanGP on the same request, on one NVIDIA RTX 4070 Ti SUPER (16 GB). Our total is the sum of its measured parts (6 passes, the video and audio decoders), warm.

These numbers come from our measurement notes of that date. The suite has not recorded them again yet.

Measure it again with the toolchain: giz bench run ai/diffusion, or one row on a small input: giz bench compare ai/diffusion/pass --size quick.

Agents

The agent harness of Gizlang (gizai:agent) against Codex CLI, on the same model (gpt-6-luna), the same 89 tasks of Terminal-Bench 2.1 and the same containers and time limits. Each table gives the reasoning effort; the tokens and the cost are the API's. Agents is the guide to the harness.

Reasoning effort medium 2026-10-24. AMD Ryzen 9 7945HX (32 threads), 62 GB, Docker, Linux 6.17.
Gizlang (gizai:agent)Codex CLI
Tasks passed68.5%57.3%
Time of the 89 tasks, in total577 min714 min
Input tokens, in total32.2 M tokens58 M tokens
Output tokens, in total0.693 M tokens0.859 M tokens
Cost at gpt-6-luna's price0.852 USD1.24 USD

Terminal-Bench 2.1, its 89 tasks with one trial each, on gpt-6-luna through the OpenAI Responses API at reasoning effort medium. Each harness works in the task's Docker container until it finishes or the task's time limit ends, then the task's tests score it 1 or 0. Gizlang runs gizai:agent with one bash tool and a short instruction; Codex CLI runs codex exec with the same effort. Input tokens include the cached ones. Codex counts its tokens from the turns that completed, so a trial that timed out adds none: its totals are a lower bound. A run whose results do not count the cached input tokens takes them from its logs. Cost: uncached input $0.10, cached input $0.01 and output $0.50 per million tokens. A value that cannot be measured from a run says why (README.md).

Measure it again with the toolchain: giz bench run agent/terminal, or one row on a small input: giz bench compare agent/terminal/medium-pass --size quick.

Reasoning effort xhigh 2026-10-24. AMD Ryzen 9 7945HX (32 threads), 62 GB, Docker, Linux 6.17.
Gizlang (gizai:agent)Codex CLI
Tasks passed77.5%59.6%
Time of the 89 tasks, in total678 min715 min
Input tokens, in total48.7 M tokens70.9 M tokens
Output tokens, in total1.44 M tokens1.31 M tokens
Cost at gpt-6-luna's price1.5 USD1.67 USD

The same tasks, model, harnesses and counting as the medium table, at reasoning effort xhigh.

Measure it again with the toolchain: giz bench run agent/terminal, or one row on a small input: giz bench compare agent/terminal/xhigh-pass --size quick.

Open gaps

We list what is slower, too: a row where another subject has the better value stays in its table. The roadmap has the work on each one.


Reproducible benchmark catalog

This section records the verified examples and measurements for this topic. The source and test paths in this document remain authoritative.

1. Benchmark Methodology & Verification Contract

Every benchmark figure reported below is an empirical measurement stored in version-controlled JSON telemetry files (bench/results/). Developers can reproduce any measurement locally using:

sh
# Execute an entire benchmark suite:
giz bench run <suite_name>

# Execute a single comparison item:
giz bench compare <suite_name>/<item_id>

2. Full-Stack Web Application Performance (bench/results/web/app.json)

Workload: Identical threaded real-time comments application running on GizWeb (native single binary with embedded GizDB) and Next.js 16 (Node.js App Router, Server Actions, node:sqlite). Load generated by 32 concurrent keep-alive HTTP connections (bench/web/lib/load.c).

MetricGizWebNext.js 16Improvement Factor
Start-up to first page66 ms271 ms4.1x faster cold start
Throughput (1 CPU)1,739 req/s197 req/s8.8x higher throughput
Throughput (8 Server CPUs)2,398 req/s197 req/s12.1x higher throughput
p50 Latency14.41 ms152.20 ms10.5x lower latency
p99 Tail Latency58.49 ms561.89 ms9.6x lower tail latency
JavaScript Client Payload26,157 B (9.4 KB gzip)592,598 B (196.7 KB gzip)22.6x smaller JS bundle
Memory Footprint (PSS)68.3 MB377.6 MB5.5x less memory

3. GizDB Analytical OLAP Performance (bench/results/db/)

ClickBench 10 Million Rows (db/clickbench.json)

  • Dataset: 10,000,000 rows of ClickBench hits table.
  • Harness: All 43 analytical queries executed hot (best of 3 runs, row counts strictly matched against DuckDB 1.5.6).
  • Hardware: AMD Ryzen 9 5900X (12 cores, 24 threads), 32 GB RAM, Linux.
  • Geometric Mean Time Ratio: 0.56x of DuckDB execution time (lower is faster).
  • Query Win Rate: 29 of 40 queries executed at or below DuckDB's time.

TPC-H SF10 Vectorized OLAP (db/tpch.json)

  • Dataset: TPC-H Scale Factor 10 (~10 GB columnar data).
  • Harness: All 22 canonical TPC-H analytical queries executed hot on the same 12 benchmark CPUs.
  • Geometric Mean Time Ratio: 0.764x of DuckDB execution time.
  • Query Win Rate: 17 of 22 queries executed at or below DuckDB's time.

4. Key-Value & Storage Durability (db/kv.json, db/pgbench.json)

  1. Redis RESP Compatibility (db/kv): In-memory Redis protocol engine executing over 1.2M GET/SET ops/sec with sub-millisecond p99 latency without standalone Redis daemon installation.
  2. ACID Transaction Durability (db/pgbench): WAL log flushing using direct kernel I/O (O_DIRECT / fsync) matching PostgreSQL 16 transaction durability contracts.