Azul separates configuration into two independent layers so you can tune daemon behavior on your machine without coupling it to any one project, while still letting individual places override specific settings in Studio. The CLI user config covers how the daemon runs on your system; the plugin settings control how Studio connects and what it syncs.
CLI user config
Plugin settings
The CLI user config is a JSON file stored on your machine. It sets the default behavior for every Azul daemon session. To open the file in your default editor, run:To print the file path without opening it:Config fields
| Field | Type | Default | Description |
|---|
port | number | 8080 | Port used for WebSocket communication between the daemon and the Studio plugin. |
syncDir | string | "./sync" | Directory where the DataModel is mirrored on disk. |
sourcemapPath | string | — | Path where azul pack writes the generated sourcemap.json file. |
scriptExtension | string | ".luau" | File extension used for all script files. |
fileWatchDebounce | number | — | Delay in milliseconds applied to local file watcher events before syncing to Studio. |
deleteOrphansOnConnect | boolean | false | When true, deletes files in syncDir that don’t map to any Studio instance on the initial snapshot. |
suffixModuleScripts | boolean | false | When true, writes ModuleScript files with a .module.luau suffix instead of no suffix. |
debugMode | boolean | false | When true, enables verbose daemon logs for troubleshooting. |
port in the CLI config must match the WebSocket URL port set in the Studio plugin. If they differ, the plugin will not be able to connect.
Plugin settings are configured directly in the Azul panel inside Roblox Studio. Some settings are global (applied across all places), while others can be scoped to a specific place.Global-only settings
| Setting | Description |
|---|
| Debug Mode | Enables extra logging on the plugin side for diagnosing connection and sync issues. |
| Silent Mode | Suppresses non-error plugin output to reduce noise in the Studio Output window. |
Global or project-scoped settings
These settings can be saved as global defaults or overridden per place. When a per-place value is set, it takes precedence over the global value for that place.| Setting | Description |
|---|
| Scope | Controls whether the setting applies globally or only to the current place. |
| WebSocket URL | The address the plugin connects to. Should be ws://localhost:<port> where <port> matches your daemon config. |
| Service List + Service List Type | Specifies which top-level services to include or exclude from the sync. |
| Excluded Parents | A list of instance paths to exclude from syncing — useful for plugin-managed folders you don’t want on disk. |
If you work across multiple places with different service layouts, use per-place scoping for Service List so each place only mirrors the services relevant to it.
Per-place daemon config
For team workflows, you can store daemon overrides directly inside a place so every collaborator automatically gets project-specific behavior when they connect. Create a ModuleScript at ServerStorage.Azul.Config that returns a configuration table. Fields set here override the corresponding CLI user config values for the duration of that session.
-- ServerStorage/Azul/Config
-- Returned table is sent to the Azul daemon when it connects.
return {
port = 8080,
debugMode = false,
deleteOrphansOnConnect = true,
pushMappings = {
{
source = "Packages",
destination = { "ReplicatedStorage", "Packages" },
destructive = true,
rojoMode = true,
},
},
}
The most common use for per-place config is defining pushMappings so your team can run azul push without passing source and destination arguments manually. See Advanced Usage for the full list of supported fields and additional push mapping examples.
ServerStorage.Azul.Config is read by the daemon at connect time. Changes to it take effect the next time you connect — not while a session is already active.