ReactBench v1 ベンチマーク発表
ReactBench は、単なる機能テストを超えて、パフォーマンスやアクセシビリティを含む実際の React コード品質を厳格に評価する新しいベンチマークであり、AI コーディングエージェントの実用性を測る新たな基準を示した。
キーポイント
従来のベンチマークの限界突破
既存のテストは機能の動作確認に留まっていたが、ReactBench は React Doctor を活用してパフォーマンス、アクセシビリティ、保守性の欠陥まで検出する。
専門家の構築と厳格な検証
GitHub や PayPal などで採用されている React Doctor や Million.js などのツールを基盤とし、React 専門家によって数百時間をかけてタスクがキュレーションされた。
現実的なコードベースでの評価
合成されたパズルではなく、実際のオープンソースリポジトリや既存プロジェクトに基づいたリアルな変更タスク(新機能実装と既存コードの修正)でモデルを評価する。
二つの主要評価カテゴリ
'Write React'(新機能の実装)と 'Fix React'(既存コードのリファクタリング)の 2 つの側面から、挙動の維持と品質基準の両方を同時に満たすかを測定する。
重要な引用
Today's models can pass tests in benchmarks but still write React that fails in production.
Every solution must pass both behavioral tests and React Doctor, our open-source, deterministic verifier for React code.
ReactBench spans open-source repositories and realistic changes grounded in existing projects (not synthetic puzzles).
影響分析・編集コメントを表示
影響分析
このニュースは、AI コーディングエージェントの評価基準が「動くか」から「高品質で保守可能なコードか」へとシフトする重要な転換点を示しています。特に React 分野において、単なる機能実装能力だけでなく、パフォーマンスやアクセシビリティといったエンジニアリングの質を厳格に評価できるベンチマークが確立されたことは、開発現場での AI ツールの信頼性向上に寄与します。
編集コメント
AI コーディングツールの普及に伴い、コードが「動くこと」だけでなく「プロダクション品質を満たすか」という評価基準の重要性が高まっています。ReactBench は、その課題に対して具体的な検証フレームワークを提供する画期的な取り組みであり、今後の AI エージェント開発における重要なマイルストーンとなるでしょう。
ReactBench は、現実的な React 開発におけるコーディングエージェントの評価指標です。現在のモデルはベンチマークのテストを通過できるものの、本番環境では動作しない React コードを書いてしまうケースが依然としてあります。従来のテストは振る舞い(ビヘイビア)を検証するものですが、React のパフォーマンス、アクセシビリティ、コード品質といった重要な課題を見逃してしまいます。
ReactBench が従来と異なる点は以下の通りです。
- 単なるテスト通過以上のハードル
すべての解決策は、振る舞いのテストをクリアすると同時に、React コード用のオープンソースかつ決定論的な検証ツール「React Doctor」もパスする必要があります。React Doctor は 400 以上のルールを持ち、エージェントが生成したコードから破損した副作用(エフェクト)、不要な再レンダリング、アクセシビリティの問題、保守性の欠如などを検出します。
- React の専門家によって構築
開発チームは、GitHub や PayPal、Rippling、Airbnb などのエンジニアに利用されている「React Doctor ★ 13.8k」「React Scan ★ 21.6k」「Million.js ★ 17.7k」を共同で開発しました。モデルの能力における実際のギャップを測定するため、数百時間にわたってタスクを選定・整備してきました。
- 実在するコードベースでの実践的な課題
ReactBench はオープンソースリポジトリや、既存プロジェクトに基づいた現実的な変更課題を対象としています。架空のパズルではなく、エージェントは機能を実装し、既存の振る舞いを維持しつつ、React に特化した品質チェックに合格する必要があります。
結果
我々は、2 つの補完的な能力を評価します。1 つ目は新機能の実装、2 つ目は既存コードの改善です。
- React の実装: 実際の機能を実装するか、バグを修正し、保持された動作テストに合格させる。同時に、新しい React Doctor の問題が発生していないことを検証する必要がある。(例はこちら)
- React のリファクタリング: 既存のコードから React の失敗箇所をリファクタリングしつつ、既存の動作は維持し、新たな React Doctor の問題を導入しないようにする。(例はこちら)
5 回の試行における pass@1 の平均値を報告します。
スコア順にランキング付けされています。コストはロールアウトあたりの平均値です。
ReactBench スコアと平均ロールアウトコストによるモデルのランク付け
| モデル | スコア | コスト |
|---|---|---|
| GPT 5.6 Sol · Medium (OpenAI) | 43.1% | $1.35 |
| GPT 5.6 Sol · XHigh (OpenAI) | 43.1% | $1.43 |
| GPT 5.6 Sol · Low (OpenAI) | 42.7% | $1.38 |
| GPT 5.6 Sol · Max (OpenAI) | 42.4% | $1.35 |
| Fable 5 · XHigh (Anthropic) | 41.2% | $9.05 |
| GPT 5.6 Sol · High (OpenAI) | 40.4% | $1.36 |
| Fable 5 · Max (Anthropic) | 40.0% | $13.50 |
| GPT 5.6 Terra · Medium (OpenAI) | 38.0% | $0.53 |
| Fable 5 · Low (Anthropic) | 37.3% | $3.15 |
| GPT 5.6 Terra · XHigh (OpenAI) | 36.9% | $0.51 |
| Fable 5 · High (Anthropic) | 35.7% | $6.17 |
| Opus 4.8 · Max (Anthropic) | 34.1% | $7.18 |
| GPT 5.6 Terra · High (OpenAI) | 33.7% | $0.52 |
| Opus 4.8 · XHigh (Anthropic) | 33.3% | $5.49 |
| GPT 5.6 Terra · Low (OpenAI) | 32.9% | $0.51 |
| GLM 5.2 · High (Z.ai) | 32.9% | $1.99 |
| GPT 5.6 Terra · Max (OpenAI) | 32.5% | $0.52 |
| Opus 4.8 · Medium (Anthropic) | 30.6% | $3.86 |
| Sonnet 5 · XHigh (Anthropic) | 30.6% | $3.23 |
| Sonnet 5 · Max (Anthropic) | 29.8% | $5.91 |
| GLM 5.2 · Low (Z.ai) | 29.8% | $2.06 |
| GLM 5.2 · Max (Z.ai) | 29.8% | $2.12 |
| Opus 4.8 · High (Anthropic) | 29.4% | $4.48 |
| Sonnet 5 · High (Anthropic) | 27.5% | $2.44 |
| GPT 5.6 Luna · Low (OpenAI) | 26.7% | $0.20 |
| GPT 5.6 Luna · High (OpenAI) | 25.9% | $0.21 |
| GPT 5.6 Luna · Max (OpenAI) | 25.9% | $0.20 |
| GPT 5.6 Luna · Medium (OpenAI) | 25.9% | $0.21 |
Opus 4.8 · LowAnthropic24.7%$1.72
Sonnet 5 · MediumAnthropic24.3%$1.08
GPT 5.6 Luna · XHighOpenAI21.6%$0.21
Kimi K2.7 CodeKimi20.4%$1.40
Sonnet 5 · LowAnthropic19.6%$0.58
図 2. ReactBench のスコア(%)と、平均ロールアウトコストまたは出力トークン数の関係。
ReactBench は、最先端のモデルであってもまだ飽和していません。GPT-5.6 Sol(XHigh設定)が観測された中で最も高い集計スコア 43.1% を記録し、Claude Fable 5(XHigh)も 41.2% に達しました。評価したすべての構成を比較すると、Fable の 1 試行あたりの平均コストは 7.97 ドルに対し、Sol はわずか 1.37 ドルで、その差は約 5.8 倍です。特に XHigh設定では、Fable のコストが Sol の 6.3 倍にもなります。最も優れた構成であっても、ベンチマークタスクの試行のうち半数以上を解決できていないのが現状です。
また、モデル構成間のタスク識別能力も評価しました。51 タスクからなるパネルにおいて、36 タスク(70.6%)で構成間の変動係数(標準偏差)が 0.10 を超えていました。
品質とコストのバランスを考慮すると、GPT-5.6 Terra(Medium設定)はスコア 38.0% を記録し、GPT-5.6 Sol(XHigh)より 5.1 ポイント低く留まりましたが、出力トークン数は 10.8% 削減され、タスクあたりのコストも 63.2% 安くなりました。主要な構成の性能をほぼ維持しつつ、コストは約 3 分の 1 で済むため、高ボリュームのワークロードにおいて最も実用的なトレードオフと言えます。
GPT-5.6 Sol(XHigh)が全体で最高位の合格率を達成しましたが、上位構成間の差は小さすぎて、明確な勝者を自信を持って断定することは困難です。
GPT-5.6 Sol
18.2
Fable 5
18.7
Opus 4.8
23.6
GPT-5.6 Terra
26.7
Sonnet 5
27.0
GPT-5.6 Luna
31.6
GLM 5.2
35.8
Kimi K2.7 Code
67.4
モデル別・カテゴリ別の新 React Doctor 問題の数(試行 100 回あたりの発生数)
バグ | パフォーマンス | アクセシビリティ | メンテナビリティ | 合計問題数
GPT-5.6 Sol: 15.7, 1.9, 0.3, 0.3, 18.2
Fable 5: 152.0, 0.9, 0.7, -, 18.7
Opus 4.8: 18.5, 2.5, 0.9, 1.6, 23.6
GPT-5.6 Terra: 21.5, 4.1, 0.7, 0.3, 26.7
Sonnet 5: 18.2, 2.8, 3.0, 3.0, 27.0
GPT-5.6 Luna: 26.4, 4.7, 0.4, 0, 31.6
GLM: 5.2, 25.7, 9.1, 0.5, 0.5, 35.8
Kimi K2.7 Code: 46.7, 8.9, 5.2, 6.7, 67.4
図 3:4,455 件の「React を書く」試行と 8 つのモデルファミリー全体における、新設された段階評価付き React Doctor 問題の発生頻度(100 回あたりの件数)。
「React を書く」試行 4,455 件中、評価対象となったモデルが引き起こした React Doctor の問題は合計 1,194 件でした。そのうちセキュリティ上の発見を含むバグは 925 件(77.5%)を占めています。最も多かったのはリストのレンダリングとフックの正しさにまつわる問題です。
検証結果の分類を見ると、「書く」タスクと「修正する」タスクでは失敗のパターンが異なります。「React を書く」試行で失敗した 2,486 件のうち、1,623 件(65.3%)は振る舞いのテストに不合格でしたが、React Doctor のチェックには合格していました。一方、「修正する」試行で失敗した 3,219 件のうち、1,956 件(60.8%)は振る舞い自体は正常でしたが、React Doctor のチェックでは不合格となりました。
つまり、「書く」タスクでの失敗は主に要求された動作の実装不足に起因し、「修正する」タスクでの失敗は未解決の React 固有の問題が原因であることがわかります。
なぜ ReactBench を構築したのか
React は現在、フロントエンドフレームワークの中で圧倒的なシェアを誇り、コーディングエージェントにとって最も主要なターゲットとなっています。JavaScript フレームワークを採用するウェブサイトの約 70% が React を選択しています。
私たちはすでにそのリスクを肌で実感しています。React Doctor は、PayPal、Rippling、Polymarket、そして疾病対策センター(CDC)のエンジニアたちが活用しているオープンソースのスキャンツールです。
このツールの普及が進んでいる背景には、モデル生成コードの増加があります。これにより、以前なら見過ごされていた微妙な欠陥が本番環境に到達しやすくなっているのです。AI が React コードをより多く書くようになると、些細なミスも巨大な規模で増幅されてしまいます。最悪の場合、これらの欠陥は本番環境の停止という事態を引き起こします。
- 障害:
useEffectの誤った使用が本番環境をダウンさせました。Cloudflare は 2025 年 9 月のダッシュボードおよび API 障害の原因を、依存関係に問題のある 1 つのエフェクトに特定しました。人間のレビューとテストを経たにもかかわらず、このバグは本番環境にリリースされてしまいました。
ReactBench の構築
各タスクタイプには、異なる構成と評価プロセスが用意されています。
React コードの記述
「Write React」は、エージェントが実際の業務を遂行する際に、React に関する regressions(後退)を導入できるかどうかを測定するものです。各タスクは、オープンソースリポジトリ内のマージされたプルリクエストから始まります。エージェントにはベースとなるリポジトリと、課題形式の指示が与えられます。ただし、参照用パッチや検証ツールは提供されません。
- 動作:検証者は隠された動作テストを注入し、エージェントの完了後に別のコンテナ内で結果を検証します。
- React の健全性:固定された React Doctor スキャンで、提出物とベースコミットを比較します。新しい問題が検出されると、そのタスクは失敗となります。
React の修正能力を評価する
Fix React は、エージェントがソースコードのみから React に関する問題を検出し、リファクタリングできるかを測定するベンチマークです。既知の課題を抱えるコンポーネントを用意し、その問題点を明示することなく改善を求めます。
- React の健全性: エージェントは、新たな評価対象となる React の問題を導入せずに、すべての指摘事項を解消する必要があります。なお、行番号のズレは採点時に無視されます。
- 動作の維持: リファクタリングによって機能に後退が生じていないか確認するため、タスクに紐づくテストスイートは必ず通過させる必要があります。
エージェントの環境からは React Doctor やその他の React 対応リンターを排除します。検証のみを行う側で、固定されたスキャナーとクリーンなベースラインを使用します。
検証ツールとしての React Doctor
行動テストのアサートではカバーしきれない課題に対応するため、React Doctor を構築しました。これはオープンソースの決定論的な React 検証ツールで、400 以上のルールを備えています。
- 正しさ: 条件付きフック、不安定なリストキー、 hydration の不一致、非推奨の React API を検出します。
- 状態と副作用: 派生または重複した状態、useEffect の濫用、無限のリレンダリングを検知します。
- パフォーマンス: 不要なリレンダリング、レイアウトスラッシング(描画の乱れ)、逐次的な非同期処理、バンドルを肥大化させるインポートを見つけます。
- アクセシビリティとセキュリティ: ラベルのないコントロール、キーボード操作に対応していないインタラクション、不安全な HTML、クライアントバンドルに漏洩した機密情報を検出します。
具体例
診断結果は、エージェントが追加した行の正確な位置に紐付けられます。
図 4. 行動検証と React Doctor が、それぞれ独立して同じパッチを評価しています。ReactBench はすべてのルールや LLM をジャッジとして利用しているわけではありません。評価に用いる特定の React Doctor ルールを厳選し、スキャナーのバージョンを固定した上で、クリーンなベースラインを用意しています。
実際のプルリクエストから検証済みタスクへ
ReactBench は、公開リポジトリでマージされた変更内容を抽出し、評価用のタスクとして変換します。
ReactBench のタスク発掘プロセスは、漏斗(ファネル)型のフローを経ています。まず 23,087 件の候補プルリクエストが対象となり、4 つの段階を経て絞り込まれていきます。各段階で却下された候補は枝分かれし、最終的に 51 件のタスクが残ります。
- 19.2k 件:React のシグナルなし
- 1,680 件:タスクフィルターの条件を満たさず
- 2,043 件:レビュー段階で却下
- 78 件:バリデーションに失敗
図 5 はこのリリース時のタスク発掘漏斗を示しています。中間の件数は発掘エクスポートデータに基づいて算出されており、最終的に 51 件のタスクが採用されました。グラフの帯の太さは可読性を高めるために調整されています。
候補の発掘
オープンソースの React プロジェクトから、マージされたプルリクエストを収集します。
候補のフィルタリング
製品コードに対して意味のある変更が含まれているかを確認するための自動化されたフィルターを用意しました。その後、レビュー担当者が例外処理を行い、より広範な機能開発や重要なプロジェクトに関わるもの、そして現実的な振る舞いテストを持つものを選別します。
タスクの作成
各レビュー担当者は、承認されたプルリクエストを、実社会で使われるような課題(イシュー)形式の指示に変換します。もし候補のテストが厳しすぎて実行できない場合、レビュー担当者が独自のテストハネスを再構築して振る舞いを検証できるように調整します。
動作の検証
テストは、固定されたベースコミットに対して失敗し、リファレンスソリューションに対しては成功する必要があります。変更されていないリポジトリではスコアが 0 に、リファレンスソリューションでは 1 になることが求められます。
検証者のテスト
敵対的なエージェント(Adversarial Agent)が、要求された動作を実装せずに満点を得ようと試みることで、検証プロセスの堅牢性を確認します。
リリースの固定
各タスクについて、ソースコミット、環境、テストスイート、リファレンスソリューション、および検証者の設定を固定します。さらに、公開された各アーティファクトのハッシュ値を記録したバージョン管理付きのマニフェストも用意しています。
Filter criteria
FilterRequirement
変更行数:50 行以上
追加行数:40 行以上
React シグナル:React プロダクトコードを対象
鮮度:2026 年 2 月 1 日以降にマージされたもの
リポジトリ規模:審査時の GitHub スター数が 20,000 未満
書き込みタスクの 92% が、この「鮮度」と「リポジトリ規模」の基準を両方満たしています。これらの閾値は、学習データへの露出(リーク)を防ぐために設けられています。
Behavioral coverage
すべてのタスクには、リリース前に確定的な動作チェックが定義されています。要求された挙動が既存のテストで完全に網羅されている場合は、リポジトリ内の Vitest、Jest、または Playwright のテストをそのまま利用します。
既存のテストに抜けがある場合、観測可能な挙動に基づいて検証用ハーン(harness)を別途構築します。レビュアーは、参照実装以外の正当な実装も検証器が受理することを確認します。
Clean-room grading
エージェントと検証器は別々のコンテナで実行されます。採点前には、検証器側で Git メタデータ、依存関係、保護された設定、非公開のテスト、そして固定バージョンの React Doctor バイナリを復元します。
継続的インテグレーション(CI)により、両方のコンテナが同じソースコミットを使用していることを確認しています。検証器はオフラインで動作し、外部ネットワークへの接続を行いません。また、実行中はエージェントが非公開テストや参照実装にアクセスできないように制限されています。
Separating model failures from benchmark failures
得点がゼロになる場合、モデルの失敗、指示の不備、テストの脆さ、検証器のエラー、インフラの障害、あるいは無効な実行など、原因は様々です。
レビュー担当者は、モデル性能の結論を導き出す前に、実行軌跡と最終的なパッチを確認します。各ロールアウトは、「正当な解決」「モデル側の真の失敗」「検証器による誤検知(偽陽性)」「検証器による見落とし(偽陰性)」、あるいは「無効な実行」のいずれかに分類されます。
ReactBench における報酬ハッキングへの対応
敵対的なエージェントは、テストインフラストラクチャ、報酬ファイル、Git の履歴、そして React Doctor の入力などを調査し、要求された機能を実装せずに満点のスコアを獲得しようと試みます。
こうした抜け道となるタスクは即座に修正または削除され、すべてのコントロールケースで再実行が行われます。この最終チェックにより、ReactBench が求められた作業を正しく測定できているか、あるいは単に採点システムを悪用する能力を測っているだけではないかを検証します。
限界について
React Bench はモデルそのものを孤立して評価するものではなく、エージェントの性能を評価するものです。Codex CLI、Claude Code、Cursor、Gemini CLI、およびその他のハッチング環境の違いが結果に影響を与える可能性があります。
すべてのタスクは、検証器として React Doctor を組み合わせた行動テストで構成されています。これらのチェックは重要な React の問題を捉えることができますが、視覚的な正しさや他の重要な属性まで完全に保証するものではありません。
また、本ベンチマークは主にオープンソースの React プロジェクトを対象としています。結果は、プロプライエタリなコードベース、異なるアーキテクチャ、あるいはその他のフロントエンドフレームワークや環境設定には一般化できない可能性があります。
React Bench は、版管理されたタスク、解決策、マニフェスト、リリース記録を公開し、他者が評価対象の各セットを検証・再現できるようにします。
今後の取り組み
今後は、より多くのモデルを、異なる難易度のタスクで比較検討する予定です。また、既存の商用ハーンだけでなく、mini-swe-agent での評価も実施し、より確固たるベンチマーク基準を確立したいと考えています。
さらに、ビジュアルデザイン分野や他のフロントエンドフレームワークへの対応も拡大します。対象とするリポジトリやタスクの種類も多様化させます。
ReactBench は常に改善され続けています。ベンチマークに関する不具合やご意見は GitHub の Issue で報告してください。モデル開発チームやコーディングエージェントの担当者の方は、お問い合わせフォーム からご連絡ください。未公開のタスクセットでのモデル評価、新ベンチマークへの早期アクセス、あるいは共同研究などのご相談も受け付けています。
謝辞
ReactBench の実現には、エンジニアやオープンソースプロジェクトのメンテナーの皆様が、時間と専門知識を提供してくださったおかげです。タスク、ドラフト、評価インフラストラクチャのレビューにご協力いただいた方々へ、心より感謝申し上げます。
- 研究開発チーム
- デザインチーム
- 外部貢献者
- Michał Pierzchała (React Native チーム)
- Jovi De Croock (Preact コアチーム)
- Dev Agrawal (SolidJS コアチーム)
- ryoppippi (ccusage 作成者)
- Rahim Alwer (Vidstack、Video.js v10 チーム作成者)
- Tiger Abrodi (Lovable 初期メンバー)
- Isabelle Reksopuro
- データ諮問委員会
- Parth Patel (AfterQuery 創設エンジニア)
ReactBench のタスクと評価インフラストラクチャの構築、検証、レビューに尽力されたエンジニアの皆様、および現在利用されているオープンソースリポジトリのメンテナーの皆様に、特に厚く御礼申し上げます。
原文を表示
ReactBench is an evaluation for coding agents on realistic React work. Today’s models can pass tests in benchmarks but still write React that fails in production. Tests verify behavior, but they miss React performance, accessibility, and quality issues.
Here’s what ReactBench does differently:
- A higher bar than just passing testsEvery solution must pass both behavioral tests and React Doctor, our open-source, deterministic verifier for React code. Its 400+ rules scan the agent's code for broken effects, unnecessary renders, accessibility problems, and maintainability issues.
- Built by React expertsOur team built React Doctor ★ 13.8k, React Scan ★ 21.6k, and Million.js ★ 17.7k, used by engineers at GitHub, PayPal, Rippling, and Airbnb. We spent hundreds of hours curating tasks to measure real gaps in model capabilities.
- Real work in real codebasesReactBench spans open-source repositories and realistic changes grounded in existing projects (not synthetic puzzles). Agents must implement, preserve behavior, and meet the React-specific quality checks.
Results
We evaluate two complementary capabilities: implementing new features and improving existing code.
- Write ReactImplement a real feature or fix, pass held-out behavioral tests, and validate no new React Doctor issues were introduced. See example
- Fix ReactRefactor React failures from existing code while preserving existing behavior without introducing new React Doctor issues. See example
We report the average of the pass@1 across 5 trials.
ReactBench remains unsaturated, even on leading models. GPT-5.6 Sol at XHigh has the highest observed aggregate score at 43.1%, while Claude Fable 5 at XHigh reaches 41.2%. Across evaluated configurations, Fable costs $7.97 per trial on average versus $1.37 for Sol, or 5.8× as much. At XHigh, Fable costs 6.3× as much as Sol. Even the best configurations solve fewer than half of benchmark task attempts.
We also evaluated task discrimination across model configurations. In the 51-task panel, 36 tasks (70.6%) had a cross-configuration standard deviation above 0.10.
In terms of balancing quality and cost, GPT-5.6 Terra at Medium reaches 38.0%, 5.1 percentage points behind GPT-5.6 Sol at XHigh, while using 10.8% fewer output tokens and costing 63.2% less per task. It retains most of the leading configuration’s performance at roughly one-third the cost, making it the strongest practical tradeoff for high-volume workloads.
GPT-5.6 Sol at XHigh achieved the highest overall pass rate. However, the differences among the leading configurations are too small to identify a clear winner with confidence.
Across 4,455 Write React trials, the evaluated models introduced 1,194 graded React Doctor issues. Bugs, including security findings, accounted for 925, or 77.5%. The most common issues involved list rendering and Hook correctness.
The verifier-outcome taxonomy shows that Write and Fix tasks fail differently. Among 2,486 failed Write trials, 1,623 (65.3%) failed behavioral tests but passed React Doctor. Among 3,219 failed Fix trials, 1,956 (60.8%) passed behavior but failed React Doctor.
Write tasks fail primarily on requested behavior, while Fix tasks fail primarily on unresolved React problems.
Why we built ReactBench
React is the dominant frontend framework and the most popular target for coding agents. Roughly 70% of websites built on a JavaScript framework choose React.
We have seen the risks firsthand. React Doctor is our open source tool for scanning React issues used by engineers at PayPal, Rippling, Polymarket, and the Centers for Disease Control and Prevention (CDC). Adoption is largely driven by the increase of model-generated code that makes it easier for subtle defects to reach production. As models write more React, small mistakes can propagate at enormous scale. In the worst cases, these defects lead to production failures:
- OutagesIncorrect useEffect usage takes down production. Cloudflare traced its September 2025 dashboard and API outageto one effect with a faulty dependency. Despite human review and test, the bug still shipped to production.
-
-
Building ReactBench
Each task type uses a different construction and evaluation process.
Write React
Write React measures whether an agent can implement real work without introducing a React regression. Each task starts from a merged pull request in an open-source repository. The agent receives the base repository and an issue-style instruction. The reference patch and verifier are not provided.
- BehaviorThe verifier injects the hidden behavior tests and verifies the results in a separate container after the agent completes.
- React healthA pinned React Doctor scan compares the submission with the base commit. If a new issue is detected, it fails.
Fix React
Fix React measures whether an agent can recognize and refactor React problems from source code alone. We select a component with known React issues and ask the agent to improve it without naming those findings.
- React healthThe agent must remove every target without introducing another graded React issue. The grader ignores line shifts.
- BehaviorThe task’s test suite must still pass to ensure refactoring the component did not regress it in functionality.
We strip React Doctor and other React-aware linters from the agent image. Only the verifier contains the pinned scanner and its clean baseline.
React Doctor as a verifier
We built React Doctor, an open-source, deterministic React verifier with 400+ rules to cover problems outside behavioral test assertions:
- CorrectnessCatches conditional hooks, unstable list keys, hydration mismatches, and deprecated React APIs.
- State and effectsFlags derived or duplicate state, useEffect abuse, and infinite rerenders.
- PerformanceFinds unnecessary renders, layout thrashing, sequential async work, and bundle-heavy imports.
- Accessibility and securityDetects unlabeled controls, keyboard-inaccessible interactions, unsafe HTML, and secrets exposed to client bundles.
ReactBench does not use every rule or an LLM-as-a-judge. We curate the specific React Doctor rules used for grading, then pin the scanner version and clean baseline.
From real pull requests to verified tasks
ReactBench converts merged changes from public repositories into evaluation tasks.
ReactBench task-mining funnel23,087 candidate pull requests narrow through four stages. Rejected candidates branch out at each stage until 51 tasks remain.- 19.2k rejectedNo React signal1,680 rejectedFailed task filters2,043 rejectedRejected in review78 rejectedFailed validationFigure 5. Release task-mining funnel. Intermediate counts are derived from the mining export; 51 tasks were retained. Band thickness is scaled for legibility.Mine candidatesWe collect merged pull requests from open-source React projects.
- Filter candidatesWe built automated filters to check if there were meaningful changes to product code. Then, reviewers assess exceptions that cover broader feature work or important projects, and have realistic behavioral tests.
- Author tasksEach reviewer converts validated pull requests into a realistic issue-style instruction. If the candidate’s tests are too strict, reviewers will rebuild a custom test harness to validate behavior.
- Validate behaviorThe tests must fail against the pinned base commit and pass with the reference solution. The unchanged repository must score 0, while the reference solution must score 1.
- Test the verifierAn adversarial agent attempts to earn full credit without implementing the requested behavior.
- Pin the releaseFor each task, we pin the source commit, environment, test suite, reference solution, and verifier configuration. We also have a versioned manifest that records a hash for each published artifact.
Filter criteria
FilterRequirement
Changed codeAt least 50 changed lines
AdditionsAt least 40 added lines
React signalChanges React product code
RecencyMerged on or after February 1, 2026
Repository sizeFewer than 20,000 GitHub stars during our audit
92% percent of Write React tasks meet both the recency and repository-size criteria. These thresholds are implemented to reduce likely training exposure.
Behavioral coverage
Every task defines deterministic behavioral checks before release. We use the repository’s existing Vitest, Jest, or Playwright tests when they fully specify the requested behavior.
When existing tests leave gaps, we build a separate harness around observable behavior. Reviewers confirm that the verifier accepts valid implementations beyond the reference solution.
Clean-room grading
The agent and verifier run in separate containers. Before grading, the verifier restores its own Git metadata, dependencies, protected configuration, hidden tests, and pinned React Doctor binary.
Continuous integration (CI) confirms that both containers use the same source commit. The verifier runs offline and doesn’t make external network requests. The agent cannot access hidden tests or the reference solution during its run.
Separating model failures from benchmark failures
A zero can reflect a model failure, unclear instructions, a brittle test, a verifier error, an infrastructure failure, or an invalid run.
Reviewers inspect the trajectory and final patch before including a result in model-performance conclusions. They classify each reviewed rollout as a legitimate solve, genuine model failure, verifier false positive, verifier false negative, or invalid run.
Testing ReactBench against reward hacking
The adversarial agent probes the test infrastructure, reward files, Git history, and React Doctor inputs. Its goal is to earn full credit without implementing the requested behavior.
We fix or remove any task that exposes a cheat, then rerun every control. This final check tests whether ReactBench measures the requested work rather than an agent’s ability to exploit the grader.
Limitations
React Bench evaluates agents, not models in isolation. Differences among Codex CLI, Claude Code, Cursor, Gemini CLI, and other harnesses can affect results.
Every task combines behavioral tests with React Doctor as a verifier. These checks catch important React problems, but they cannot guarantee visual correctness and other important attributes.
Also, the benchmark primarily covers open-source React projects. Results may not generalize to proprietary codebases, different architectures, or other frontend frameworks or setups.
React Bench will publish versioned tasks, solutions, manifests, and release records so others can inspect and reproduce each evaluated task set.
Future work
We plan to compare more models, on more effort levels. Additionally, we plan to run not only on the commercial harnesses, but also on mini-swe-agent to get a more solid baseline.
We also plan to expand into visual design and other frontend frameworks and diversify the repositories and task types represented.
We’re constantly improving ReactBench. Report benchmark issues on GitHub. Model labs and coding-agent teams can reach out to evaluate models on our held-out task set, get early access to new benchmarks, or collaborate with us.
Acknowledgments
ReactBench exists because engineers and open-source maintainers contributed their time and expertise. We thank everyone who reviewed its tasks, drafts, and evaluation infrastructure.
- Research
- Design
- External contributorsMichał Pierzchała(React Native team)
- Jovi De Croock(Preact core team)
- Dev Agrawal(SolidJS core team)
- ryoppippi(creator of ccusage)
- Rahim Alwer(creator of Vidstack, Video.js v10 team)
- Tiger Abrodi(early Lovable team)
- Isabelle Reksopuro
- Data AdvisoryParth Patel (Founding Engineer at AfterQuery)
Special thanks to the engineers who built, verified, and reviewed ReactBench’s tasks and evaluation infrastructure, and to the maintainers of the open-source repositories represented in the current task set.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み