Skip to content

Scoreboard ​

ChadScript's promise is simple: a program either behaves exactly like Node, or ChadScript refuses to compile it and says why. This page measures that promise on a corpus of 100 realistic TypeScript programs (tests/corpus): CLI tools, parsers, file-processing scripts, algorithms, class hierarchies, small interpreters and more, written the way people write TypeScript rather than for ChadScript.

Every program runs under Node and as a native binary (at -O0 and -O2), each in its own empty working directory. "Behaves exactly like Node" means the same standard output, the same standard error, the same exit code, and the same files left on disk, byte for byte.

ProgramsShare
Programs that behave exactly like Node33%
Programs ChadScript refuses with a clear error9797%
Programs where ChadScript is wrong (0 is the goal)00%
Programs where ChadScript crashes (0 is the goal)00%
Total100

A refusal is the safe outcome: you get a CS error code pointing at the construct and a suggested rewrite, and nothing runs wrongly. Each program in the last two rows is a tracked bug, marked @known-bug in the corpus.

By category ​

CategoryProgramsExactly like NodeRefusedWrongCrashes
algorithms1301300
async-io50500
cli92700
data-structures90900
errors50500
generics80800
interpreters50500
oop90900
parsing1101100
scripts71600
simulation70700
text1201200

Top 15 reasons for refusing a program ​

These rank what to support next. A program refused for several reasons counts once under each. Codes link to their explanation on the error codes page.

#CodeReasonProgramsExamples
1CS1213regular expression literals are not supported yet30calc-interpreter.ts, case-convert.ts, ciphers.ts
2CS1217default parameter values are not supported yet23animals.ts, bank-ledger.ts, brainfuck.ts
3CS1233this value has a tuple type with different element types ([string, number])16bank-ledger.ts, calc-interpreter.ts, case-convert.ts
4CS1000indexing an object with a computed key is not supported15binary-search.ts, bitset.ts, brainfuck.ts
5CS1000new Array is not supported11bank-queue-sim.ts, brainfuck.ts, ciphers.ts
6CS1224Array.prototype.fill is not supported yet11bank-queue-sim.ts, brainfuck.ts, ciphers.ts
7CS1000a class that extends the built-in Error is not supported10bank-ledger.ts, calc-interpreter.ts, cli-options.ts
8CS1222Map.entries is not supported yet10calc-interpreter.ts, cli-stats.ts, csv-sales-report.ts
9CS1222iterating a Map directly with for...of is not supported yet9build-order.ts, dice-probability.ts, dotenv-parser.ts
10CS1220Object.entries is not supported yet8build-order.ts, case-convert.ts, cli-config-merge.ts
11CS1214JSON.parse requires an explicit target type annotation6async-generators.ts, cli-config-merge.ts, cli-todo.ts
12CS1223String.prototype.localeCompare is not supported yet6cli-options.ts, csv-sales-report.ts, log-analyzer.ts
13CS1224Array.prototype.splice is not supported yet6async-queue.ts, bank-queue-sim.ts, cli-rpn.ts
14CS1233this value has a type ChadScript does not support here ({ [key: string]: string; })6json-parser.ts, log-analyzer.ts, markdown-to-html.ts
15CS1233this value has a type ChadScript does not support here (Record<string, number>)6expense-tracker.ts, json-inventory.ts, number-words.ts

Known wrong or crashing programs ​

None.

Regenerating ​

bun run scripts/scoreboard.ts reruns the corpus and rewrites this page. The corpus test in the slow lane fails when a program without a @known-bug note diverges from Node or crashes the compiler, and when a @known-bug program starts working.