Skip to content

Package Management

When using Azul with package managers like Wally, you can use azul push to import packages into Studio.

Example:

Terminal window
azul push -s Packages -d ReplicatedStorage.Packages --destructive --rojo

Rojo-style layouts are usually standard for package managers, so the --rojo flag is needed to automatically convert from Rojo’s format to the format Azul uses.

Add a push mapping in per-place config so you can run plain azul push. Below are push mapping templates you can use.

Ember is a relatively new package manager for Luau. It is a great replacement for Wally, fixing many of its issues, supporting all the newest Luau features & fully supporting the Wally registry.

Ember is the recommended package manager for Azul.

pushMappings = {
{
source = "./packages/roblox",
destination = { "ReplicatedStorage", "Packages" },
destructive = true,
rojoMode = true,
},
}

For more information on Ember usage, see the Ember documentation.

pushMappings = {
{
source = "./Packages",
destination = { "ReplicatedStorage", "Packages" },
destructive = true,
rojoMode = true,
},
}

For more information on Wally, see the Wally website.

If you are using a different package manager, you can create a custom push mapping to import packages into Studio. The logic is the same as the examples above: specify the local source folder, the Studio destination path, and whether to enable Rojo compatibility mode.

Packages and libraries can also be distributed in the native Azul format.

They can be pushed with the following command:

Terminal window
azul push -s ./AzulPackages/MyLibrary -d ReplicatedStorage.Libraries

The package doesn’t have an azul.package.json file If the package does not have an azul.package.json, you will need to know the source folder and sourcemap to push it:

Terminal window
azul push -s ./sync/ReplicatedStorage/MyLibrary -d ReplicatedStorage.Libraries --from-sourcemap ./mylibrary.sourcemap.json

Got a few packages in the same folder? Push the whole folder, just like you would with --rojo:

Terminal window
azul push -s ./AzulPackages -d ReplicatedStorage.Packages --destructive

Every subfolder with an azul.package.json gets its own container, named after the folder:

AzulPackages/ ReplicatedStorage
├── BetterChassis/ └── Packages
│ └── azul.package.json ──► ├── BetterChassis
└── Raycer/ └── Raycer
└── azul.package.json
  • Anything in the folder that isn’t a package (e.g. a loose Utils.luau) is still pushed into the destination, but Azul will warn you about it.

This also works as a push mapping:

pushMappings = {
{
source = "./AzulPackages",
destination = { "ReplicatedStorage", "Packages" },
destructive = true,
},
}

Note: At the time of writing, no Azul-native package manager exists. You will have to manage dependencies yourself.

Want to distribute your own? See Package Files.