Skip to content

deal.toml

deal.toml is the project manifest. Every DEAL project has one at the root. It declares project metadata, workspace layout, dependencies, simulation registry, and build targets.

[project]
name = "ev-platform"
version = "0.1.0"
schema = "deal/0.1"
marking = "Unclassified"
description = "Electric vehicle platform model — DEAL language showcase"
FieldRequiredDescription
nameYesProject name (no spaces; used as directory name by deal init)
versionNoSemVer project version
schemaYesDEAL schema version ("deal/0.1")
markingNoClassification marking (e.g., "Unclassified")
descriptionNoHuman-readable project description
[workspace]
packages = [
"packages/*"
]

packages is a list of glob patterns pointing to DEAL packages within the project. Packages are .deal source trees under packages/ by convention (PS-8).

Workspace aliases map short names to package paths. Used in import statements:

[workspace.aliases]
vehicle = "packages/vehicle"
interfaces = "packages/interfaces"
reqs = "packages/requirements"
use_cases = "packages/use-cases"

After declaring this, you can write:

package vehicle.motor;
import interfaces.{HVDCPort, CANBus};
[dependencies]
deal-std = { git = "https://github.com/deal-lang/deal-stdlib", tag = "v0.4.0" }

deal-std is the standard library. The git dependency form uses an exact tag (D-67). No semver ranges — deal install pins the resolved commit SHA in deal.lock.

Dependency formSyntaxUse
Git (pinned tag){ git = "url", tag = "v1.0.0" }Published library
Git (pinned rev){ git = "url", rev = "abc1234" }Specific commit
Local path{ path = "../my-lib" }Sibling repo, no copy

After deal install, git deps are vendored into .deal/deps/<name>/ at the locked SHA.

[simulations]
registry = "simulations/deal.sims.toml"
cache_dir = ".deal/simulations"

Points to the simulation registry file and the local cache directory for simulation I/O.

[build.targets]
sysml-v2 = { format = "json", output = "build/sysml-v2/" }
reqif = { format = "xml", output = "build/reqif/" }
docs = { format = "html", output = "build/docs/", template = "program-review" }

Each target is invoked with deal build --target <name>. The format field selects the codegen backend. The output field sets the output directory.

deal install writes deal.lock alongside deal.toml. It records the resolved commit SHA for every git dependency:

[packages.deal-std]
source = "git+https://github.com/deal-lang/deal-stdlib?tag=v0.4.0"
sha = "abc1234..."

Commit deal.lock to your repository. Reproducible builds require a pinned lockfile.

From the EV platform showcase (spec/examples/showcase/deal.toml):

[project]
name = "ev-platform"
version = "0.1.0"
schema = "deal/0.1"
marking = "Unclassified"
description = "Electric vehicle platform model — DEAL language showcase"
[workspace]
packages = [
"packages/*"
]
[workspace.aliases]
vehicle = "packages/vehicle"
interfaces = "packages/interfaces"
reqs = "packages/requirements"
use_cases = "packages/use-cases"
[dependencies]
deal-std = "0.1"
[simulations]
registry = "simulations/deal.sims.toml"
cache_dir = ".deal/simulations"
[build.targets]
sysml-v2 = { format = "json", output = "build/sysml-v2/" }
reqif = { format = "xml", output = "build/reqif/" }
docs = { format = "html", output = "build/docs/", template = "program-review" }