# Packages, releases and the registry

> How a game becomes a versioned package, what the registry keeps, and what publishing checks.

A **package** is the game as files: modules, assets and a `game.json`
manifest with a version. It is packed into one archive whose bytes are
canonical, so the same project always gives the same archive and digest.

A **release** is one published version of a game, such as
`creator/football` `1.2.0`. Releases never change: publishing again
requires a new version.

The **registry** stores releases under a **namespace** (your account or a
team) and a game name. A game is **public** (listed), **unlisted** (anyone
with the link) or **private** (only you). Room hosts load releases from the
registry.

**Publishing** packs the game and runs the release checks: the same checks
that the registry and every room host run before loading a game, such as
archive limits, file names and asset types. A package that passes them
loads everywhere.

- From the Studio: [Publish](/studio/publishing).
- From code: [Publish a release](/get-started/publish) with
  `disko publish`.
- More detail: [Releases](/registry/releases) and
  [Games and namespaces](/registry/games-and-namespaces).
