Roblox
robloxRoblox places and models. The old shared name still works.
Roblox API · .luau .lua

Publish, discover, and install packages for Luau and everything built on it.
embr add chief/coreSet the environment in [target]. Ember installs into it, and refuses a dependency for another environment.
robloxRoblox places and models. The old shared name still works.
Roblox API · .luau .lua
roblox_serverServer-only Roblox code. It takes Roblox packages too, and the old server name still works.
Roblox API · .luau .lua
luneScripts on the Lune runtime. It takes Roblox packages too, through @lune/roblox.
@lune/* · .luaurc
luteScripts on the Lute runtime.
@std/* @lute/* · .config.luau
sealScripts on Seal. It reads .luau files only, so a package with .lua files fails here.
@std/* @interop/* · .luau
zuneScripts on Zune and its global zune library.
zune global · zune.toml
luauPure Luau with no runtime API. It installs in every environment, Roblox included.
portable · .luau .lua
The language field says what a package ships. It is separate from the environment, so an Alloy package for Lune is one line of config.
language = "luau"Plain Luau. Every project can install it, whatever its language.
language = "alloy"A strict superset of Luau. embr publish runs alloy build and ships its .aly, .alx, and .d.aly sources with the typed Luau output.
Alloy projects use embr, and get each package's Alloy target.
language = "loom"A Roblox DSL that compiles to Luau. embr publish runs loom build and ships the sources with the Luau in dist/. Loom projects take Loom and Luau packages.
Loom code cannot require a Luau file. It imports one through a .d.loom file that declares the module's types.
language = "luwu"A Luau fork with its own compiler and VM. Luwu packages install in Luwu projects, and a Luwu project can use Luau packages too.
| Package | Luau project | Alloy project | Loom project | Luwu project |
|---|---|---|---|---|
| Luau package | Yes | Yes | Yeswith a .d.loom file | Yes |
| Alloy package | No | Yes | No | No |
| Loom package | No | No | Yes | No |
| Luwu package | No | No | No | Yes |
Wally and pesde are solid tools, and Ember installs packages from both. Here is how the three compare today.
| Feature | Wally | pesde | Ember |
|---|---|---|---|
| Roblox projects, shared and server | Yes | Yes | Yes |
| Standalone Luau and the Lune runtime | No | Yes | Yes |
| The Lute runtime | No | No | Yes |
| The Seal and Zune runtimesNew | No | No | Yes |
| Alloy, Loom, and Luwu packagesNew | No | No | Yes |
| Yanked versions stay out of new installsNew | No | Yes | Yes |
| Deprecate a package, or one version, with a reasonNew | No | Yes | Yes |
| Installs existing Wally packages | Yes | Yes | Yes |
| Installs existing pesde packages | No | Yes | Yes |
| Installs existing Forest packagesNew | No | No | Yes |
| Rewrites instance requires to string requires | No | No | Yes |
| Installs and pins dev tools like Rojo and darklua | No | No | Yes |
| Runs your project scripts | No | Yes | Yes |
| Workspaces for monorepo projects | No | Yes | Yes |
| Launches your place in Roblox Studio | No | No | Yes |
| Sets up manifest IntelliSense in your editor | No | No | Yes |
| READMEs and licenses on the registry site | No | Yes | Yes |
| Download counts for every package and version | No | No | Yes |
| Version and download badges for your README | No | No | Yes |
Based on the public docs and registry sites for Wally and pesde as of July 2026. Spot something out of date? Let us know.
| Bench | Wally | pesde | Ember |
|---|---|---|---|
| Binary size | 9.92 MiB | 10.02 MiB | 5.23 MiB1.8x smaller |
| Startup time | 10 ms | 15 ms | 8 ms1.2x faster |
| Install with nothing to do | 718 ms | 46 ms | 12 ms3.8x faster |
| Install from scratch | 649 ms | 783 ms | 169 ms3.8x faster |
Lower is better. Medians measured in July 2026 with embr 0.4.0, pesde 0.7.3, and wally 0.3.2, each installing the same five wally-index dependencies. Each multiplier compares Ember with the closer of the two competitors, rounded down. The no-op install is Ember's fast path; roughly once per five minutes it revalidates its index instead, which takes about 730 ms.