Raku 2025 Review

Published: (January 1, 2026 at 08:57 AM EST)
8 min read
Source: Dev.to

Source: Dev.to

Technical summary

  • Rakudo commits: ~1 650 (MoarVM, NQP, Rakudo, docs) – about 20 % less than in 2024.

  • All repositories now use main as the default branch (instead of master).

  • 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

AreaWhat happened?
MoarVM Unicode toolsGeoffrey 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 runnersPatrick Böker added new runners that speed up CLI‑script execution and enable Windows‑native script runs.
Continuous‑integrationCI now produces far fewer false‑positives, easing developers’ lives.
Reproducible buildsThanks 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 testsTests 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 backendVery 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-ok to exits-ok to align with dies-ok and lives-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.

VariablePurpose
RAKU_LANGUAGE_VERSIONIndicates 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.

LanguageFun scriptOfficial scriptExample
Dutchdutkukaasdutku -e 'zeg "foo"'foo
Frenchfrekubriefreku -e 'dis "foo"'foo

Additional modules (alphabetical)

  • App::Rak – 21st‑century grep/find/ack/ag/rg on steroids.
  • Crocro command‑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::Render distribution.
  • 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 main because work is still ongoing to get Rakuast::RakuDoc::Render to 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 zef by 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)

ModuleDescription“See also”
AI::GatorAI Generic Assistant with a Tool‑Oriented REPL.
AirBuild websites the right way.We’re Walking On The Air
AnolisTerminal emulator.A Terminal’s Tale
ASTQueryQuery and manipulate Raku’s AST (RakuAST) with an expressive syntax.From ASTs to RakuAST to ASTQuery
CromponentCreate web components with Cro templates.Cromponent new features
DataStarRaku SDK for the data‑star hyper‑media framework.Raku To The Stars
DrakuDocumentation browser for Raku.
Elucid8::BuildRender RakuDoc sources in multiple languages to a website.Create a minimal site with Elucid8
Gnome::Gtk4Bindings to GNOME’s UI toolkit v4.Tools for Gnome::Gtk4
LLM::GraphEfficiently schedule and combine multiple LLM generation steps.Robust code generation combining grammars and LLMs
Math::NumberTheoryNumber‑theory functions for Raku.Numerically 2026 Is Unremarkable Yet Happy
SBOM::RakuRaku‑specific SBOM functionality.Towards more accountability of Raku programs
Test::CoverageCheck test files for sufficient coverage.Towards more coverage
Text::EmojiProvide :text: → emoji translation.
ZecoEcosystem‑hosting module for Raku.Grant Report: Raku Ecosystem Final

Additional modules (alphabetical)

  • App::Rak – 21st‑century grep/find/ack/ag/rg on steroids.
  • Crocro command‑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 provides sections that contain the string Lock.new and 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 #rakulang tag 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
Back to Blog

Related posts

Read more »

The first four

Follow‑up on Raku Resolutionshttps://dev.to/lizmat/raku-resolutions-17g7 The first meeting was held at the suggested time and date: 17 January 2026 at 19:00 UT...