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:

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 ✍️