Ecosystem modules

Modules that work today

Partial

The ecosystem modules verified to run under Raku++ — same code, same output as Rakudo — with what each depends on.

Interpreter Native (--exe)

Raku++ runs real ecosystem modules from raku.land, unmodified. The measure here is the one zef itself applies: every file in a distribution's t/ directory is run at install time, and a module counts as working only when Raku++ passes every test file Rakudo passes, on the same pinned sources. Not an API probe — the distribution's own suite.

Of the 59 distributions in the battery, 18 clear that bar today.

These examples can't run in the browser playground — the WebAssembly engine has no module installation — so, like the IO pages, everything here is shown with output verified against the real interpreter and Rakudo at build time.

Passes its own test suite #

Test files, not assertions: a file counts only when every assertion in it passes. The sibling pages show verified examples for many of these.

ModuleTest filesDepends on
Digest::SHA256::Native1 / 8 *LibraryMake
Encode7 / 7
File::Directory::Tree1 / 1
File::Find1 / 1
File::Temp3 / 3
HTTP::Status3 / 3
IO::Socket::SSL1 / 1OpenSSL
LibraryMake1 / 1File::Which, Shell::Command
OO::Monitors5 / 5
Sparrow64 / 4Data::Dump, File::Directory::Tree, Hash::Merge, JSON::Fast, Terminal::ANSIColor, YAMLish
Sparrowdo1 / 1Sparrow6
Terminal::ANSI8 / 8OO::Monitors
Terminal::ANSIColor1 / 1
Test::When1 / 2 *
Text::Utils1 / 18 *AlgorithmsIT, File::Temp, Font::AFM
Trap2 / 2
URI::Encode2 / 2
UUID1 / 1

A module's dependencies load through the same machinery, so a row like Sparrow6 means its whole tree — six other distributions — loads and runs well enough for Sparrow6's own suite. Several of those dependencies have gaps in their suites, and appear in the next table on their own account.

\* Rakudo does not pass every file here either, usually for want of a native library or a network. Raku++ matches it file for file; the denominator is what the distribution ships, not what either engine manages.

Partly working #

These load and do real work — several are only one or two files short — but at least one file that passes under Rakudo does not yet pass here.

ModuleRaku++RakudoDepends on
Abbreviations2 / 99 / 9
AttrX::Mooish9 / 3535 / 35
Base641 / 22 / 2
Color1 / 88 / 8
Config0 / 99 / 9Hash::Merge, IO::Glob, IO::Path::XDG, Log
Cro::Core1 / 99 / 9
Cro::HTTP1 / 294 / 29Base64, Cro::Core, Cro::TLS, Crypt::Random, DateTime::Parse, HTTP::HPACK, IO::Path::ChildSecure, IO::Socket::Async::SSL, JSON::Fast, JSON::JWT, Log::Timeline, OO::Monitors
DBIish2 / 3714 / 37
Data::Dump1 / 99 / 9
Date::Calendar::Strftime1 / 43 / 4Date::Names
Date::Names4 / 1919 / 19Abbreviations
DateTime::Format2 / 32 / 3
Digest1 / 44 / 4
Digest::HMAC1 / 22 / 2
File::Which4 / 66 / 6
HTTP::Tiny2 / 1010 / 10
HTTP::UserAgent2 / 278 / 27DateTime::Parse, Encode, File::Temp, HTTP::Status, IO::Socket::SSL:ver:<0.0.4+>, MIME::Base64, URI
Hash::Merge1 / 33 / 3
IO::Glob1 / 87 / 8Test, Test::META
JSON::Fast5 / 1413 / 14
JSON::Tiny5 / 65 / 6
LWP::Simple7 / 1818 / 18MIME::Base64, URI
Log3 / 44 / 4
Log::Async3 / 1717 / 17Terminal::ANSI
MIME::Base643 / 44 / 4
Method::Also0 / 11 / 1
NativeHelpers::Array2 / 32 / 3
NativeHelpers::Blob1 / 44 / 4
OpenSSL6 / 77 / 7
Shell::Command0 / 11 / 1File::Find
Test::Output0 / 22 / 2
URI3 / 1414 / 14
XML6 / 1515 / 15
YAMLish1 / 55 / 5MIME::Base64

Not measurable here #

Neither engine can run these on this machine, so they say nothing either way — a missing C library, a missing toolchain, or no test files at all:

Found while writing these pages #

Writing verified examples is itself a test, and it surfaced deeper gaps in five modules whose probed APIs pass: JSON::Tiny's from-json (and its string escaping), XML's attribute parsing and .elements, UUID's string formatting, Method::Also's is also aliases, and URI::Encode's uri_decode. Each reduced to a general interpreter bug — sigspace quantifiers, the inline :ignoremark adverb, \cNN escapes, UTF-16 code units, class assertions with quote members, rule parameter defaults, list-assignment through @-attr accessors, big-integer radix lists, list-valued named captures, and method-trait dispatch with a workable .HOW — and all of them are fixed; the richer examples are back on the sibling pages, verified byte-identical on both engines.

What is still blocking #

The largest remaining gaps, counted in test files Rakudo passes and Raku++ does not: AttrX::Mooish (26), Date::Names (15), Log::Async (14), DBIish (12), URI and LWP::Simple (11 each), XML and Config (9 each). The Cro::HTTP stack and HTTP::UserAgent are further out — both exercise the OpenSSL binding heavily. Each is tracked with a reduced test case; this page updates as they land.

Try one #

A taste of what "just works" looks like — JSON round-tripping through JSON::Fast:

use JSON::Fast;
my %data = from-json('{"name":"Raku++","versions":[1,2]}');
say %data<name>;
say %data<versions>[*-1];
say to-json(%data, :sorted-keys, :!pretty);
Output
Raku++
2
{"name":"Raku++","versions":[1,2]}