Find the best AI models for Garry's Mod development.
gmod-bench tests how well AI models write real Garry's Mod Lua, so you can choose the right model for your next addon.
Leaderboard
See which models know GMod Lua best across 38 public coding challenges.
| # | Adapter | Model | Think | Pass % | Cover % | Score | Outcomes | Time |
|---|---|---|---|---|---|---|---|---|
| 1 | Codex | gpt-5.6-terra ddc5aa24 | Max | 94.7% | 100.0% | 96.7% | 72/3/1/0 | 21.6s |
#1 gpt-5.6-terraMaxPass rate94.7% 72 pass · 76 scored Coverage100.0% 76 / 76 evidence-bearing Verified score96.7% 95% interval 85.5–99.3% · 2 run(s) Fixtures37/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures33/38 passed in linked runperf-string-table-concatperf-angle-zeroperf-hudpaint-cacheperf-find-ents-nearperf-looking-atents-iteratorhook-addisvalidnet-receiversperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-local-colorperf-local-vs-globalperf-localplayer-cacheperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-steamid-cacheperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
| 2 | AntiGravity | Gemini 3.5 Flash c99506be | High | 92.1% | 100.0% | 96.1% | 105/9/0/0 | 6.9s |
#2 Gemini 3.5 FlashHighPass rate92.1% 105 pass · 114 scored Coverage100.0% 114 / 114 evidence-bearing Verified score96.1% 95% interval 84.6–99.1% · 3 run(s) Fixtures37/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures32/38 passed in linked runperf-string-table-concatperf-config-varperf-seq-tablesperf-localplayer-cacheperf-looking-atperf-steamid-cacheents-iteratorhook-addisvalidnet-receiversperf-angle-zeroperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-ents-nearperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
| 3 | Codex | gpt-5.6-luna ddc5aa24 | High | 94.7% | 100.0% | 96.1% | 72/2/2/0 | 15.1s |
#3 gpt-5.6-lunaHighPass rate94.7% 72 pass · 76 scored Coverage100.0% 76 / 76 evidence-bearing Verified score96.1% 95% interval 84.6–99.1% · 2 run(s) Fixtures37/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures35/38 passed in linked runperf-find-ents-nearperf-string-table-concatplayer-iteratorents-iteratorhook-addisvalidnet-receiversperf-angle-zeroperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-localplayer-cacheperf-looking-atperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-steamid-cacheperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-x | ||||||||
| 4 | Codex | gpt-5.6-terra ddc5aa24 | Extra High | 94.7% | 100.0% | 96.1% | 72/2/2/0 | 14.3s |
#4 gpt-5.6-terraExtra HighPass rate94.7% 72 pass · 76 scored Coverage100.0% 76 / 76 evidence-bearing Verified score96.1% 95% interval 84.6–99.1% · 2 run(s) Fixtures36/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures33/38 passed in linked runperf-string-table-concatperf-angle-zeroperf-find-ents-nearperf-looking-atperf-steamid-cacheents-iteratorhook-addisvalidnet-receiversperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-localplayer-cacheperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
| 5 | Codex | gpt-5.6-terra ddc5aa24 | Low | 94.4% | 93.4% | 96.1% | 67/3/1/0 | 12.8s |
#5 gpt-5.6-terraLowPass rate94.4% 67 pass · 71 scored Coverage93.4% 71 / 76 evidence-bearing Verified score96.1% 95% interval 84.6–99.1% · 2 run(s) Fixtures36/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures31/38 passed in linked runperf-angle-zeroperf-ents-iteratorperf-for-vs-whileperf-localplayer-cacheperf-looking-atperf-string-table-concatperf-find-ents-nearents-iteratorhook-addisvalidnet-receiversperf-config-varperf-darkrpvarperf-disttosqrperf-find-players-nearperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-steamid-cacheperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
| 6 | AntiGravity | Gemini 3.5 Flash c99506be | Medium | 92.0% | 100.0% | 94.3% | 104/7/2/1 | 6.1s |
#6 Gemini 3.5 FlashMediumPass rate92.0% 104 pass · 113 scored Coverage100.0% 114 / 114 evidence-bearing Verified score94.3% 95% interval 82.1–98.4% · 3 run(s) Fixtures36/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures29/38 passed in linked runperf-string-table-concatperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-seq-tablesperf-angle-zeroperf-find-ents-nearperf-localplayer-cacheperf-looking-atperf-steamid-cacheents-iteratorhook-addisvalidnet-receiversperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-meta-vs-argperf-msg-vs-printperf-player-cache-hooksperf-ply-table-indexperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
| 7 | Codex | gpt-5.6-luna ddc5aa24 | Extra High | 93.4% | 100.0% | 94.1% | 71/1/4/0 | 14.0s |
#7 gpt-5.6-lunaExtra HighPass rate93.4% 71 pass · 76 scored Coverage100.0% 76 / 76 evidence-bearing Verified score94.1% 95% interval 81.8–98.3% · 2 run(s) Fixtures37/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures35/38 passed in linked runperf-find-ents-nearperf-string-table-concatperf-looking-atents-iteratorhook-addisvalidnet-receiversperf-angle-zeroperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-localplayer-cacheperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-steamid-cacheperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
| 8 | Codex | gpt-5.5 ddc5aa24 | Medium | 92.1% | 100.0% | 93.4% | 70/2/4/0 | 11.0s |
#8 gpt-5.5MediumPass rate92.1% 70 pass · 76 scored Coverage100.0% 76 / 76 evidence-bearing Verified score93.4% 95% interval 80.9–97.9% · 2 run(s) Fixtures36/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures35/38 passed in linked runperf-find-ents-nearperf-string-table-concatperf-looking-atents-iteratorhook-addisvalidnet-receiversperf-angle-zeroperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-localplayer-cacheperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-steamid-cacheperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
| 9 | Codex | gpt-5.6-luna ddc5aa24 | Max | 92.1% | 100.0% | 93.4% | 70/2/4/0 | 18.9s |
#9 gpt-5.6-lunaMaxPass rate92.1% 70 pass · 76 scored Coverage100.0% 76 / 76 evidence-bearing Verified score93.4% 95% interval 80.9–97.9% · 2 run(s) Fixtures38/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures33/38 passed in linked runperf-find-ents-nearperf-string-table-concatperf-angle-zeroperf-looking-atplayer-iteratorents-iteratorhook-addisvalidnet-receiversperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-localplayer-cacheperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-steamid-cacheperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-x | ||||||||
| 10 | Codex | gpt-5.6-sol ddc5aa24 | Max | 92.1% | 100.0% | 92.8% | 70/1/5/0 | 15.4s |
#10 gpt-5.6-solMaxPass rate92.1% 70 pass · 76 scored Coverage100.0% 76 / 76 evidence-bearing Verified score92.8% 95% interval 80.1–97.6% · 2 run(s) Fixtures37/38 fixtures passed / attempted Outcome mix
Invalid output means the model returned content that broke the answer contract, so it scores zero. Harness failures returned no answer and are excluded from score. Attempt funnel
Run facts
Latest run fixtures34/38 passed in linked runperf-string-table-concatperf-angle-zeroperf-find-ents-nearperf-looking-atents-iteratorhook-addisvalidnet-receiversperf-config-varperf-darkrpvarperf-disttosqrperf-ents-iteratorperf-find-players-nearperf-for-vs-whileperf-hook-onceperf-hudpaint-cacheperf-local-colorperf-local-vs-globalperf-localplayer-cacheperf-meta-vs-argperf-msg-vs-printperf-pairs-ipairs-forperf-plain-lua-vs-fnperf-player-cache-hooksperf-ply-table-indexperf-seq-tablesperf-setdrawcolor-splitperf-sqlite-vs-mysqlperf-steamid-cacheperf-surface-drawrectperf-surface-textperf-table-count-hashperf-table-emptyperf-table-hasvalueperf-table-literalperf-table-randomperf-x-times-xplayer-iterator | ||||||||
Verified score aggregates compatible runs. Outcomes = pass / partial / wrong / invalid output; harness failures are excluded. Click a row for evidence and the linked run's fixtures.
Ranks aggregate all verified runs in the broadest compatible fixture cohort. Each fixture has equal weight; harness failures are excluded, malformed model answers score zero, and numeric rank requires at least 50% fixture coverage.
Run locally
Needs Bun. Supports Codex, OpenCode, AntiGravity, and OpenRouter (free or paid). Use the login that runner already expects.
- 1
Install
Clone the repo, then
bun install. - 2
Pick a runner
Codex, OpenCode, AntiGravity, or OpenRouter. For OpenRouter free, put
OPENROUTER_API_KEYin.env. - 3
Run
Results write to
.gmod-bench/runs/.
bun install
bun run bench run --fixture all --codex --concurrency 8