As announced in our MiniScript Road Map for 2026, the big push this year is working on MiniScript version 2.0. This first major update to the MiniScript language will be substantially faster than MiniScript 1.x, and include some important new language features too.
I'm pleased to say it's going very well -- we have MiniScript 2 written in both C# and C++ now (in a more clever way than before), and it's right on schedule, or even ahead.
If you are impatient and want to download MiniScript 2 immediately, please do! You can find the latest releases here.
Improved REPL
The first thing you'll notice when you run MiniScript 2 interactively (i.e., without giving it a script to run) is a much fancier user experience in the REPL (read-eval-print loop).
There are two main differences from the 1.x REPL:
Every input goes onto an
_inlist (as a string); every result goes onto an_outlist (as whatever data type the result was). You can refer to these in your code, which is often quite convenient when you want to build on a previous result, write the whole input history out to a file, etc.Terminal control codes are used to display less-relevant text (like the initial version info and input/output labels) in subdued text, your inputs as ordinary text, and outputs as bold text. This helps you focus on the most important info (and is also quite pretty!).
New error Data Type
Error handling in MiniScript 1.x was rather weak; mostly it involved functions returning something unexpected when things went wrong, like null or a string error message instead of the usual result map.
After a lot of community discussion (and yes, we did consider exceptions and try/catch), we settled on an approach to error handling that I think is very elegant. There is a new error data type, equal in status to number, string, list, map, etc. Error values have some special behaviors: trying to use an error value in almost any way will terminate your program, but you can inspect it to see what the error is, where in the code it occurred, etc.
Read more about this (and other features) in the Language Changes doc.
Frozen Maps & Lists
Another language enhancement in 2.0 is frozen lists and maps. Lists and maps are normally "mutable," which means they can be changed in place; if you have two references to the same list, and you change the list via one of them, you see the change in the other.
_in[17]: a = [1,2,3]
_in[18]: b = a
_in[19]: a[0] = 999
_in[20]: b
_out[20]: [999, 2, 3]
This is often exactly what you want. But sometimes you want to build a list or map that can't be changed; i.e. is "immutable". In Python, they have a whole other data type for an immutable list (the "tuple"), with different syntax, just for this purpose.
In MiniScript 2, you can instead freeze a list or map. A frozen list or map is immutable and can't be changed. Some intrinsic APIs return frozen maps now, like version for example.
_in[21]: version
_out[21]: {"miniscript": "2.0", "buildDate": "2026-06-17", "platform":
"macOS 13.6.4", "host": "2.0 Preview", "hostName": "Command-Line (Unix)",
"hostInfo": "https://miniscript.org/cmdline/"}
_in[22]: version.host = "2.1"
Runtime Error: Attempt to modify a frozen map
MiniScript will also use a frozen copy of a list or map when you use it as a map key, since mutating a map key is very bad juju.
This is one of those refinements that new users probably won't even notice, but for serious MiniScript users, it will save a lot of headaches.
Function Notes & info
Another nifty new feature of MiniScript two is function notes. If the first statement in a function evaluates to a constant string, then this string is stored on the function, and can be accessed via the new info intrinsic, like so:
_in[4]: f = function(x,y)
...: "Return the magnitude of vector x,y"
...: return sqrt(x^2 + y^2)
...: end function
_in[7]: info(@f)
_out[7]: {"type": "funcRef", "name": "f", "note": "Return the magnitude
of vector x,y", "params": [{"name": "x", "default": null}, {"name": "y",
"default": null}], "closure": 1}
_in[10]: info(@f).note
_out[10]: Return the magnitude of vector x,y
This provides a standard, convenient place to give a little hint or reminder to users about what the function does. (Note to self: I'll need to go through all the /sys disk modules and add function notes!)
Improved Performance
I already discussed performance in our March update, so I won't repeat that here. Suffice to say, MiniScript 2.0 is many times faster than 1.x, comparable to Python, and we still have plenty of opportunities for pushing it further.
Right On Track
The schedule from December laid out these milestones:
| Date | Milestone |
|---|---|
| 2026 Q1 | MS2 compiles & runs a subset of MiniScript |
| 2026 Q2 | MS2 feature complete (whole language implemented) |
| 2026 Q3 | MS2 testing, refinement, & polish |
| 2026 Q4 | MS2 released 🥳 |
We're at the end of Q2 now, and the first two steps above are done. A lot of stuff in the "testing, refinement, & polish" category has already been done too (for example, the terminal colors/styles and in/out value lists in the REPL). So we're actually a little ahead of schedule. It's time now for some serious testing -- but we're also going to start in on Raylib bindings within the next month, which wasn't expected until Q2.
Please Help!
Did I mention that it's now time for some serious testing? That means you! I will do what I can, but I can't do it all by myself.
(Indeed, we wouldn't be where we are today without some very helpful testing of Windows and Linux builds by Discord users BibleClinger, minerobber, shellrider, and MoTrix -- thanks guys!)
So please download the preview release for your platform, and take it for a spin. Throw some of your older scripts at it. Write some new scripts. Explore the new language features. Try to break it! This is a large amount of brand new code, much of it quite complex, so there are almost certainly bugs to be found.
When you find a problem, either bring it up on Discord (in the #miniscript-2 channel), or file an issue on GitHub. Do the same if you have some suggestion or feature request -- we're mostly feature-frozen at this point, but it's not too late for small refinements, especially if they bring important quality-of-life improvements.
I hope you're excited as I am for this major milestone. MiniScript 2 unlocks all the other cool stuff in the Road Map. Let's go!!


Top comments (0)