What is Chester?
A typed language with an effects story and a built-in TypeScript backend, implemented in Scala with both JVM and Scala.js targets.
Chester keeps the language small but the tooling serious: one Scala pipeline lowers to TypeScript, powers the CLI and LSP, and can live inside the browser through a shared Scala.js bundle.
Records, enums, functions, and effects lower into a predictable TS AST.
Optional CPS rewrite keeps IO explicit when you need it.
Build once with sbt webRepl/copyWebRepl and the site will serve /scala/web-repl.js to power the REPL inline.
pnpm install --frozen-lockfilesbt webRepl/copyWebReplpnpm devA typed language with an effects story and a built-in TypeScript backend, implemented in Scala with both JVM and Scala.js targets.
Showcase the language, ship a browser REPL backed by the real CLI bundle, and keep the getting-started story lightweight.
Build the Scala.js bundle with sbt webRepl/copyWebRepl, then run pnpm dev. The same bundle powers /repl and the inline REPL below.
Functions, records, enums, and Pi types stay explicit about effects with an optional CPS rewrite when you want it.
Lower a Chester program into a small, predictable TypeScript AST that works for codegen experiments or direct interop.
The CLI, LSP, and browser REPL all run on the same Scala pipeline—no separate “web mode” to maintain.
A small language surface that favors data-first code and preserves intent when moved between tools.