diff --git a/markdown-pages/blog/retreat-recap-2026.mdx b/markdown-pages/blog/retreat-recap-2026.mdx
new file mode 100644
index 000000000..7f26fb784
--- /dev/null
+++ b/markdown-pages/blog/retreat-recap-2026.mdx
@@ -0,0 +1,313 @@
+---
+author: rescript-association
+date: "2026-04-28"
+previewImg: /blog/retreat-recap-2026-group-01.avif
+articleImg: /blog/retreat-recap-2026-group-01.avif
+title: ReScript Retreat 2026 Recap
+description: |
+ 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](https://www.janestreet.com/) 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](https://oxcaml.org/) and showcased the Bonsai web framework.
+
+
+
+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.
+
+
+
+
+
+
+
+
+ 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.
+ - [Slides](https://docs.google.com/presentation/d/176TePKFT6HzmLvApyvaEMpngm4poM7zW2F4Fr-wDPzM/edit?slide=id.g2ce4b81d49a_0_45#slide=id.g2ce4b81d49a_0_45)
+ - [Sury](https://github.com/DZakh/sury)
+- Gabriel Nordeborn: ResX, PHP meets JSX and type safety.
+ - [ResX](https://github.com/zth/res-x)
+- Jaap Frolich: Rewriting the compiler in Rust and comptime evaluation.
+ - [Presentation](https://gist.github.com/jfrolich/c05970987e17e46ca78996226bd318f3)
+- Woonki Moon: ReScript Comptime PoC, a lighter metaprogramming alternative to PPX.
+ - [Design doc](https://github.com/mununki/rescript/blob/poc-comptime/docs/comptime_design.md)
+ - [Slides](https://rescript-comptime-ppt.pages.dev/)
+ - [Examples](https://github.com/mununki/rescript-comptime-poc)
+- Paul Tsnobiladzé: ReScript-Shadcn, shadcn for ReScript and rescript-react.
+ - [Slides](https://tsnobip.github.io/rescript-shadcn-presentation)
+ - [Demo source](https://github.com/tsnobip/rescript-shadcn-presentation/)
+- Bernardo Gurgel: Signals All The Way Down, reactive UIs with Xote and ReScript Signals.
+ - [Xote](https://xote.dev/)
+ - [ReScript Signals](https://brnrdog.github.io/rescript-signals/)
+ - [ReSlides](https://github.com/brnrdog/reslides)
+ - [Demo](https://brnrdog.github.io/reslides)
+
+We also live-streamed the talks on YouTube.
+
+
+
+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`](https://github.com/rescript-lang/rescript/releases/tag/v13.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
+
+
+
+We want to thank [Jane Street](https://www.janestreet.com/) 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.
+
+
+
+[Control Center Apps](https://www.cca.io/) returned as a sponsor this year as well.
+Thank you for your continued support of the ReScript project.
+
+
+
+We also want to thank [Ketryx](https://www.ketryx.com/) 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](https://openai.com/) 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](https://github.com/brnrdog),
+[@Bushuo](https://github.com/Bushuo),
+[@cknitt](https://github.com/cknitt),
+[@fhammerschmidt](https://github.com/fhammerschmidt),
+[@jfrolich](https://github.com/jfrolich),
+[@jderochervlk](https://github.com/jderochervlk),
+[@JonoPrest](https://github.com/JonoPrest),
+[@mununki](https://github.com/mununki),
+[@rolandpeelen](https://github.com/rolandpeelen),
+[@rricard](https://github.com/rricard),
+[@ryyppy](https://github.com/ryyppy),
+[@tsnobip](https://github.com/tsnobip),
+and [@zth](https://github.com/zth).
+
+
+
+
+
+
+
+ The ReScript team at the 2026 retreat in Vienna.
+
+
diff --git a/public/blog/retreat-recap-2026-group-01.avif b/public/blog/retreat-recap-2026-group-01.avif
new file mode 100644
index 000000000..b761ef776
Binary files /dev/null and b/public/blog/retreat-recap-2026-group-01.avif differ
diff --git a/public/blog/retreat-recap-2026-group-02.avif b/public/blog/retreat-recap-2026-group-02.avif
new file mode 100644
index 000000000..0f3174c24
Binary files /dev/null and b/public/blog/retreat-recap-2026-group-02.avif differ
diff --git a/public/blog/retreat-recap-2026-group-03.avif b/public/blog/retreat-recap-2026-group-03.avif
new file mode 100644
index 000000000..2619a7f75
Binary files /dev/null and b/public/blog/retreat-recap-2026-group-03.avif differ
diff --git a/public/blog/retreat-recap-2026-jane-street-talk.avif b/public/blog/retreat-recap-2026-jane-street-talk.avif
new file mode 100644
index 000000000..249e5aa9b
Binary files /dev/null and b/public/blog/retreat-recap-2026-jane-street-talk.avif differ
diff --git a/public/blog/retreat-recap-2026-work-01.avif b/public/blog/retreat-recap-2026-work-01.avif
new file mode 100644
index 000000000..1dadc1d7a
Binary files /dev/null and b/public/blog/retreat-recap-2026-work-01.avif differ
diff --git a/public/blog/retreat-recap-2026-work-02.avif b/public/blog/retreat-recap-2026-work-02.avif
new file mode 100644
index 000000000..3a2079c19
Binary files /dev/null and b/public/blog/retreat-recap-2026-work-02.avif differ
diff --git a/public/blog/retreat-recap-2026-work-03.avif b/public/blog/retreat-recap-2026-work-03.avif
new file mode 100644
index 000000000..d429aa130
Binary files /dev/null and b/public/blog/retreat-recap-2026-work-03.avif differ
diff --git a/public/brand/rescript-association-mark-inverted-centered.svg b/public/brand/rescript-association-mark-inverted-centered.svg
new file mode 100644
index 000000000..47970729a
--- /dev/null
+++ b/public/brand/rescript-association-mark-inverted-centered.svg
@@ -0,0 +1,7 @@
+
diff --git a/public/partners/jane-street.svg b/public/partners/jane-street.svg
new file mode 100644
index 000000000..ed97b34dd
--- /dev/null
+++ b/public/partners/jane-street.svg
@@ -0,0 +1,13 @@
+
diff --git a/public/partners/ketryx.svg b/public/partners/ketryx.svg
new file mode 100644
index 000000000..f62cf091c
--- /dev/null
+++ b/public/partners/ketryx.svg
@@ -0,0 +1,22 @@
+
diff --git a/src/components/Markdown.res b/src/components/Markdown.res
index 5222f5fae..247a5d74f 100644
--- a/src/components/Markdown.res
+++ b/src/components/Markdown.res
@@ -538,7 +538,7 @@ module Video = {
{switch caption {
| None => React.null
| Some(caption) =>
-