Beskid Project Manifest (`Project.proj`)
Project.proj is the canonical project manifest format, using HCL syntax.
File name and location
Section titled “File name and location”- Name:
Project.proj - Location: project root directory
Minimal example
Section titled “Minimal example”project { name = "MyApp" version = "0.1.0" root = "Src"}
target "App" { kind = "App" entry = "Main.bd"}
dependency "Std" { source = "path" path = "../Std"}Manifest schema (v0.1)
Section titled “Manifest schema (v0.1)”project block (required, exactly one)
Section titled “project block (required, exactly one)”name(string, required)version(string, required)root(string, optional, default:"Src")
target block (required, one or more)
Section titled “target block (required, one or more)”- Label = target name (unique)
kind(required):"App" | "Lib" | "Test"entry(required): path relative toproject.root
dependency block (optional, zero or more)
Section titled “dependency block (optional, zero or more)”- Label = dependency alias used by tooling
source(required):"path" | "git" | "registry"
For source = "path":
path(required)
For source = "git" (provider reserved, not enabled in v1):
url(required)rev(required)
For source = "registry" (provider reserved, not enabled in v1):
name(required)version(required)
Active provider scope (v1)
Section titled “Active provider scope (v1)”- Enabled dependency provider:
path. gitandregistryare schema-valid for forward compatibility but provider-disabled in runtime scope.- Build/run fails when a disabled provider dependency is present in an active graph.
Validation rules
Section titled “Validation rules”- Exactly one
projectblock. - At least one
targetblock. - Target labels must be unique.
- Dependency labels must be unique.
target.entrymust resolve underproject.root.- Dependency node identity is canonicalized by resolved manifest path.
- Duplicate canonical manifest identities in graph construction must be interned to one node.
project.nameduplicates across different manifest identities should be diagnostics in graph-resolution stage (warning in v0.1, error in strict mode).- Unknown fields should produce warnings in v0.1 and become errors later.
- Dependency sources are source-code only; binary dependency artifacts are unsupported.
Project.lockis created automatically during resolve/build/run if missing.Project.lockis updated automatically when dependency graph identity changes.
Rust implementation guidance
Section titled “Rust implementation guidance”- Parse and validate manifest with
hcl-rs+ serde structs. - Use
hcl-editfor formatting and migration tooling. - Build dependency DAG with
daggyand preserve unresolved non-path dependency nodes for policy diagnostics. - Materialize resolved dependencies into
obj/beskid/deps/srcbefore compile stages.