Ember logo

A package manager built for Luau

Publish, discover, and install packages for Luau and everything built on it.

$embr add chief/core
Packages
Downloads
Publishers

Recently published

Browse all packages

Every runtime, one registry

Seal and Zune are new

Set the environment in [target]. Ember installs into it, and refuses a dependency for another environment.

Roblox

roblox

Roblox places and models. The old shared name still works.

Roblox API · .luau .lua

Roblox Server

roblox_server

Server-only Roblox code. It takes Roblox packages too, and the old server name still works.

Roblox API · .luau .lua

Lune

lune

Scripts on the Lune runtime. It takes Roblox packages too, through @lune/roblox.

@lune/* · .luaurc

Lute

lute

Scripts on the Lute runtime.

@std/* @lute/* · .config.luau

Seal

Newseal

Scripts on Seal. It reads .luau files only, so a package with .lua files fails here.

@std/* @interop/* · .luau

Zune

Newzune

Scripts on Zune and its global zune library.

zune global · zune.toml

Luau

luau

Pure Luau with no runtime API. It installs in every environment, Roblox included.

portable · .luau .lua

Languages beyond Luau

New

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.

Luaudefault

language = "luau"

Plain Luau. Every project can install it, whatever its language.

Alloy

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.

Loom

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.

Luwu

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.

What installs where
PackageLuau projectAlloy projectLoom projectLuwu project
Luau packageYesYesYeswith a .d.loom fileYes
Alloy packageNoYesNoNo
Loom packageNoNoYesNo
Luwu packageNoNoNoYes

Why Ember?

Wally and pesde are solid tools, and Ember installs packages from both. Here is how the three compare today.

Features

Feature comparison of Wally, pesde, and Ember
FeatureWallypesdeEmber
Roblox projects, shared and serverYesYesYes
Standalone Luau and the Lune runtimeNoYesYes
The Lute runtimeNoNoYes
The Seal and Zune runtimesNewNoNoYes
Alloy, Loom, and Luwu packagesNewNoNoYes
Yanked versions stay out of new installsNewNoYesYes
Deprecate a package, or one version, with a reasonNewNoYesYes
Installs existing Wally packagesYesYesYes
Installs existing pesde packagesNoYesYes
Installs existing Forest packagesNewNoNoYes
Rewrites instance requires to string requiresNoNoYes
Installs and pins dev tools like Rojo and darkluaNoNoYes
Runs your project scriptsNoYesYes
Workspaces for monorepo projectsNoYesYes
Launches your place in Roblox StudioNoNoYes
Sets up manifest IntelliSense in your editorNoNoYes
READMEs and licenses on the registry siteNoYesYes
Download counts for every package and versionNoNoYes
Version and download badges for your READMENoNoYes

Based on the public docs and registry sites for Wally and pesde as of July 2026. Spot something out of date? Let us know.

Benchmarks

Benchmarks: binary size, startup, and install times for Wally, pesde, and Ember
BenchWallypesdeEmber
Binary size9.92 MiB10.02 MiB5.23 MiB1.8x smaller
Startup time10 ms15 ms8 ms1.2x faster
Install with nothing to do718 ms46 ms12 ms3.8x faster
Install from scratch649 ms783 ms169 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.