Skip to content
MrJev

Jev Tetris

Two models play Tetris on a shared seeded piece sequence under the same clock; a piece that lands before the answer arrives locks where it fell. No licence file.

View on GitHub →

Hands-on review

Two models play Tetris on the same seeded piece sequence under the same clock. The proxy that makes it work is 131 lines and stores nothing.

Good for

  • A comparison built to be fair: same seed, same options, same clock
  • A proxy that forwards your own key and writes nothing to disk
  • Watching a decision model make choices under a real-time deadline

Watch out for

  • No licence file, so nobody can legally fork it
  • Its head-to-head results are the author's; we do not republish them
  • You bring your own keys: a TypeSafe key plus Anthropic or Gemini

Tested Sep 22, 2026 at a0b411c6378f · node:24 in Docker for its test suite, and the whole proxy read line by line

How we reviewed this: we ran its tests and read the proxy in full — it is 131 lines — to check what it does with the keys that pass through it. We made no Jev calls and played no live games.

What it is

Two models play Tetris against each other in real time. Jev faces Claude Haiku 4.5, Gemini 3.8 Flash, or Laya, an open-weight typed-decision model you run yourself. Lines you clear land on your opponent’s board as garbage. First to top out loses.

The fight is built to be fair

This is the part worth reviewing, because a head-to-head between a decision model and a generative one is easy to rig by accident.

  • The same piece sequence. Both sides run their own loop on a seeded sequence shared by both players.
  • The same options. Each is asked to pick a column and rotation from the same set.
  • The same clock. When a piece spawns the model is asked immediately, while gravity keeps pulling the piece down. If the answer arrives in time, the piece slides and hard-drops. If it lands before the answer arrives, it locks where it fell.

That last rule is the honest one. It means latency is part of the game rather than something the harness waits out — which is the whole argument for a decision model, and also the way a slow model is allowed to lose on merit rather than by disqualification.

We are not reporting who wins. Those are the author’s measurements of other people’s models, and we do not republish one project’s comparisons. What we can say is that the setup does not obviously favour anybody, and the rule about a piece locking while you think is the sort of detail a rigged benchmark leaves out.

The proxy

Browsers cannot call api.typesafe.ai directly — its CORS policy refuses — so the repository ships server.mjs to forward requests. Anything sitting between you and your API key is worth reading, and at 131 lines you can read all of it.

The README claims “the proxy stores nothing”. It holds: there is no writeFile, no appendFile, no stream to disk, and no request logging anywhere in the file. The only two console.log calls are the startup banner and a note that a fallback key was found in the environment.

It forwards your Authorization header to TypeSafe, and your x-api-key / x-goog-api-key to Anthropic and Gemini. That is the opposite of what we wanted from Jeview, and correct here: this is your browser, your key, and the proxy exists only because of a CORS policy.

14 tests pass.

The licence

There is no licence file. The project is playable at jev-tetris.vercel.app and readable on GitHub, but without a licence nobody can fork it, vendor the proxy, or reuse the fairness harness — which is the part most worth reusing. Thirteen stars.

Verdict

The most enjoyable way in this directory to see what a decision model is actually for: a choice from a fixed set, under a deadline, over and over, where being slow costs you the piece.

Play it. Read server.mjs before you paste a key into anything. And if you were hoping to borrow the harness, ask the author for a licence first.

For a decision model under a different real-time constraint, see Jev Plays Pokemon Red; for running an open Jev-compatible model yourself, Laya for Node.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 22, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Games & Real-Time Demos

TypeSafe Mario

★ 458▲ 3

fhshaik/typesafe-mario

Jev picks NES controller inputs for Super Mario Bros. from emulator state, with no screenshots.

PythonReviewed

Jev experiments

★ 412▲ 3

dabit3/jev-experiments

Latency-focused demos from Nader Dabit, each app in its own directory with its own README. No licence file at the time of writing.

TypeScriptReviewed

jev-drone

★ 298▲ 9

RomanSlack/jev-drone

Camera-only quadrotor in MuJoCo with Jev making judgment calls at about 2.5 Hz.

PythonReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.