27 August 2026
Summer's over:
take out your notebooks
(or Loreline)
Between two cold drinks sipped (a little too) close to the summer sun, the groundwork on Loreline kept moving.
Version 0.10.0 has just been released, bringing several new things: beats that take arguments, the arrival of PHP among the supported platforms (so 2010), a 100% GDScript export for Godot, and various fixes under the hood.
Beats that take arguments
This was the feature announced at the end of my last post, and it has now landed. Beats can receive parameters, including with default values.
character sarah
name: Sarah
character james
name: James
beat QuietMorning
The morning looks quiet, the regulars trickle in.
Serve(sarah.name, "a latte")
Serve(james.name, "a green tea", true)
beat Serve(customer, drink, takeaway = false)
$customer walks up to the counter.
barista: Hi $customer! I'll get you $drink, as usual?
if takeaway
$customer holds out their reusable cup.
barista: To go, got it!
$customer heads right out, steaming cup in hand.
else
$customer settles down at their usual table.
In practice, arguments are a way to make your story more modular. Beats can serve as templates for situations that look alike or come back at several points in the narrative.
And dynamic beat calls
You can go further and call a beat whose name is determined at runtime, by passing a variable:
state
drinkOfTheDay: Latte
beat EnterCafe
The coffee shop counter, on a Monday morning.
barista: Hi! Want me to make you the drink of the day?
// Dynamically calls the `PrepareLatte` beat
beat("Prepare" + drinkOfTheDay, "hazelnut")
barista: Enjoy!
beat PrepareLatte(flavor)
barista: One $flavor latte, coming up.
This kind of building block opens up new possibilities: branching built on the fly, calling more specific beats depending on the situation...
The writer's guide has been updated with a section dedicated to parameters and dynamic calls.
The elephant in the room: PHP
Loreline can now run stories in PHP, compatible with PHP 8.1 and later.
It might seem unexpected, but PHP still powers a lot of websites, WordPress being a prime example, and hosting a PHP page on a shared server is about as easy as it gets. The dedicated guide shows how to load a .lor file, handle dialogues, choices and the end of the script, and serve the whole thing as a plain web page. Maybe this will spark some new experiments...
This target too is made possible by Loreline's Haxe architecture. The same source code powers every platform.
Godot: a 100% GDScript export
Until now, the Godot integration relied on a gdextension bridging Loreline's C++ export with Godot's GDScript. It works well, but it means native binaries to manage for each platform.
There is now a second option: an export written entirely in GDScript. It wasn't strictly necessary, but here again, by combining the power of Haxe with Reflaxe and Reflaxe.GDScript, Loreline's source code could be transpiled to pure GDScript. This target passes the full unit test suite, like every other one, so it is considered usable, although in practice the native extension remains the recommended option.
Both approaches coexist: the native gdextension for maximum performance, the GDScript export for maximum simplicity and portability. See the Godot guide.
Word wrapping
It was a recurring request: when writing interactive fiction, lines of text tend to grow long quickly. Word wrapping is now available in the Playground as well as in Loreline Writer.
Under the hood
A few quieter changes, but useful ones:
-
Arrays and key-value objects can now be passed between the host application and the runtime through the C API and the Godot extension, which makes exchanging structured data easier.
-
Several UTF-8 related optimizations were made on targets where random access into strings is expensive, for better performance.
-
Various parsing fixes, notably around trailing conditions, chained accesses and chained calls.
What's next?
Loreline keeps moving forward at its own pace, guided by usage feedback. The list of platforms has grown once more, the language is gaining expressiveness, and the tooling keeps getting more solid.
As always, if you try Loreline and something is missing or gets in your way, don't hesitate to say so. Nothing helps more to prioritize what comes next.
That's all for this time...
...and with that, I wish you a smooth return from the summer break, and above all, happy writing ✍️