Azul — Easy & Powerful Studio-first Two-Way Sync

I’ve seen a common issue where people were having super slow sourcemap generations or crashes because of their games having a very big amount of Keyframe instances (generated by the Animation Editor). The new release adds a feature that lets you ignore you certain Instance types:

By default, the option it’s set to ignore all KeyframeSequence instances and descendants. Maybe this can fix your problem? Let me know!

2 Likes

Yeah this fixed my issue thank you!
It was all keyframes.

Hey again!

I would also love an ignore list for specific tags in-game using collection service if you find the time to add something like that it would be great!

1 Like

Azul - 2.2.0

Finally, an easy to use two-way sync tool where Roblox Studio is the souce of truth.

This release notably migrates the serialization format from Azul’s own solution to the community standard rbx-dom-lua. While "packVersion": 1 remains supported, it is heavily encouraged to re-run azul pack on your projects to take advantage of the new format.

Migrating to this standard format opens the door for many new exciting features, like generating Rojo Project files (#69), .rbxm building (#27) & more!

Daemon

  • Migrates serialization logic to rbx-dom-lua (resolves #65)
  • Updates packVersion to 2
  • Rojo Compatibility:
    • Fixes ignoreGlobPaths pattern matching
    • Dedupes Rojo instances by path so class conflicts collapse
    • Adds Rojo Ref handling
    • Removes conversion of rbx-dom → Azul format, as they now speak the same format
  • Pack: Includes scripts when running pack as opposed to only editing the sourcemap (#73)

Plugin

  • Migrates serialization logic to rbx-dom-lua
  • Fixes Websocket URL being hardcoded to ws://localhost:8080 instead of pulling from Config
  • Removes the need for an explicit ws:// protocol prefix for the Websocket URL, however, a protocol can still be prepended if needed (i.e. ws://, wss://..)

:package: Update the Daemon & Plugin

Tried setting up Azul but it seems to send the intial snapshot and then just freeze, it seems to be because of a certain directory ( I haven’t narrowed it down yet other than in my RS) but yea not sure why its being a problem unless azul isn’t mean for larger games?

Can you share more? How does it get stuck exactly? Logs?

Unless I’m mistaken and this isn’t what I think it is, this issue should be fixed in the next release and speed up initial snapshot processing significantly.

This is a lifesaver, thank you so much!

1 Like

Azul - 2.3.0

Finally, an easy to use two-way sync tool where Roblox Studio is the souce of truth.

This minor release notably adds Solo playtest output streaming, letting you see your Studio console output directly in the Daemon terminal. It also brings a new notification system to the plugin, reminding you to sync Places you’ve synced before, and a few QOL improvements.

Daemon

  • Adds playtest output streaming (#72) (resolves #26)
    • Output from Studio is relayed to the Daemon terminal during a Solo playtest.
    • Warnings & errors keep their colors, and recognized stack trace locations are mapped to your synced files so you can Ctrl+Click on them.
  • Rejects additional Studio connections while a session is already syncing with the Daemon. Previously, a second Studio session would take over and overwrite the first one’s files. (fixes #74)
  • Performance: File path collision checks now use a O(1) lookup map instead of scanning every tracked file.
  • Fix: build, push & pack now wait for the WebSocket server to fully close before exiting.

Plugin

  • New: Notifications (resolves #75)
    • Pop-up notifications for important events: connecting, disconnecting, build/push results, version mismatches, Daemon errors & connection failures.
    • Optionally plays a sound when a notification appears.
  • New: Sync Reminders (resolves #70)
    • When opening a Place you’ve previously synced, a notification reminds you to connect again
  • New configs:
    • “Stream Console Output”: Streams playtest output to the Daemon terminal. (Disabled by default.)
    • “Notifications” & “Notification Sounds”
    • “Sync Reminders”
  • New: Slider UI component for some configurations.
  • Shows a notification and stops auto-connecting when the Daemon is busy with another Studio session.
  • Push messages now show the destination with . separators (e.g. Workspace.Foo) instead of /.
  • Migrates the UI from dervexhero/fusion-03-dev to mainline Fusion 0.3 (elttob/fusion).
  • Adds a plugin:build script for building the plugin in this repository.

:package: Update the Daemon & Plugin

2 Likes

There wasn’t any logs for problems It would simply send the initial snapshot and take forever (never actually did it but I assume it either crashed or was taking super Long to set up syncing). Though I just tried with the new update 2.3.0 and it works good now thank you.

Great to hear the issue is gone! It was likely fixed by this:

It also seemed to help other people with similar startup issues.

Found a bug when Building. I packed a file and then built to a empty studio not sure if its the only problem but it was the most apparent being that for some reason all the lighting values got enabled even though in the source map itself its bool values are set to false. Like every single lighting value was just enabled in the new studio that received the build.

– Randomly saw this might be related?
02:17:19.221 :play_button: [Azul]: Error applying build snapshot: The current thread cannot set ‘Character’s name’ (lacking capability WritePlayer) (x2) - Edit

Looks like an issue with the new serializer (rbx-dom-lua). I will investigate and report back as soon as I can.

Your issue has been addressed should be fixed in the next release. (Apologies for pointing at rbx-dom-lua, since the issue came from my implementation and not theirs.)

Azul - 2.4.0

Finally, an easy to use two-way sync tool where Roblox Studio is the souce of truth.

Daemon

  • Performance: Coalesces sourcemap writes & empty directory cleanups.
    • A burst of changes now results in a single write instead of one per message.
  • Performance: Skips writing to scripts whose content didn’t change.
  • @self require rewriting is now opt-in via the rewriteSelfRequires config option (resolves #78)
  • Removes the degit dependency. The rbx-dom-lua vendor script now pulls from GitHub tarballs.

Plugin

  • Excludes descendants of Players from being processed.
    • These are runtime Player objects that can’t be rebuilt, so only the service itself is kept.
  • Fix: A single instance failing to apply (i.e. a protected Name write) no longer aborts the whole build. It’s skipped with a warning instead.
  • Improves WebSocket connection handling and cleanup logic
    • Connecting to the Daemon is now blazing fast when auto-connect is enabled.
  • Updates rbx-dom-lua to latest.

:package: Update the Daemon & Plugin