Shuttle projects
Shuttle manages a package described by Shuttle.toml. A Shuttle package is a
build and distribution unit; it may contain many directory-based Cloth source
packages.
A minimal application
manifest-version = 1
[package]
name = "hello-world"
version = "0.1.0"
source-root = "src"
[executable]
name = "hello-world"
entry = "Main.co"The source root is relative to the manifest’s directory.
The entry path is relative to the source root and names the file containing the
eligible Main.
manifest-version and [package] are required.
[executable] and [dependencies] are optional. A package without an
executable can be checked and consumed as a dependency.
One executable is supported; its name defaults to the package name.
Package names use lowercase letters and digits with hyphens between words.
Versions are exact semantic versions. Paths in manifests use /.
The source root must stay inside the package directory after resolution. Source filenames and package-directory components must be Cloth identifiers. Unknown manifest fields are errors.
Check, build, and run
shuttle check
shuttle build
shuttle runThese commands discover clothc beside Shuttle or on PATH. The --compiler
option instead selects an explicit filesystem path, relative to the current
directory or absolute; it does not search PATH for the supplied name.
By default, Shuttle searches the current directory and its parents for the
nearest Shuttle.toml. Select a manifest explicitly with:
shuttle run --manifest-path my-app/Shuttle.toml --compiler path/to/clothcOn Windows, supply the compiler’s .exe path when needed.
Checking keeps validated interface artifacts beneath
target/TARGET/check/packages/. Native builds keep object artifacts beneath
target/x86_64/packages/ and the executable beneath target/x86_64/.
Shuttle reuses unchanged local artifacts after compiler validation. Independent
ready packages can build concurrently; --jobs 4 limits the scheduler to four
jobs.
Local dependencies
Add direct local dependencies with source-visible aliases:
[dependencies]
models = { path = "../models" }
text_utils = { path = "../text-utils" }Each relative path names a directory containing its own Shuttle.toml.
Sibling dependency paths may leave the current package directory.
Aliases begin with a lowercase letter and continue with lowercase letters,
digits, or underscores; keywords are invalid aliases.
In Cloth source:
import models::User;
import text_utils.formatting::Formatter;The alias is the leading package component. It is independent of the manifest package name. Only direct dependencies are visible; transitive dependencies are not automatically imported. A dependency’s own executable does not supply the application’s entry point.
Current boundary
Local dependency graphs and compiled artifact reuse are supported. Remote registries, version solving, Git dependencies, manifest workspaces, and a distributed standard library are not currently provided.
Manifest schema, process protocol, and compiled artifact versions are distinct. See compatibility when updating a toolchain.