Apr 26, 2026

ReScript Retreat 2026 Recap

Thirteen ReScript contributors met in Vienna to work on the compiler, build system, standard library, AI-assisted coding, and the wider ecosystem.

The ReScript Retreat 2026 has concluded. This year, thirteen developers from around the world came together in Vienna to work on the ReScript compiler and ecosystem. For three full days we worked from a large office close to the city center, focusing on the language, tooling, standard library, documentation, and the developer experience around AI-assisted coding.

As with previous retreats, the goal was simple: give contributors uninterrupted time together. ReScript is still built by people spread across different countries, companies, and time zones. Meeting in person helps us unblock long-running issues, compare ideas quickly, and turn plans into working pull requests while everyone has the same context.

Kickoff

On the first day, we started by discussing the current state of the ReScript compiler and ecosystem. Before diving into working groups, Robin Ricard from Jane Street joined us for a presentation and a technical exchange. We had very good discussions about JavaScript compilation challenges, and Robin showed us some of the tools he is building at Jane Street. He also presented OxCaml and showcased the Bonsai web framework.

Robin Ricard from Jane Street presenting at the ReScript Retreat

Those conversations were a useful reminder that, while ReScript has diverged significantly from the OCaml ecosystem over the years, we still share several goals: strong static typing, predictable compilation, and tooling that can support large codebases and agentic development workflows.

Working Groups

After the kickoff, we identified blockers and improvements that would have the highest impact for ReScript users. We then split into four working groups.

ReScript contributors working together during the retreatReScript contributors discussing implementation details at a tableReScript contributors collaborating in the retreat office

Contributors split into focused groups to work on the compiler, build system, Web API bindings, iterators, and AI-assisted coding.

Web API Bindings

One group focused on the experimental ReScript Web API bindings. Compile times had become longer than we wanted, and the package had grown broad enough that splitting it up made sense. The group worked on moving the bindings into multiple focused packages, such as DOM, Fetch, and Storage, under a dedicated npm organization.

This work pairs with feature-gated source directories in the build system, which let large libraries expose optional parts of their source tree only when needed. For broad packages like Web API bindings, this is important: users should not pay compile-time costs for browser APIs they never import. Together, these changes should make the packages easier to maintain, faster to compile, and more practical to adopt incrementally.

Build System

Another group returned to the build system. There was a long-standing issue where the build system locked its build state while a watcher was running. That meant a second build, for example one triggered by an AI agent or another parallel tool, could fail because the lock file prevented it from proceeding.

We prioritized this over several other build-system improvements because it directly affects modern development workflows. The group also worked on performance improvements and better terminal output.

Iterators

Another group focused on iterator and iterable support in the standard library. The immediate goal was to make the type definitions line up better with JavaScript's iteration protocols, including generator values. This work supports the new for...of and for await...of syntax and makes interop with iterable JavaScript APIs more predictable.

AI-Assisted Coding

The final group explored how ReScript can become better suited for AI-assisted coding. One idea was an "AI mode": a strict linter that can run as a separate phase after regular compilation and type checking. The goal is to catch patterns that are technically valid but undesirable in generated or agent-edited code, and to give agents tighter feedback loops when working inside a ReScript project.

We also worked on documentation and project generation improvements, since high-quality examples and predictable project structure are especially important when tools need to understand a codebase quickly.

Talks

On the second day, several contributors presented work they had prepared before the retreat. The talks covered both concrete ecosystem projects and larger compiler or language experiments:

  • Dmitry Zakharov: ReScript & Sury.

  • Gabriel Nordeborn: ResX, PHP meets JSX and type safety.

  • Jaap Frolich: Rewriting the compiler in Rust and comptime evaluation.

  • Woonki Moon: ReScript Comptime PoC, a lighter metaprogramming alternative to PPX.

  • Paul Tsnobiladzé: ReScript-Shadcn, shadcn for ReScript and rescript-react.

  • Bernardo Gurgel: Signals All The Way Down, reactive UIs with Xote and ReScript Signals.

We also live-streamed the talks on YouTube.

Recording of the ReScript Retreat 2026 talks

After the talks, we continued with the working groups and wrapped up that work on the third day.

Results

By the end of the retreat, a number of features and improvements had been implemented. These are now available in 13.0.0-alpha.4.

Compiler

  • Added support for for...of and for await...of loops.

    RES
    let arr = [1, 2, 3] let count = ref(0) for _ of arr { count := count.contents + 1 } let consume = async iterable => { for await item of iterable { let result = await Promise.resolve(item + 1) Console.log(result) } }

  • Added break and continue for use in loops.

    RES
    for i in 0 to 10 { switch i { | 3 => continue | 8 => break | _ => work() } }

  • Added dictionary spread support.

    RES
    let foo = dict{ "a": 1, "b": 2, } let baz = dict{ "b": 4, "c": 5, } let result = dict{...foo, "b": 3, ...baz, "d": 6}

Standard Library

  • Fixed iterator and iterable type definitions.

  • Added generator type definitions.

  • Added Dict.assignMany.

  • Added Dict.concat.

  • Added Dict.concatMany.

  • Added Dict.concatAll.

  • Added Array.concatAll.

Build System

  • Added a --prod flag to the build, watch, and clean commands. This skips dev dependencies and dev sources, enabling builds in environments where dev packages are not installed.

  • Added feature-gated source directories, so packages can include optional slices of their source tree at build time and large libraries can avoid compiling unused areas by default.

  • Solved the long-standing issue where rebuilds were blocked while watchers were already running.

  • Improved watch output and added a --clear-screen option.

  • Preserved warnings across atomic-save full rebuilds and incremental watch builds.

  • Restored backward compatibility for bsconfig.json.

  • Improved build scheduling so larger projects can rebuild more efficiently. In some tests, this was around 30% faster.

Ecosystem

  • Split the Web API bindings into multiple packages, including DOM, Fetch, and Storage, and moved them into a dedicated npm organization.

  • Released rescript-react-signals, a specialized package for using rescript-signals together with React.

Discussions

Naturally, a lot of retreat time was also spent discussing how ReScript should move forward. Some topics are not ready to become language features yet, but the in-person format helped us clarify tradeoffs and narrow down possible directions.

We had a long discussion about early returns. The feature is tricky because it sits directly between readability, expression-oriented control flow, and practical ergonomics in longer functions. No final decision was made, but the discussion clarified what any proposal would need to address.

We also discussed generator functions. There is clear value in being able to bind to JavaScript generators well, but it is still unclear whether ReScript needs full generator syntax beyond interop support.

Another recurring topic was a bindings management platform. The work around rescript-shadcn, presented by Paul Tsnobiladzé, is already a step in that direction. We are still exploring prototypes for a larger repository and CLI-based workflow for finding and fetching bindings.

What's Next

We are aiming to release ReScript 13 in late summer. The current goals include removing legacy namespaces such as Js and Dom, with Web API functionality moving toward the newer package structure. We also want ReScript 13 to include dedicated linting support for AI-assisted coding.

In the full v13 release, Jsx.component will be an abstract type. This better models React components that are not plain functions, such as memoized or lazy components, and gives clearer errors when a regular function is used where JSX expects a component.

Other candidates include source map support, immutable arrays, and additional record ergonomics, such as record rest destructuring. In the meantime, we expect some of the smaller retreat results, mostly build-system fixes and polish, to make their way into a ReScript 12.3.0 release. As always, the exact release contents will depend on implementation progress, review, and migration risk.

Sponsors

Retreat sponsor

We want to thank Jane Street for sponsoring the retreat and helping make another event possible next year. We appreciated the technical exchange with Robin Ricard and the chance to compare notes with people working on related ML-family tooling.

Long-term project sponsor

Control Center Apps returned as a sponsor this year as well. Thank you for your continued support of the ReScript project.

Venue sponsor

We also want to thank Ketryx for providing this year's venue. The office is close to the center of Vienna, and the modern equipment, including height-adjustable desks, was very appreciated throughout the retreat.

Finally, thanks to OpenAI for the generous "Codex for OSS" sponsorship. This was the first retreat where every developer had at least three months of access, and it contributed directly to the productivity of the working groups.

Acknowledgements

Thank you to all attendees. This accelerated way of developing a programming language would not be possible without contributors willing to travel, discuss difficult tradeoffs, review each other's work, and spend several focused days improving ReScript together.

The attendees were very happy with the outcome. We felt productive, the working groups made concrete progress, and several longer-running topics are now much closer to being ready for users.

Attendees: @brnrdog, @Bushuo, @cknitt, @fhammerschmidt, @jfrolich, @jderochervlk, @JonoPrest, @mununki, @rolandpeelen, @rricard, @ryyppy, @tsnobip, and @zth.

The ReScript team gathered at the 2026 retreat in ViennaThe ReScript team celebrating at the 2026 retreat in Vienna

The ReScript team at the 2026 retreat in Vienna.

Want to read more?
Back to Overview