Roswaal 0.132.4 - Visual Scripting for Luau, Reimagined. Completely Free. Forever

Try it in your browser Latest release Source on GitHub Licence: 0BSD

Roswaal is a free visual scripting tool for Luau. You build scripts as node graphs in your browser or in a local app, and Roswaal
compiles them to plain, readable .luau.

  • No plugin and no runtime. Graphs are .nodescript files on disk. What reaches your game is ordinary Luau, with nothing of Roswaal’s in it.
  • Works with your existing setup. Output syncs through Rojo like any other source file, and Roswaal can open a place file or a Rojo project you already have.
  • On a computer, an iPad or a phone. The editor is the same everywhere, and the browser version needs nothing installed.
  • Free forever. Roswaal’s own code is 0BSD. See Attributions.

What’s new since 0.97

Work with the codebase you already have.

  • Open a place file. A .rbxl or .rbxlx becomes a Roswaal project. You choose which scripts to bring in, and identical copies of a script are merged into one file.
  • Export back into the place. Edited and new scripts are written into your place file. Every other part of the place is left untouched.
  • Import a Rojo project. default.project.json becomes a node map.
  • Wally packages. Packages show in the project tree, and you can add or remove them there.
  • DataModel browser. Browse the place’s instances and open their properties. Drag a property onto a graph to get or set it.
  • Luau that understands your project. Hovers show doc comments and follow require across files. Instance paths that don’t exist in the place are flagged.

Events, already typed. On Event runs each time an instance’s event fires. Pick the event from a list of what that class fires, and its parameters arrive typed. Connect Event fills its parameters in the same way.

A new interface.

  • The graph fills the window, with every control floating over it in small groups, in every window.
  • Panels are cards. Dock them to an edge, stack them, share one as tabs, fold them away, or float and resize them anywhere.
  • Made for touch too. On an iPad, cards open from the top bar, and two- and three-finger taps undo and redo. On a phone, the controls fold away to leave room for the graph.
  • A new start page and a new node packs page, with recent projects as cards, the demos one click away, and one search over every pack and node.

Node maps keep their folders in step. Writing a node map makes the folders Rojo syncs. Changing an entry’s path moves its folder and the graphs in it, and a graph whose Luau goes where no map syncs it is listed.

Safer saving and compiling. Autosave keeps every edit, open graphs follow their files when a branch switch or pull changes them, and the compiler reads its own Luau back before writing it.

Next up: converting existing Luau into node graphs.

Try upcoming work early: Canary build

Full details are in the release notes, and everything else is in the documentation.


Getting started

How Notes
Browser roswaal.app Nothing to install, with a demo project ready to open.
Rokit (Windows) rokit add neopolitans/Roswaal roswaal macOS and Linux builds are planned.
From source GitHub Node.js, npm install, npm run build.

The web app runs on Windows, macOS, iPadOS (including Apple Pencil) and iOS. Android hasn’t been tested yet.

To open a project folder of your own, you need Google Chrome or Microsoft Edge. In any browser, you can open a project as a .zip, or a place file.


Features

Script graphs, with functions in their own graphs

Panels that float, dock and share

Drag a card’s header to dock it to an edge, stack it under another, or drop it on another card’s header to share it as tabs.

Search for nodes by name or visually

Right-click to search by name. Ctrl + Right-click to browse visually.


Events, with their parameters already typed


Places, Rojo projects and Wally packages



Luau that understands your project

Custom nodes, built from nodes or written in Luau


Preview the compiled Luau

Press P in any script or function graph.

Documentation for every node, with example graphs

Ctrl + K searches it from the editor, Node Design or the documentation itself.

On an iPad

Suggest an edit from any documentation page. Each page has an edit button that opens a report for that page.


Who is Roswaal for?

Roswaal is designed for two groups:

  • Game designers and artists who want to build with Luau visually.
  • Developers with visual scripting experience from other engines who are new to Roblox. There is a Coming from Blueprints guide for anyone who has used Unreal.

If you already write Luau comfortably, Roswaal may not be what you need. Feedback from experienced programmers is still very welcome, including telling me where it falls short.


Project status

Roswaal is in active development. It is built primarily for Roblox. Lune support is experimental and is a long-term goal.

How it’s made. Roswaal comes out of years of research into visual scripting for game engines, from 2019 to 2026. The designs, mechanisms and planned features all come from hand-written projects, design documents and prototypes that I made before May 2026. The pre-release builds (0.x.x) were written with Claude Code.

I plan to replace all AI-generated code with hand-written code before I consider a 1.0.0 release.


Feedback and bug reports

Report everything at roswaal-feedback/issues. I’m especially interested in:

  • Regressions, bugs and unexpected compile output in the current build.
  • Lune issues. Experienced Lune developers would be a huge help here.
  • Roblox Luau issues.
  • Documentation errors and reviews.
  • Feature requests for Roblox or Lune.

FAQ

Can I use Roswaal with my existing codebase?

Yes. You can open a place file or import a Rojo project, and your existing scripts appear in the project tree. Graphs can call your modules, and Luau you write by hand sits alongside graphs in the same project. Converting existing Luau into graphs is the next major feature.

Are other languages planned?

Not from me. I’ve been researching visual scripting for Luau and C# for years, and I’m happy with achieving it for Luau. Anyone looking to add support for another language is welcome to fork and try. Be warned, here be dragons.

Why 0BSD?

Roswaal has been my dream project for a long time. A lot of people told me it couldn’t be done, so I built the pre-release versions with Claude Code. Because it isn’t entirely my own work, I don’t want personal credit or gain from it.

Use it, modify it or ship it. No attribution is required. A few bundled pieces keep their own permissive licences, and they’re credited on the Attributions page.

Just have fun node scripting, and let me know when things go wrong!

25 Likes

This actually might be based as hell!?
AOT pipelines always win against runtime slop.

Interesting resource.

6 Likes

The man, the myth, the legend. I have long since wondered where you’ve been!

Thank you, too, really. I’ve been researching as much as I can about Visual Scripting since my early college days circa 2019. I’ve been doing my best to find ways to create a good scripting system.

I’m working as much as I can on Lune support thanks to the help of a tester on the Roblox OSS discord too. So an update to a 0.6x or 0.7x branch will be up later today.

1 Like

Just wanted to ask something. Does this plug directly into existing codebases, in such a way I could import existing function name calls? Currently, our large codebase could improve significantly with an add-on like this.

Yes, but with an asterisk right this moment. It should be able to within a few days, but will also need extra testing.

I’m currently working to improve upon it so you can convert over existing hand-written Luau scripts, but you can start building new scripts with Node Graphs. The plan is to make it so that modules and such are crawled by the importer and by scripts requiring modules to make module members visible where applicable.

I’m in the middle of a massive update for Lune support (0.59.2 → 0.66.0 on the canary so far, expected to ship a 0.7x.x build by tonight), but this is the next feature right after since it’s make or break for existing codebases.

1 Like

Thank you for the response. Keep me updated on that! We would love to use such a tool!

If it’s any help for your studio too, there’s custom nodepack support and it’s 0BSD.

Once the features are in and reliable for your team’s needs, you’ll be able to fork it and upload your own version of Roswaal without any attribution required.

1 Like

0.70.1 Release notes

  • Improved Lune Support, but Experimental

  • .luaurc Support, but Experimental

  • Modules are now also includable in a node graph by the Require at Top node and Variables panel.

  • Added require-by-string support, but Experimental

  • Added Interactive Previews for Variables panel, Toolbars and Nodemap panel.

  • Project Picker (Recents in Webapp, Full Picker in Localhost App)

  • Filter by All, This Graph, Lune or ROBLOX in Node Searcher or Visual Node Searcher

  • Added more documentation for Lune and ROBLOX.

  • ROBLOX and Lune temporary demos (Localhost App only, for now!)

I’ve updated the original post with more clarity on who the tool is for, and more detail in how the tool was initially developed. I wrote the post just before heading off for the night originally and a re-read brought up some alarming errors, sorry for any confusion!

Roswaal 0.73.1: Visual Scripting on the go!

  • Touch Support added for the Webapp!

    • Edit and Design entire projects using tablets or phones
    • Create custom nodes with tablets or phones.
    • New optimized UI Layouts specially for tablet and phone displays.
    • Apple Pencil support for compatible iPad models.
  • Open Projects on-the-go with Open .ZIP. (Google Cloud Support is in the pipeline!)

  • Improved interactive documentation for getting started

    • New Getting Started Page, with Interactive Step-by-Step Guide
    • New Page: The Interface
    • Several new documentation tabs and interactive demos for Desktop, Tablet and Phone
  • Fixes:

    • Fixed Trackpad Support for MacOS devices.
    • Fixed focusing on fields causing iPhones to zoom in.
    • Dropdowns now look consistent across devices.
    • Project Tree now scrolls properly inside it’s own panel.
    • A wire dragged by touch now lands on the pin it’s dropped on.

Test Devices used:

    • iPadOS (Tested against iPad Mini 2021, iPad Pro M2 2022)
    • MacOS (Tested against MacBook Pro M2 2022)
    • iOS (Tested against iPhone 14 Pro)

This is still planned. Sorry for the delays, a studio I work with released a game recently on the platform and I’ve been doing content updates while testing Roswaal.

I’m aiming to get this feature tested and ready for early use by this weekend!

1 Like

Roswaal 0.97.3 - An Editor that knows Luau

  • Windows Binary support for Rokit added!

    • Run rokit add neopolitans/Roswaal roswaal to get it via Rokit!
    • Currently only the Editor and Docs are provided. Node Design support pending.
  • Code Editor and Luau Script Viewer now understand Luau as it is typed.

    • Completions are now available for locals, parameters, table keys (by tbl.Key and tbl["Key"]), ROBLOX Datatypes, Classes, Enums and Services.
    • Hover over any local, class or function name to see it’s type and docs link.
    • See the current parameter hint as you type a function call.
    • Syntax mistakes are now marked, and they point to the line when stopping a build
      can
  • Improved the tools for interacting with the ROBLOX API, including integration with the full ROBLOX API via Creator Documentation (CC-BY-4.0, thank you ROBLOX team for providing this!)

  • Improved Casting

    • Dropping wires on a subclass of the class being output now automatically places a cast.
    • Refused wires now show a notification as to why.
    • FindFirstChildOfClass and FindFirstChildWhichIsA now change the output pin to match that of the class being searched for (i.e. BasePart?)
    • FindFirstChildOfClass and FindFirstChildWhichIsA now cast results in Nonstrict and Strict.
    • New Setting to disable automatic casts in Project Settings
  • Improved Member access

    • New GetMember Node: Read fields or proeprties off of typed values
    • Dragging a wire out of a typed pin now shows it’s members.
    • Searching for a member of a typed local (i.e. myNewPart.) will show all the members of it’s class that are available as well.
    • New Instance and Get Service change their output pins to reflect the class or service specified.
    • LocalPlayer and LocalPlayer.Character now hand back Player and Model? respectively.
    • Other properties of classes that can be nillable,
  • Cleaner Luau Compilation

    • Values used twice are resolved once.
    • Wiring FindFirstChild to a Declare Local / Set Variable / Set Local node will now result in only one local, not two.

Before:

local child = parent:FindFirstChild("HumanoidRootPart")
local root = child

Now:

local root = parent:FindFirstChild("HumanoidRootPart")
    • Type Annotations are now used instead of casts.

Before:

local weld = Instance.new("WeldConstraint") :: WeldConstraint

Now:

local weld: WeldConstraint = Instance.new("WeldConstraint")
  • Nodes and Editor Improvements

    • Mathematic Operations, Typeof and member read nodes are now shown as compact pills
    • Concatenate can now write interpolated or string-joined strings.
    • Not Equal to Self, a new node for checking a value against itself to find NaN values, has been added.
    • Type as String, a new node that lets you use the type picker to find a type and get the type’s name as a string has been added.
    • Node search can now find nodes by aliases and keywords, such as “Define Function”, “Sleep” and “Log”
    • Locals and Functions can now be deleted from the Variables panel.
    • Declare Type can optionally write each field in a table of fields as one line each.
    • unknown and never are now supported types you can select in type pickers.
    • Fields of declared types now use the type picker instead of text boxes.
  • Touch Improvements (Roswaal Webapp)

    • Press and hold with two fingers to open the visual node picker like Ctrl + Right-Click does on PC.
    • Tap a node in the visual picker to preview it.
    • Spawning a node can be done via Double Tapping the node label in the list, Tapping “Spawn Node” on the preview section or Dragging the label of the node in the list off into the panel.
    • Touchscreen specific control hints added to Visual Node Picker.
  • Documentation Improvements

    • New Page: “Members and Fields” (Still pending full review, several errors have been fixed over the last version.)
    • Example Graph windows can now contain several tabs to show multiple scripts at once.
    • Previous/Next links at the bottom of every page.
    • All infoboxes written to be more concise, and now denote their type clearly: Hint, Info, Warning and Danger.
    • Outdated Graph examples amended to show Main Graph and Function Graphs instead of one graph only.
    • Custom Code nodes in example graphs can now be interacted with to see the snippets they contan.
  • Fixes

    • Focusing on a node will no longer break the graph view in rare instances.
    • The Code Editor’s text cursor is now set correctly based on the light/dark theme used.
    • Return Nodes in a function graph now update to reflect the “Returns” list of a Declare Function node.
    • Removing generated files also clears up any empty folders if they leave any.
    • Comments made around Declare Function nodes within the Function Graph now properly encapsulate it.

This build is a step towards Luau Importing and hopefully Importing from/Exporting to RBXL files if possible. It also contains all work from 0.73.2 to 0.973.

Please note: Roswaal is not primarily a code editor. It offers functionality of code editing and Luau viewing for developers to close the gap where built-in and custom nodes simply can’t. The goal is to get to parity with ROBLOX Studio’s editor features or better with it’s Luau Viewer and Custom Code inputs where possible, so that experienced programmers can interact with visual scripting using the ways they know best.

1 Like

Take your time! I really appreciate you!

1 Like

Hi, I’m working on this today as a matter of fact! I also just got done dealing with the domain names earlier. The repo still has it’s own independent .io link and that’ll stay active as a backup for anyone if they have been using it. We’ll be somewhere around 0.1xx versions when a public build with RBXL support is released.

A lot of what is already in and what will be available soon is possible only because of the jump from 0.73.1 to 0.97.1. The Lune + RBLX Luau Linter was a critical milestone to making sure we can get Luau importing, RBXL importing and massively improved suggestions + casting working.

1 Like

Everything but Luau → Nodescript imports just shipped. But the change log is big enough from 0.97.3 to 0.116.2 that I have to just update the post more thoroughly tomorrow and properly update to link to the new domains “roswaal.app” and “canary.roswaal.app”.


For anyone who has scrolled down and wondered why the title isn’t updated yet to 0.116.2, I want to just properly write the patch notes and verify them, but 0.116.2 is live on stable + canary:

For those who just want early patchnotes (and these really barely cover only a small part of the update):

  • Place files: roswaal import place.rbxl (or Open place… in the web app) makes a project from a .rbxl or .rbxlx, and Export writes your scripts back into a copy of the place, adding new ones where they belong.

  • Rojo projects: Import Rojo project reads a default.project.json into a node map, keeping every field. Open .zip and Open folder offer it.

  • A DataModel browser and a Properties panel for the place. Drag a property onto a graph for Get Member; hold Ctrl for Set Property.

  • Hover reads doc comments and Moonwave’s @class, @prop and @interface, follows requires into modules and Wally packages, and marks instance paths the place does not have. Custom Code gets the same.

  • Wally packages in the project tree: add from the registry, from a zip or from a GitHub repo, and remove them cleanly.

  • New docs pages with interactive previews: The Project panel, Places and Rojo projects, Wally packages and Reading your Luau.

1 Like

Roswaal is now on 0.125.0 (with Windows Binary updated too)!

Luau → Nodescript imports are still planned, but there’s been quite a few extra hurdles in the way since then that I didn’t expect.

New domains needed to be sorted out, and a complete overhaul of the User Interface to match the direction of Roswaal now being available on MacOS, iPadOS and iOS since 0.97.3. There’s also a bunch of feature pushes to improve Rojo and Wally Package support, as well as fixes for 50+ bugs discovered along the way - including plenty of data-loss inducing ones.

Roswaal keeps progressing, and when I can focus on it these are looooong sessions. The whole webpage even got a refresh over a few attempts to get it looking better compared to the original version.

The original version (0.1.0 → 0.116.2) of the UI was so blocky and simple before because it was built as a 3 hour prototype based on ROBLOX Studio’s panel interface - there were plans back to 0.59.2 to get it up to date but priorities took a while and now everything is finally updated with a bunch of improvements.

0.126.0 will be releasing sometime soon after this new reply, but that just addresses the overcrowded Release Notes page from… holy moly 261 different builds. Yeah i’m going to get to dealing with that now.

Happy node scripting, everyone!

A ton more UI improvements to the oldest elements of the app. Now I believe 90% of the webapp and local app are up to date with what the overall vision for Roswaal is.

New Project, Properties, Inspector, Script Analysis and Variables panels. Also a bunch of fixes to Node Design and improved modals + prompts across the board.