Skip to content
Beskid Platform specification

Beskid

Jump to a Beskid service

Beskid

Jump to a Beskid service

Design model

Spec standingStandard

Owner
Piotr Mikstacki
Submitter
Piotr Mikstacki

Tooling-facing shape of Project.proj: project kind, mod orchestration block, template metadata, readme publishing, and host app launch rules. Resolution-graph behavior and diagnostic bands live in Project manifest contract (compiler)—this article does not duplicate full manifest key tables from the manifests area hub.

flowchart LR
  Host[Host default]
  Mod[Mod]
  Tpl[Template]
  Host -->|implicit corelib| Tooling[CLI / LSP / pack]
  Mod -->|AOT + SDK| Tooling
  Tpl -->|packageKind template| Pack[beskid pckg pack]
project.typeRole
(omitted)Host — default application or library project
ModCompiler-mod package (see below)
TemplateTemplate authoring; published as packageKind: template

Unknown project.type values must be rejected at structural parse time.

Every host project must resolve corelib through toolchain defaults. Manifests must not define noCorelib, useCorelib: false, or equivalent opt-out keys.

The project block may include readme = "relative/path.md". When omitted, tooling treats readme.md at the project root as the default when present. beskid pckg pack publishes the resolved file as root README.md in the .bpk artifact.

When set to Mod, the manifest denotes a compiler-mod package discovered through dependency resolution, compiled AOT, and loaded via SDK contracts during host compilation. User-visible contract semantics: Compiler Mod SDK.

project:
name: ...
type: Mod
mod:
maxGeneratorRounds: 4
capabilities: [emit_syntax]
KeyRequiredMeaning
maxGeneratorRoundsnoPositive cap on generator replay; default 4
capabilitiesnoClosed vocabulary (emit_syntax, read_project_sources, query_semantic_snapshot, extern_ffi, rewrite_syntax)
artifactPolicynoCache policy for fetched mods (reuse, rebuild, clean_rebuild)

Validation phases: structural parse in ProjectManifest build, then graph validation for mod topology (E1801–E1899 band).

Hosted applications use the app executable target. The entry module must perform exactly one launch SomeHost(...) per run. Lib projects may declare reusable host types but must not use launch.

Optional nested block:

project {
type = Template
template {
shortName = "console"
identity = "beskid.templates.console"
}
}

Authoritative engine manifest: .beskid/template.json (beskid.template.v1). See Template packages.

  • Parse + validation: compiler/crates/beskid_analysis/src/projects/parser.rs, validator.rs
  • Manifest resolve: compiler/crates/beskid_analysis/src/projects/manifest_resolve.rs
  • Graph + plan: compiler/crates/beskid_analysis/src/projects/graph/, compile_plan.rs
  • Pack profile: compiler/crates/beskid_pckg/src/pack.rs