A first project
Updatedalloy init asks a few questions, and -y takes the recommended answers. It writes alloy.toml and, when the folder has no Luau configuration, one .config.luau with strict mode and the @alloy alias. It also writes ember.toml, an agent guide, and a src folder with client, server, and shared. Sources compile under build, and the runtime sits beside them as alloy.luau.
Shell
mkdir game && cd game alloy init -y # alloy.toml, .config.luau, ember.toml, AGENTS.md, src/ alloy build # src/**/*.aly -> build/**/*.luau alloy flux # the compile, the type check, and the lints alloy test --run # one lest spec per source with a @test, then lest
Alloysrc/shared/hello.aly
-- src/shared/hello.aly struct Greeting name: string times: number = 1 end local g = new Greeting { name = "world" } for _ = 1, g.times do print(`hello, {g.name}`) end
Point Rojo, or any sync tool, at build. An unchanged output is not rewritten, so the sync stays quiet.
Packages come from Ember. Set language = "alloy" in the [target] of ember.toml. embr add then installs Alloy and Luau packages, and embr publish runs alloy build before it packs. Alloy itself runs no package manager.
