Skip to Content
ConceptsWhat is a Package?

What is a “Package”?

Packages have been used in software development for decades. They are a core part of modern development workflows, but to many in the virtual experience space, packages and package managers are a new concept.

A package is a bundle of code that accomplishes a specific task. Packages can be as small as a single function, or as large as an entire framework. As an analogy, think of making spaghetti. You need several ingredients to make spaghetti, such as pasta, sauce, and meatballs. Each of these ingredients can be thought of as a package.

Developing games without a package manager is like making spaghetti from scratch. You have to gather, or “re-invent”, all the ingredients yourself, which can be time-consuming and error-prone.

Modern Development Challenges Without Packages

Without packagesWith a package manager
Common tasksRe-invent solved problems yourself, duplicating effort on every project.Install a proven package and build on it.
Bug fixesA bug copied into five projects must be found and fixed five times.Fix it once, publish a new version, and every project picks it up with one update.
Team code sharingCopied folders drift apart; teammates end up on different versions of the “same” code.Everyone installs by name and version; the lockfile guarantees the whole team gets an identical tree.
CommunityCut off from shared libraries and open-source contributions.A whole registry of maintained, licensed, community-built packages.

Using packages allows developers to leverage existing code, reduce duplication, and streamline collaboration.

What is a “Package Manager”?

As the name suggests, a package manager is a tool that helps you manage packages. It handles the installation, updating, and removal of packages, as well as managing dependencies between packages.

Package managers have been widely adopted in other programming communities for years, such as npm for JavaScript, pip for Python, and Maven for Java.

Forest across platforms

Forest is one registry and one CLI serving more than one game platform. The ideas in this Concepts section, packages, publishing, versioning, dependencies, private access, and Studios, are the same no matter what you build for. What changes is how packages are laid out and imported once they reach your project, and that lives under Platforms:

  • Roblox: Luau packages requested by instance path, installed into a Packages/ folder you mount in the datamodel.
  • UEFN: Verse packages imported with using, installed flat under Content/ForestPackages.

Each package targets exactly one platform, recorded as the platform field in its forest.json.

Last updated on