Getting started
Quick start
Last updated October 22, 2026
Four commands#
mkdir my-game && cd my-game
embr init # interactive manifest wizard
embr add chief/core # resolve + record a dependency (Ember registry)
embr install # download, link, write ember.lock
What you get#
my-game/
ember.toml
ember.lock
packages/
shared/
core.luau <- generated link file: require this
.ember/
chief_core/ <- the actual package contents
Require packages from the packages folder — each entry in it is a generated link file that re-exports the package and its types:
const core = require("@packages/core")
Here @packages is a require alias pointing at the output folder
(packages/shared in this project; in Roblox it would resolve to something
like ReplicatedStorage.packages).
Only what you declared gets a link file like core.luau. Whatever your
dependencies depend on lives inside .ember/ and is reached by them, not by
you. See Dependencies & installing for how linking
works.
Project commands#
Anything you type often goes in [scripts], as one command or a list that
runs at once:
[scripts]
build = "rojo build -o game.rbxl"
serve = ["larvae process -w", "rojo serve"] # a list runs at once
embr run # list every script, grouped by how you reach it
embr build # build/test/start/serve/dev/fmt need no `run`
embr run lint # everything else does
See embr run, and
Lifecycle hooks for the pre/post entries Ember
fires by itself.
Editor setup#
Using VS Code (or a fork like Cursor)? Install the Even Better TOML
extension, then run embr self code once to get
completions, validation, and hover docs for ember.toml.
Publishing#
embr publish
Signs in with GitHub (device flow, no OAuth scopes requested), and your
first publish claims your scope. Read Publishing before
you ship: authors grants scope co-ownership, and published versions are
immutable.