pesde.toml
pesde.toml
is the manifest file for a pesde package. It contains metadata about
the package and its dependencies.
Top-level fields
name = "acme/package"version = "1.2.3"description = "A package that does foo and bar"license = "MIT"repository = "https://github.com/acme/package"
name
The name of the package. This is used to identify the package in the registry.
The name consists of a scope and a package name, separated by a slash (/
). It
may only contain lowercase letters, numbers, and underscores.
The first one to publish to a given scope gets to own it. If you want multiple
people to be able to publish to the same scope, you can send a pull request to
the pesde-index GitHub repository
and add the GitHub user ID of the other person to the owners
field of the
scope.toml
file of the given scope. For more information, see
policies.
version
The version of the package. This must be a valid SemVer
version, such as 1.2.3
.
description
A short description of the package. This is displayed on the package page in the registry.
license
The license of the package. It is recommended to use a
SPDX license identifier, such as MIT
or
Apache-2.0
.
authors
A list of authors of the package. Each author is a string containing the name of the author, optionally followed by an email address in angle brackets, and a website URL in parentheses. For example:
repository
The URL of the repository where the package is hosted. This is displayed on the package page in the registry.
private
A boolean indicating whether the package is private. If set to true
, the
package cannot be published to the registry.
includes
List of globs to include in the package when publishing. Files and directories not listed here will not be published.
includes = [ "pesde.toml", "README.md", "LICENSE", "init.luau", "docs/**/*.md",]
workspace_members
A list of globs containing the members of this workspace.
[target]
The [target]
section contains information about the target platform for the
package.
[target]environment = "luau"lib = "init.luau"
environment
The target environment for the package. This can be one of the following:
luau
: Standalone Luau code that can be run using theluau
CLI.lune
: Luau code that requires the Lune runtime.roblox
: Luau code that must be run in Roblox.roblox_server
: Same asroblox
, but only for server-side code.
lib
Allowed in: luau
, lune
, roblox
, roblox_server
The entry point of the library exported by the package. This file is what will
be required when the package is loaded using require
.
bin
Allowed in: luau
, lune
The entry point of the binary exported by the package. This file is what will be run when the package is executed as a binary.
build_files
Allowed in: roblox
, roblox_server
A list of files that should be synced to Roblox when the package is installed.
build_files = [ "init.luau", "foo.luau",]
These files are passed to roblox_sync_config_generator
when the package is installed in order to generate the necessary configuration.
scripts
Allowed in: luau
, lune
A list of scripts that will be linked to the dependant’s .pesde
directory, and
copied over to the scripts section when initialising a project with
this package as the scripts package.
[target.scripts]roblox_sync_config_generator = "scripts/roblox_sync_config_generator.luau"
[scripts]
The [scripts]
section contains scripts that can be run using the pesde run
command. These scripts are run using Lune.
[scripts]build = "sripts/build.luau"test = "scripts/test.luau"
There are also a few special scripts that are run in certain cases by pesde.
roblox_sync_config_generator
This is responsible for generating adequate configuration files for Roblox sync tools.
process.args
will contain the directory containing the package, and the list
of files specified within the target.build_files
of the
package.
sourcemap_generator
This is responsible for generating source maps for packages that are installed. This is required to get proper types support when using Wally dependencies.
The script will receive the path to the package directory as the first argument
through process.args
.
[indices]
The [indices]
section contains a list of pesde indices where packages can be
installed from.
[indices]default = "https://github.com/pesde-pkg/index"acme = "https://github.com/acme/pesde-index"
These can then be referenced in the dependencies
of the
package. The default
index is used if no index is specified.
[dependencies]foo = { name = "acme/foo", version = "1.2.3", index = "acme" }
[wally_indices]
The [wally_indices]
section contains a list of Wally indices where packages
can be installed from. This is used for
Wally dependencies.
[wally_indices]default = "https://github.com/UpliftGames/wally-index"acme = "https://github.com/acme/wally-index"
These can then be referenced in the dependencies
of the
package. The default
index is used if no index is specified.
[dependencies]foo = { wally = "acme/foo", version = "1.2.3", index = "acme" }
[overrides]
The [overrides]
section contains a list of overrides for dependencies. This
allows you to replace certain dependencies with different versions or even
different packages.
[overrides]"bar>baz" = { name = "acme/baz", version = "1.0.0" }"foo>bar,baz>bar" = { name = "acme/bar", version = "2.0.0" }
The above example will replace the baz
dependency of the bar
package with
version 1.0.0
, and the bar
and baz
dependencies of the foo
package with
version 2.0.0
.
Each key in the overrides table is a comma-separated list of package paths. The
path is a list of aliases separated by >
. For example, foo>bar>baz
refers to the baz
dependency of the bar
package, which is a dependency of
the foo
package.
The value of an override entry can be either a specifier or an alias. If it is an alias (a string), it will be equivalent to putting the specifier of the dependency under that alias. For example, the following two overrides are equivalent:
[dependencies]bar = { name = "acme/bar", version = "2.0.0" }
[overrides]"foo>bar" = "bar"
[overrides]"foo>bar" = { name = "acme/bar", version = "2.0.0" }
[patches]
The [patches]
section contains a list of patches for dependencies. This allows
you to modify the source code of dependencies.
[patches]"acme/foo" = { "1.0.0 luau" = "patches/acme+foo-1.0.0+luau.patch" }
The above example will patch version 1.0.0
with the luau
target of the
acme/foo
package using the patches/acme+foo-1.0.0+luau.patch
file.
Each key in the patches table is the package name, and the value is a table where the keys are the version and target, and the value is the path to the patch.
The patches can be generated using the pesde patch
command.
[place]
This is used in Roblox projects to specify where packages are located in the Roblox datamodel.
[place]shared = "game.ReplicatedStorage.Packages"server = "game.ServerScriptService.Packages"
[dependencies]
The [dependencies]
section contains a list of dependencies for the package.
[dependencies]foo = { name = "acme/foo", version = "1.2.3" }bar = { wally = "acme/bar", version = "2.3.4" }baz = { repo = "acme/baz", rev = "main" }
Each key in the dependencies table is the name of the dependency, and the value is a dependency specifier.
There are several types of dependency specifiers.
pesde
[dependencies]foo = { name = "acme/foo", version = "1.2.3", index = "acme", target = "lune" }
pesde dependencies contain the following fields:
name
: The name of the package.version
: The version of the package.index
: The pesde index to install the package from. If not specified, thedefault
index is used.target
: The target platform for the package. If not specified, the target platform of the current package is used.
Wally
[dependencies]foo = { wally = "acme/foo", version = "1.2.3", index = "acme" }
Wally dependencies contain the following fields:
wally
: The name of the package.version
: The version of the package.index
: The Wally index to install the package from. If not specified, thedefault
index is used.
Git
[dependencies]foo = { repo = "acme/packages", rev = "aeff6", path = "foo" }
Git dependencies contain the following fields:
repo
: The URL of the Git repository. This can either be<owner>/<name>
for a GitHub repository, or a full URL.rev
: The Git revision to install. This can be a tag or commit hash.path
: The path within the repository to install. If not specified, the root of the repository is used.
Workspace
[dependencies]foo = { workspace = "acme/foo", version = "^" }
Workspace dependencies contain the following fields:
workspace
: The name of the package in the workspace.version
: The version requirement for the package. This can be^
,*
,=
,~
, or a specific version requirement such as^1.2.3
.
Path
[dependencies]foo = { path = "/home/user/foo" }
Path dependencies contain the following fields:
path
: The path to the package on the local filesystem.
Path dependencies are forbidden in published packages.
[dev_dependencies]
The [dev_dependencies]
section contains a list of development dependencies for
the package. These are dependencies that are only required during development,
such as testing libraries or build tools. They are not installed when the
package is used by another package.
[dev_dependencies]foo = { name = "acme/foo", version = "1.2.3" }
[peer_dependencies]
The [peer_dependencies]
section contains a list of peer dependencies for the
package. These are dependencies that are required by the package, but are not
installed automatically. Instead, they must be installed by the user of the
package.
[peer_dependencies]foo = { name = "acme/foo", version = "1.2.3" }
[engines]
The [engines]
section contains a list of engines that the package is compatible
with.
[engines]pesde = "^0.6.0"lune = "^0.8.9"
Currently, the only engines that can be specified are pesde
and lune
.
Additionally, the engines you declared in your project will be installed when
you run pesde install
. Then, a version of the engine that satisfies the
specified version range will be used when you run the engine.