Raku 2025 Review
Source: Dev.to
Technical summary
-
Rakudo commits: ~1 650 (MoarVM, NQP, Rakudo, docs) – about 20 % less than in 2024.
-
All repositories now use
mainas the default branch (instead ofmaster). -
RakuAST work: ~58 % of Rakudo commits were on the RakuAST effort (up from 33 % in 2024).
-
95 % of that work was done by Stefan Seifert (TPRF‑funded).
- Result: the part of Rakudo written in Raku can now be built with RakuAST (the “bootstrap”).
-
-
Remaining work: a few issues still block making the RakuAST‑based Rakudo the default for the next language‑level release.
Core development highlights
| Area | What happened? |
|---|---|
| MoarVM Unicode tools | Geoffrey Broadwell performed a major internal update. Shimmerfairy then upgraded MoarVM Unicode support from 15.0 → 17.0, adding new emojis (e.g. FINGERPRINT, SPLATTER, HARP). |
| Script runners | Patrick Böker added new runners that speed up CLI‑script execution and enable Windows‑native script runs. |
| Continuous‑integration | CI now produces far fewer false‑positives, easing developers’ lives. |
| Reproducible builds | Thanks to Timo Paulssen and others, Rakudo’s build process is reproducible again – a big win for packagers. |
| REPL improvements | - Persistent grammar changes. - Multi‑line comments are now possible. - Some changes were back‑ported from the REPL module (see the linked blog post). |
| Experimental‑feature tests | Tests for :pack, :cached, :macros, etc., have been moved from the roast suite to the Rakudo repository because they are not part of the language definition. |
| JVM backend | Very little activity in the past year. The JVM backend will no longer be mentioned in releases, and no guarantee is given that ecosystem breakage will be avoided. Call to action: if you care about the JVM backend, please get involved! |
Most notable new features in the default language level
1. Variable‑argument (varargs) C‑functions
Patrick Böker added the infrastructure in MoarVM and Rakudo to call C functions that accept a variable number of arguments via the va_arg convention.
use NativeCall;
sub foo(str, **@ --> int32) is native is symbol('printf') {*}
foo "The answer: %d\n", 42; # → The answer: 42
printf is a classic example of a varargs function.
2. Pseudo‑terminal support
Writing terminal applications is now much simpler thanks to a new pseudo‑terminal implementation (also by Patrick Böker).
The Advent post explains the how and why, and introduces the Anolis terminal‑emulator module.
The feature is still a bit raw; the coming year will see polishing (e.g. a full‑featured terminal‑based debugger).
3. Hash.new / Map.new with named arguments
Previously, calling Hash.new or Map.new with named arguments silently produced an empty container because unexpected named arguments were ignored.
Now, named arguments are interpreted as key/value pairs when they are the only arguments.
dd Hash.new(a => 42, b => 666);
# {:a(42), :b(666)}
dd Map.new(a => 42, b => 666);
# Map.new((:a(42), :b(666)))
4. exits-ok tester subroutine
The Test module now ships with an exits-ok subroutine, making it easy to verify a piece of code’s exit behaviour.
use Test;
exits-ok { exit 1 }, 1;
# ok 1 - Was the exit code 1?
exits-ok { exit }, 1;
# not ok 2 - Was the exit code 1?
exits-ok { 42 }, 0;
# not ok 3 - Code did not exit, no exit value to check
Note: after the Advent version of this post the name was changed from
exit-oktoexits-okto align withdies-okandlives-ok.
Most notable additions to the future language level
Ordered hashes
An implementation of ordered hashes (keys retain insertion order) is now available.
use v6.e.PREVIEW;
my %h is Hash::Ordered = "a".."e" Z=> 1..5;
say %h.keys; # [a b c d e]
say %h.values; # (1 2 3 4 5)
Syntactic sugar may be added later; the above syntax works today.
RakuAST‑only changes (enabled with RAKUDO_RAKUAST=1)
When the environment variable RAKUDO_RAKUAST=1 is set, the following behaviours are active by default once the next language level ships.
| Variable | Purpose |
|---|---|
RAKU_LANGUAGE_VERSION | Indicates the default language level for compiling any Raku source. It does not affect explicit version declarations in the code. |
Example
$ RAKUDO_RAKUAST=1 RAKU_LANGUAGE_VERSION=6.e.PREVIEW raku -e 'say nano'
1766430145418821670
$ RAKUDO_RAKUAST=1 RAKU_LANGUAGE_VERSION=6.e.PREVIEW raku -e 'use v6.d; say nano'
===SORRY!=== Error while compiling: ... (language version mismatch)
Closing thoughts
The Raku ecosystem continues to evolve thanks to the hard work of many contributors.
From the RakuAST bootstrap to Unicode 17 support, from varargs to ordered hashes, the language is steadily gaining power and polish.
If you’re interested in any of the areas above—especially the JVM backend or the upcoming terminal debugger—please consider contributing!
Happy coding, and see you in the next Advent post.
Compile‑time variables
$ raku -e 'say $?SOURCE'
say $?SOURCE
-
?$SOURCE– contains the source of the current compilation unit.
Set the environment variable RAKUDO_OMIT_SOURCE to omit it from the bytecode. -
?$CHECKSUM– a SHA‑1 digest of the source code.
$ RAKUDO_RAKUAST=1 raku -e 'say $?SOURCE'
say $?SOURCE
$ RAKUDO_RAKUAST=1 raku -e 'say $?CHECKSUM'
81892BA38B9BD6930380BD81DB948E4D7A9C14E7
$ RAKUDO_RAKUAST=1 RAKUDO_OMIT_SOURCE=1 raku -e 'say $?SOURCE'
Nil
These additions are intended for the MoarVM runtime debugger and for packagers who need verification.
Localization
Most of the localisation work has been moved out of the Rakudo core into the separate Raku‑L10N project, which has attracted several new contributors. A progress report can be found in habere‑et‑dipertire’s blog post “Hallo, Wêreld!”.
Each localisation ships a “fun” command‑line script (named after a favourite food of the language) and an official one.
| Language | Fun script | Official script | Example |
|---|---|---|---|
| Dutch | dutku | kaas | dutku -e 'zeg "foo"' → foo |
| French | freku | brie | freku -e 'dis "foo"' → foo |
Additional modules (alphabetical)
- App::Rak – 21st‑century
grep/find/ack/ag/rgon steroids. - Cro –
crocommand‑line and web tool. - PDF – Base classes for reading, manipulating, and writing PDF data.
- Red – A Raku ORM.
- REPL – More easily configurable REPL. See also REPL Avalanche.
- Rakuast::Rakudoc::Renderer – Renders RakuDoc v2 to text, HTML, HTML‑Extra, Markdown.
- Slang::Nogil – Allow sigilless scalar variables. See also Allowing for fewer dollars.
- Terminal::LineEditor – Generalised terminal line editing.
- zef – Raku module management tool.
RakuDoc
- RakuDoc v2.0 was completed in December 2024; 2025 was spent implementing it. A compliant renderer is available via the
Rakuast::RakuDoc::Renderdistribution. - Work on a document‑management system called Elucid8 (development preview) began after that.
- From September onward, Damian Conway and Richard Hainsworth designed an enumeration system (originally envisioned for RakuDoc v3.0) that lets any block—paragraph, heading, code snippet, formula, etc.—be enumerated by prefixing the block type with
num. - The RakuDoc specification is now at v2.20.2. The new enumeration spec has not yet been merged to
mainbecause work is still ongoing to getRakuast::RakuDoc::Renderto implement it. - RakuDoc shows promise as a serious documentation markup language and a direct competitor to Markdown.
Ecosystem statistics (2025)
- 508 Raku modules were updated or first released in 2025 (↑ 38 % from 2024’s 367).
- 2 435 distinct modules are installable via
zefby name alone. - 13 843 different module versions are available from the Raku Ecosystem Archive (↑ 12 181 in 2024).
- This works out to ≈ 4.5 module updates per day in 2025 (up from 3.9 /day in 2024).
Modules that caught my eye (alphabetical)
| Module | Description | “See also” |
|---|---|---|
| AI::Gator | AI Generic Assistant with a Tool‑Oriented REPL. | — |
| Air | Build websites the right way. | We’re Walking On The Air |
| Anolis | Terminal emulator. | A Terminal’s Tale |
| ASTQuery | Query and manipulate Raku’s AST (RakuAST) with an expressive syntax. | From ASTs to RakuAST to ASTQuery |
| Cromponent | Create web components with Cro templates. | Cromponent new features |
| DataStar | Raku SDK for the data‑star hyper‑media framework. | Raku To The Stars |
| Draku | Documentation browser for Raku. | — |
| Elucid8::Build | Render RakuDoc sources in multiple languages to a website. | Create a minimal site with Elucid8 |
| Gnome::Gtk4 | Bindings to GNOME’s UI toolkit v4. | Tools for Gnome::Gtk4 |
| LLM::Graph | Efficiently schedule and combine multiple LLM generation steps. | Robust code generation combining grammars and LLMs |
| Math::NumberTheory | Number‑theory functions for Raku. | Numerically 2026 Is Unremarkable Yet Happy |
| SBOM::Raku | Raku‑specific SBOM functionality. | Towards more accountability of Raku programs |
| Test::Coverage | Check test files for sufficient coverage. | Towards more coverage |
| Text::Emoji | Provide :text: → emoji translation. | — |
| Zeco | Ecosystem‑hosting module for Raku. | Grant Report: Raku Ecosystem Final |
Additional modules (alphabetical)
- App::Rak – 21st‑century
grep/find/ack/ag/rgon steroids. - Cro –
crocommand‑line and web tool. - PDF – Base classes for reading, manipulating, and writing PDF data.
- Red – A Raku ORM.
- REPL – More easily configurable REPL. See also REPL Avalanche.
- Rakuast::Rakudoc::Renderer – Renders RakuDoc v2 to text, HTML, HTML‑Extra, Markdown.
- Slang::Nogil – Allow sigilless scalar variables. See also Allowing for fewer dollars.
- Terminal::LineEditor – Generalised terminal line editing.
- zef – Raku module management tool.
Experimental bot on #raku‑dev
A new bot rakkable has appeared on the #raku-dev IRC channel.
It provides an interactive front‑end for the new “rakudo‑xxx” features of App::Rak, which themselves rely on the new Ecosystem::Cache module. This makes it easy to search across the most‑current versions of modules in the ecosystem.
Example query
“Look in the Raku ecosystem for code mentioned in
providessections that contain the stringLock.newand also have the string$!lock.”
rakkable: eco-provides Lock.new --and=$!lock
rakkable – Running:
eco-provides Lock.new --and=$!lock, please be patient!
rakkable – Found 30 lines in 25 files (24 distributions):
General Announcements
- The bot currently lives on #raku‑dev, but you can also call it directly without the
rakkable:prefix. - Remember to use the
#rakulangtag when posting about the Raku Programming Language!
Raku.org Website Revamp
The Raku website has been completely renewed, thanks to Steve Roe. It is now:
- Dog‑fooded and hyper‑enhanced with htmx.
- Hosted on Åir.
- Built with cro.
- Written in Raku.
- Styled by picocss.
Documentation Improvements
The Raku Documentation Project has welcomed many new collaborators. Highlights:
- CI testing for the documentation is now ~4× faster thanks to the RakuAST RakuDoc parser.
Social Media Shift
- I (the author) have stopped using X (formerly Twitter). It was painful, but Bluesky and Mastodon are great alternatives, and many important community members have already moved there.
- If you haven’t made the switch yet, consider doing so—for yourself and for the people you follow.
Conferences & Summits
- Unfortunately, a Raku Conference (in‑person or online) could not be organized this year. We hope for better times next year.
- A second Raku Core Summit is planned for 2025.
Rakudo Weekly News
The Rakudo Weekly News is now being produced by Steve Roe (second half of 2025 and beyond). New features include code gists—kudos to the team!
Problem‑Solving Repository Activity (2025)
The repository has received 36 new issues. Your feedback is welcome, especially on topics such as:
- Further improvements