Manifest Schema
joy supports three joy.toml document shapes:
- project manifest (
[project]) - workspace manifest (
[workspace]) - reusable package manifest (
[package])
Source of truth: src/manifest.rs.
Project Manifest
[project]
name = "demo"
version = "0.1.0"
cpp_standard = "c++20"
entry = "src/main.cpp"
extra_sources = ["src/lib.cpp"]
include_dirs = ["include"]
[[project.targets]]
name = "tool"
entry = "src/tool.cpp"
extra_sources = []
include_dirs = []
[dependencies]
"nlohmann/json" = { source = "github", rev = "HEAD" }
Required project fields:
nameversioncpp_standardentry
Optional project fields:
extra_sources(string[])include_dirs(string[])[[project.targets]](named target list)
Workspace Manifest
[workspace]
members = ["apps/app", "tools/tooling"]
default_member = "apps/app"
profile = "release"
Required workspace fields:
members(string[], non-empty)
Optional workspace fields:
default_member(must be present inmembers)profile(dev|release)
Package Manifest
Used for reusable package publishing workflows.
[package]
id = "acme/widgets"
version = "0.1.0"
kind = "header_only"
[headers]
include_roots = ["include"]
[dependencies]
"fmtlib/fmt" = { source = "github", version = "^11" }
Required package fields:
id(canonical package id)versionkind(header_only|cmake)
Optional package fields:
[headers].include_roots- package-level
[dependencies]
Dependency Spec Contract
Each dependency entry is a DependencySpec:
source- optional
package - source-specific fields:
rev,version,registry,git,path,url,sha256
Source Rules
source = "github"
- supports
revorversion(mutually exclusive) - does not allow
registry,git,path,url,sha256
source = "registry"
- requires
version - disallows
rev - optional
registry - does not allow
git,path,url,sha256
source = "git"
- requires
gitandrev - does not support
version - does not allow
registry,path,url,sha256
source = "path"
- requires
path - disallows
revandversion - does not allow
registry,git,url,sha256
source = "archive"
- requires
urlandsha256 - disallows
revandversion - does not allow
registry,git,path
Dependency Prefix Parsing (CLI Input)
Input prefixes map to source backends:
registry:<id>->registrygithub:<id>->githubgit+<url-or-path>orgit:<url-or-path>->gitpath:<relative-or-absolute-path>->patharchive:<url>->archive- no prefix ->
github