Post Image: Carolyn Emerick, CC BY-SA 3.0 https://creativecommons.org/licenses/by-sa/3.0, via Wikimedia Commons
Matt’s Corner
Matt Doughty has served up a double helping of Selkie this week. This is a TUI (Terminal User Interface) module written in Raku that provides a simple, declarative way to roll your own TUI app in Raku. Please do check it out – I look forward to seeing a crop of Raku TUIs to feature in the weekly.
and
The pitch: you build a widget tree declaratively, mutate state, and the framework handles dirty tracking, rendering, focus cycling, resize, and teardown. Native performance without the pain.
Sizing uses a fixed/percent/flex model similar to CSS flexbox. There’s an optional re-frame style reactive store if you want centralized state with event dispatch, effect handlers, and path subscriptions.
Ships with a decent widget set out of the box: text inputs (single and multi-line), scroll views, list views, card lists, tables with sortable columns, tab bars, modals, progress bars, a command palette, file browser, image display via pixel blitter, and theming throughout.
Seven example apps in the repo covering everything from a minimal counter to a tabbed dashboard.
Also includes a testing toolkit (keystroke synthesis, Supply observation, store assertions, snapshot testing against a headless notcurses instance) so you can test widget behaviour without a terminal.
Richard’s Corner
Richard Hainsworth says
I am really pleased to let you know that finally Damian Conway and I have significantly upgraded the specification of RakuDoc V2, so much so that I am calling it informally v2+. Elizabeth Mattijsen has added extra directives into RakuAST to accommodate these upgrades. I have upgraded Rakuast::RakuDoc::Render so that it now handles the whole RakuDoc V2 specification, and bumped the module version to v1.0.0.
There is a docker image (https://docker.io/finanalyst/browser-editor) that will serve localhost html to a browser and can be used to edit and evaluate RakuDoc. There is also a docker image (https://docker.io/finanalyst/rakudoc_browser) that will do the same for a web-based version.
For members of the Raku community, I have the web based version running at https://raku.finanalyst.org/rakudoc_editor/ This URL can be shared with the Raku community in the weekly, but not more widely.
I encourage anyone who is interested in Rakudoc to test drive the great new enumeration features at the links above. Awesome work by Richard, Damian and Elizabeth.
TPRC Submit your Talk
Don’t Miss the Perl and Raku Conference 2026 in Greenville, SC
SAVE THE DATES! Friday through Sunday, June 26-28
Registration is open: https://tprc.us/tprc-2026-gsp
Weekly Challenge
Weekly Challenge #370 is available for your joy.
Raku Tips ‘n Tricks
This week, Anton Oks has proposed that we focus on some cool Raku from over 200 examples featured on https://rosettacode.org/wiki/Category:Raku. This is his contribution to get the ball rolling (disclosure he is the author of this entry)…
#| Recursive, parallel, random pivot, single-pass, quicksort implementation
multi quicksort(\a where a.elems < 2) { a }
multi quicksort(\a, \pivot = a.pick) {
my %prt{Order} is default([]) = a.classify: * cmp pivot;
my Promise $less = start { samewith(%prt{Less}) }
my $more = samewith(%prt{More});
await $less andthen |$less.result, |%prt{Same}, |$more;
}
This code shows off a cool set of Raku features:
- function documentation:
#| - multi dispatch with arguments, defaults and calculations in arguments (
.pick) - sigil-lessness as in
\a - method calling as in
a.elemsora.pick is default()in Hash creation, here using an empty array[]- strong typing as in
%prt{Order}ormy Promise $less .classifyfor splitting array using mightycmp- concurrency using
Promiseandawait - recursion with
samewith()– factoring out the actual function name - chaining with
andthen - list flattening and combining
Very nice – thanks to Anton for creating some aspirational[*] Raku.
Your contribution is welcome, please make a gist and share via the #raku channel on IRC or Discord.
Comments About Raku
- I would like to get more #rakulang .. content on my mastodon, any account I should follow? by 4zv4l
- Raku evaluate
.WHATand(.WHAT)both as(Any)by psychoslave
New Doc & Web Pull Requests
- Update CONTRIBUTING.md – added missing header for Building the documentation section Zoltan Ness
- Update control.rakudoc to fix take-rw link target Zoltan Ness
- Update community.rakudoc Wenzel P. P. Peppmeyer
New Raku Modules
- Chatnik by Anton Antonov
Updated Raku Modules
- LLM::Functions, JavaScript::D3, DSL::Examples, LLM::Prompts by Anton Antonov
- rawstr4c by ccmywish
- Terminal::Capabilities by Geoffrey Broadwell
- Rainbow by Patrick Böker
- Geo::Basic by Brian Duggan
- Term::Choose::Util, Term::Choose by Matthäus Kiem
- OpenSSL by Various Artistes
- shorten-sub-commands, Locale::Dates by Elizabeth Mattijsen
- Rakuast::RakuDoc::Render by Richard Hainsworth
- Notcurses::Native, CRoaring, Vips::Native, Selkie, Roaring::Tags, MCP::Server, Tokenizers by Matt Doughty
Winding down
[*] Aspirational. Just to clarify, it is not that we should all aspire to that style, but that if this is a style you want – a taut, compact routine that engages all facets of your language, then Raku excels. Other coding styles are available in Raku.
Anton shared these words with me:
… I believe no other language can do that so short and still readable. 😉 Raku is so much fun to work with – I do not understand why it is not much more popular …
Please keep staying safe and healthy, and keep up the good work! Even after week 64 of hopefully only 209.
~librasteve
P.S. Here is why I think Raku is so much fun…
Asking “Why wasn’t Shakespeare a German?” can be reframed as a question about language: why did his genius emerge in English rather than in German? One answer lies in the remarkable flexibility and absorptive quality of English during the late Renaissance. By Shakespeare’s time, English had already drawn heavily from Latin, French, and other languages, creating a hybrid vocabulary that allowed for nuance, invention, and wordplay. Shakespeare could shift easily between high and low registers, coin new expressions, and layer meanings in ways that felt natural within this fluid linguistic system.
German, by contrast—though rich and expressive—was less standardized in the 16th century and often more structurally rigid. Its grammatical complexity and regional fragmentation made it harder to achieve the same kind of rapid, playful experimentation that Shakespeare employed. Where English encouraged improvisation and borrowing, German tended to preserve clearer boundaries within its forms, limiting linguistic elasticity. Shakespeare’s writing thrives on ambiguity, puns, and tonal shifts, and these qualities depended on a language as adaptable as English.
