0.67.x✎

A map can describe a filesystem.

0.67.x2026-09-16

FeatureChangeBugfixEditorDocs

A map can describe a filesystem.

Releases

  1. 0.67.4The grid stops being drawn over the graph.New2026-09-16
  2. 0.67.3Vector3 works in Lune, and says what it needs.New2026-09-16
  3. 0.67.0A map can describe a filesystem.New2026-09-16

Warning

Worth knowing before you upgrade.
  • 0.67.4The documentation has two renderers — one writes the published site, the other draws the same pages in the editor — and a change reaching only one of them has now shipped twice. They are checked against each other on every run.
  • 0.67.3TweenInfo and Tween stay out of a Lune graph. Lune does not implement them, and the list is read from the module's own source rather than kept by hand.

Added

  • 0.67.3Roblox's datatypes are offered to a Lune graph — 101 of the 108 Engine Types nodes, which is every one @lune/roblox implements. A datatype is not the engine: Vector3 is a table with a new on it, and hiding the node hid something that works.
  • 0.67.3A datatype node says what it needs, and the Inspector gives it. One press declares @lune/roblox and pulls the datatype off it, which are the two things that have to be true.
  • 0.67.3A page about compiling for Lune, at Compiling and nodemaps for Lune: what a filesystem map is for, what it checks, and where a Lune program's dependencies come from.
  • 0.67.0A map says which runtime it describes. A DataModel map is what one has always been: services, and a default.project.json for Rojo. A filesystem map is directories and files, which is what a Lune program actually has. A new map starts as the kind the project needs.
  • 0.67.0A filesystem map is checked against Luau's own require rules. A file beside a directory of the same name is an error, because require("./foo") cannot mean both foo.luau and foo/init.luau and the language refuses an ambiguous path rather than picking one. Two files differing only by extension are the same collision one step along.
  • 0.67.0A file's name carries no extension. Typing one is a warning saying so, and what to call it instead — the extension follows from the node being a file, and writing it into the name is how you get main.luau.luau.

Changed

  • 0.67.3Building, and node maps is now Compiling and nodemaps for Roblox — it was only unambiguous while there was one runtime. Its address has not moved.
  • 0.67.3A borrowed datatype carries two tags, not one averaged one: Roblox, because it is Roblox's, and @lune/roblox, because that is the require Lune needs for it. A single Luau tag said the base language has Vector3, and it does not. The second tag is the specifier itself — it is what has to be declared, and the text that declares it. In the node menu the tag is the one the graph you are in needs.
  • 0.67.0A filesystem map writes no project file. Rojo's answers a question a Lune program does not ask, so what compiling one does is check that the layout holds together — the part Rojo was doing incidentally, and the only part that transfers.
  • 0.67.0Every map written before this is a DataModel map and stays one without being touched.

Fixed

  • 0.67.4The canvas grid was painted on top of every node, in the graph editor and in Node Design's logic canvas. The layer everything in the graph is drawn inside carried no stacking order of its own, and an element without one sits below every neighbour that has one — which the grid and the graph's name both do. At 5% to 14% alpha it read as texture rather than as a mistake, and it had been there since the first version. Node previews were never affected.
  • 0.67.4The confirm button on a delete no longer prints its text in its own colour. The filled destructive button took its fill from one rule and its text from another, and both resolved to the same red: the word Delete was still in the button, in exactly the colour of the button. Reaching for it also turned it accent-blue, because the hover rule outranked the one giving it a red fill.
  • 0.67.3A Roblox datatype in a Lune graph no longer compiles to something that fails at run time. It wrote Vector3.new(...) with no require, and in Lune that indexes nil. It is an error now, naming the module and the member that fix it.
  • 0.67.0A stylesheet check was reading a glob in a placeholder as the start of a comment, and swallowing the markup after it — so it could report a live rule as dead. It reads string literals as strings now.