backupRoswaal has moved to roswaal.app. These pages are a backup copy.Go to roswaal.app

0.19.x✎

A moved graph takes its generated file with it, and the tree says which half is which.

0.19.x2026-09-08

FeatureChangeBugfix

A moved graph takes its generated file with it, and the tree says which half is which.

Releases

  1. 0.19.5Build a table type from a list of fields.New2026-09-08
  2. 0.19.4Declare a type after the value it describes.New2026-09-08
  3. 0.19.3Define Type is called Declare Type.New2026-09-08
  4. 0.19.2Declare Luau types, and make a variable without leaving the node.New2026-09-08
  5. 0.19.1Declare a variable where you build its value.New2026-09-08
  6. 0.19.0A moved graph takes its generated file with it, and the tree says which half is which.New2026-09-08

Warning

Worth knowing before you upgrade.
  • 0.19.4export type is only legal at the top level of a module, so an exported Declare Type inside a branch, loop or function is refused. A plain one — Export unticked — is fine there and stays scoped to that block.
  • 0.19.4Both nodes share one set of type names; declaring the same name twice is an error whichever pair of nodes did it.
  • 0.19.2A type name is reserved against variables and locals. Luau keeps types and values in separate namespaces and would allow both; a reader would not thank you for it.
  • 0.19.1Initialize Variable has to sit in the main flow. Inside a branch, a loop or a function the declaration would go out of scope and every later mention would read as an empty global, so it is refused with an error naming Set Variable as the alternative. Reading the variable before the node that declares it is refused for the same reason.
  • 0.19.1Declare Local's Name is typed in, not wired. It becomes an identifier in the generated file, which is decided before anything runs.
  • 0.19.0Only a file whose own header names the graph that just moved is removed. A generated file with no graph behind it at all is still reported rather than deleted — that is the stale line in the compile panel, and it still asks first.

Added

  • 0.19.5Declare Type at Top can be a list of fields instead of typed-out Luau — a name and a type per row, giving { movementSpeed: number, hp: number }. Field types are free text with suggestions, because a closed list could not offer Instance? or { Player } or a type declared in the same file.
  • 0.19.5Written out as Luau is still there, as the other half of a Shape dropdown. It is what says the things a list of pairs cannot — a union, a function type, a generic.
  • 0.19.4Declare Type sits in the execution flow and names the type of a value wired into it: export type Tuning = typeof(Tuning). It goes where you put it, which is the point — a type built from typeof has to come after the thing it is the type of, and Luau reads a file in order. The identifier comes from the wire, so renaming the value later cannot leave the type pointing at a name that is gone.
  • 0.19.2Define Type. Writes export type Name = … at the top of the generated file, above the variables. Untick Export and it stays inside the module. The definition is written as Luau — a type is not built out of values, so { speed: number } describes something no wire can carry.
  • 0.19.2Type Of, Roblox's typeof. A Vector3 answers "Vector3" where Lua's type only says "userdata". For typeof(x) inside a type, write it in a Define Type definition — that one is a type expression, not a call.
  • 0.19.2New… beside the variable picker on Get, Set and Initialize Variable. Initialize Variable could not be used at all until you had been to the Variables panel and made one first.
  • 0.19.1Initialize Variable. Gives a script variable its first value and is its declaration, so there is no empty one above it — local Tuning = { … } rather than local Tuning = {} followed by an assignment. For a starting value that has to be built from nodes rather than typed into the variables panel.
  • 0.19.1Declare Local has a Name. An optional input on the node face; leave it blank and one is chosen. The Inspector's Label did this already and was findable only by guessing that a cosmetic field was load-bearing.
  • 0.19.0The project tree is split into Graph content and Compile content. One half you author and Roswaal reads; the other Roswaal writes and you do not edit. Each collapses, and an empty one says so.

Changed

  • 0.19.4The node that hoists is now Declare Type at Top, and still writes its definition out as Luau. Graphs using the older one are converted to it when they open.
  • 0.19.3Define Type is now Declare Type, which is what the node beside it — Declare Local — is called, and what people go looking for. Graphs using the old one are converted when they open.
  • 0.19.1Make Dictionary goes up to 24 pairs, from 8. A settings table of ten entries is ordinary, and there is no way to say "a table with ten keys" by adding more nodes.

Fixed

  • 0.19.5The Export checkbox sat under its own heading with its explanation orphaned below it. The checkbox and the words that explain it are one line now, and it reads Is Export Type.
  • 0.19.2Renaming a variable left an Initialize Variable node showing the old name, the usage count did not include those nodes, and deleting a variable only used by one gave no warning. Every node that points at a variable is now counted the same way.
  • 0.19.0Renaming, moving or reclassing a graph left its old generated file behind and wrote a new one beside it. Rojo went on syncing both, so the game ended up with two copies of the module and nothing maintaining one of them. The file a graph used to write is now removed when it writes a different one, and the compile report names what went.
  • 0.19.0The count of stale generated files was only refreshed by a compile, so renaming or deleting a graph left it describing whatever the last compile saw. It updates whenever the tree does.