One year of Roto, a compiled scripting language for Rust
Recorded: May 31, 2026, 8:04 a.m.
| Original | Summarized |
One year of Roto, a compiled scripting language for Rust Home Sign in Roto One year of Roto, a compiled scripting language for Rust Team NLnet Labs 28 May 2026 Share Roto's logo By Terts DiepraamAlmost exactly one year ago, we announced Roto, a JIT-compiled embedded scripting language for Rust applications. A lot has happened since then that we'd like to tell you about!💡Along with this post, we published Roto v0.11.0! You can check out the changelog for that version on Codeberg.Let's start with a quick recap: Roto is a scripting language that integrates tightly with Rust. In contrast with other scripting languages, it is statically typed and JIT-compiled. This makes it faster than other scripting languages in many scenarios. We are building Roto for our own Rotonda project, but it is flexible enough to be used by other applications.Here is a quick summary of the last year:there have been 6 new versions of Roto, including many new features, bug fixes and other changes;we gave talks on Roto at EuroRust and FOSDEM;Roto's got a logo now;we improved the manual extensively with the help of a technical writer;some external projects adopted Roto as their scripting language;we moved Roto development to Codeberg.As you can see, it's been a busy and exciting year for Roto!Language ChangesWe've added a lot of new features to the language, making it much more complete than it was when we first announced it. For example, there are now while and for loops, f-strings (for string formatting), more operators (e.g. %), enums, compound assignment operators (e.g. +=), global const bindings, and generic parameters on types.One of the biggest additions has been the List type. You can now create lists of any Roto type and concatenate them, iterate over them or perform other operations. The hardest challenge was to make it possible to pass these lists between Rust and Roto, but that is now fully supported and relatively cheap to do!We also changed the syntax to resemble Rust more. Roto now uses fn instead of function and // for comments instead of #. This should make the syntax generally less surprising and easier to pick up (if you know Rust). Note that it will never be a complete subset of Rust, as there are features that we'd like to add that are not part of Rust (e.g. string formatting & filters).const DUTCH_CITIES: List[String] = [ fn is_dutch_location(x: String) -> String { // Register the AddrRange type into the runtime with a docstring impl Val<AddrRange> { Sign up for more like this. Enter your email Dutch Internet pioneer Jaap Akkerhuis Knighted for Exceptional Contribution to Society Jaap Akkerhuis was awarded Knight of the Order of the Dutch Lion on April 24, 2026. It is the highest civilian order of chivalry in the Netherlands, conferred on persons who have rendered outstanding service to society. 24 Apr 2026 The Winter 2026 newsletter Welcome to the Winter edition of our quarterly newsletter "Of Trees and Tries"! Snow and ice have not stopped us. Read on to learn about our adventures at FOSDEM and how Cascade is progressing. Feedback is welcome, either at ICANN85 (Maarten), IETF125 (Benno, Willem) or over at our 03 Mar 2026 Smaller, faster: NSD's refactored RDATA storage and compile time memory reduction options On the 4th of December, NSD 4.14.0 was released with refactored RDATA storage, reducing the memory footprint of NSD. In this post we'll show the effect of this refactoring, what sort of zones benefit the most from it, and also show that the effect is further 24 Feb 2026 The NLnet Labs Blog © 2026 Powered by Ghost |
Roto is a JIT-compiled embedded scripting language designed for use with Rust applications, and the authors have celebrated one year since its announcement, noting significant development and community engagement during this period. The project has released six new versions, incorporating numerous features, bug fixes, and other changes. Roto is distinguished by its tight integration with Rust, as it is statically typed and JIT-compiled, which contributes to its superior performance in many scenarios compared to other scripting languages. The development trajectory for Roto involved publishing materials, giving talks at conferences like EuroRust and FOSDEM, and improving its documentation through collaboration with a technical writer. The language has undergone substantial evolution, incorporating many new language features to enhance its completeness. These additions include support for while and for loops, f-strings for string formatting, expanded operators such as percent signs and compound assignment operators, enumerated types, global constant bindings, and generic parameters for types. A major enhancement is the introduction of the List type, which allows users to create lists of any Roto type and perform operations like concatenation and iteration over them. The challenge of seamlessly passing these lists between Rust and Roto has been successfully addressed, resulting in robust support for this interoperation. Furthermore, the syntax has been updated to align more closely with Rust conventions, utilizing fn instead of the traditional function keyword and // for comments, aiming to make the syntax more intuitive for those familiar with Rust. A critical aspect of Roto's functionality is its robust integration with the Rust ecosystem, achieved primarily through the mechanism for registering Rust types, functions, and constants within the Roto script. The innovation here lies in the library macro which facilitates the bulk registration of types and functions. This mechanism streamlines the process, providing an alternative to earlier methods that required explicit registration of types and methods alongside the runtime parameter. The registering of functions has also been modernized to resemble standard Rust programming practices, allowing the use of impl blocks, docstrings, and self-referential mechanisms, which supports the construction of a module tree for registered functions. The project has also seen recognition and practical adoption. The team has developed a distinctive logo and presented Roto at EuroRust 2025 and FOSDEM 2026, providing introductions to the language and its underlying design. Notably, Roto has been adopted by external projects, such as Iocaine, a scriptable proxy that defends web servers against AI crawlers; this adoption demonstrates the practical viability of Roto's performance. The work of external contributors, such as Algernon, who provided feedback to the developers, has been crucial in shaping Roto's current form. Looking forward, the developers recognize that Roto is still maturing, and there are several critical features yet to be implemented. These missing features include support for hashmaps, user-defined state, generic functions, and further investment in tooling, such as a formatter and a Language Server Protocol, in addition to existing syntax highlighting. The project remains committed to ongoing development, inviting community feedback regarding desired features and encouraging exploration through the provided manual, repository, and examples. |