Skip to content
Beskid The Beskid Book

Beskid

Jump to a Beskid service

Beskid

Jump to a Beskid service

03.1 Project manifest

.bproj blocks—project identity, source root, targets, and path dependencies.

Project manifest

Project manifests use the .bproj extension and Bsol block syntax—HCL-like blocks parsed by Beskid tooling, not full Terraform HCL, not JSON with extra steps. One file per project directory, explicit intent.

Legacy Project.proj is rejected (E1894); rename to <name>.bproj.

MyApp/
├── MyApp.bproj
├── Src/
│ └── Main.bd
├── obj/
│ └── beskid/
└── Project.lock
MyApp {
name = "MyApp"
version = "0.1.0"
root = "Src"
root_namespace = "Company.Product"
}
target "App" {
kind = App
entry = "Main.bd"
}
dependency "Std" {
source = path
path = "../Std"
}

The root block kind MyApp must match name = "MyApp".

  • Named root block { ... } — identity, version, source root (root, default Src), optional root_namespace (metadata for package namespace conventions; does not change file-to-module mapping).
  • target "<name>" { ... } — buildable unit (kind, entry; entry optional for Lib targets).
  • dependency "<name>" { ... } — edge in the dependency graph (source, plus provider fields).

Corelib symbols are not prelude-injected; add explicit use imports for modules you need. Host projects still resolve corelib on the dependency graph by default.

Path dependencies are the enabled provider. git and registry may appear in schema for forward compatibility but are provider-disabled in active graphs—do not plan your startup on them until the spec says otherwise.

Exactly one named root block (kind equals name), at least one target, unique labels, entries resolvable under project.root where required. Details: manifest reference and project manifest contract.

Targets and outputs