ghul.project
0.48.3
Prefix Reserved
dotnet add package ghul.project --version 0.48.3
NuGet\Install-Package ghul.project -Version 0.48.3
<PackageReference Include="ghul.project" Version="0.48.3" />
<PackageVersion Include="ghul.project" Version="0.48.3" />
<PackageReference Include="ghul.project" />
paket add ghul.project --version 0.48.3
#r "nuget: ghul.project, 0.48.3"
#:package ghul.project@0.48.3
#addin nuget:?package=ghul.project&version=0.48.3
#tool nuget:?package=ghul.project&version=0.48.3
ghul.project
Reads and checks a ghūl project's manifest — the ghul-project.json in a
project's root directory that says what the project is called, where its
sources are and what it depends on. Nothing here builds anything yet; this is
the model and the reader that later commands are written against.
using it
use Ghul.Project.MANIFEST_LOCATION
use Ghul.Project.MANIFEST_READER
let path = MANIFEST_LOCATION.find_in("/path/to/project")
if path? then
let outcome = MANIFEST_READER.read(IO.File.read_all_text(path!), path!)
case outcome
when manifest: ReadOutcome.OK then
write_line(manifest.name)
when ReadOutcome.PROBLEMS then
for problem in manifest.problems do
write_line("ghul: {problem.describe()}")
od
esac
fi
The reader takes text and the path it came from, and touches no file and no
network itself. MANIFEST_LOCATION.find_in looks in one directory and does not
search upwards: a project is what its own root says it is.
what a manifest says
{
"name": "example-app",
"version": "0.1.0",
"kind": "program",
"targets": ["wasm", "dotnet"],
"sources": ["src/**/*.ghul"],
"compiler": "64.5.38",
"options": {
"underscore-access": "private",
"global-namespace": false,
"default-use": ["Collections", "IO.Std.write_line"],
"define": [],
"suppress": [],
"warn-as-error": []
},
"dependencies": {
"ghul-core": { "git": "https://github.com/ghul-lang/ghul-core", "tag": "v1.2.0" },
"parsing": { "git": "https://example.com/libs.git", "branch": "main", "directory": "parsing" },
"scratch": { "path": "../scratch" }
}
}
Only name is required. What the rest default to when the manifest leaves them
out:
version— nothing; a manifest does not need onekind—programtargets—["dotnet"]sources—["src/**/*.ghul"]compiler— whatever compiler is installedoptions— the compiler's own defaultsdependencies— nothing
Comments and a trailing comma are allowed, since a manifest is written by hand.
what it checks
Every problem in a manifest is reported, not only the first, and each one names the key it is about:
- a missing
name, or one that is not a library name — lowercase letters, digits and-, starting with a letter - a key that is not one the manifest may carry, at any level: the top level,
inside
options, inside a dependency, or inside a git dependency, so a misspelling is not silently ignored - a
kindor a target that is not one of the two - a member or option whose value is of the wrong shape
- a dependency with both a
gitand apath, or with neither - a git dependency with neither a
tagnor abranch
A manifest with any of those in it is not a manifest, so reading one returns the problems rather than a model that is partly made up.
what is not here yet
The lockfile, a git dependency at a branch rather than a tag, and dependencies for the dotnet target are the tasks that follow. See ghul-lang/ghul#3211.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- ghul.runtime (>= 24.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.48.3 | 0 | 10/8/2026 |
| 0.48.2 | 54 | 10/5/2026 |
| 0.48.1 | 46 | 10/5/2026 |
| 0.48.0 | 54 | 10/5/2026 |
| 0.47.6 | 67 | 10/5/2026 |
| 0.47.5 | 70 | 10/5/2026 |
| 0.47.4 | 82 | 10/5/2026 |
| 0.47.3 | 78 | 10/5/2026 |
| 0.47.2 | 81 | 10/4/2026 |
| 0.47.1 | 76 | 10/4/2026 |
| 0.47.0 | 81 | 10/4/2026 |
| 0.46.0 | 83 | 10/4/2026 |
| 0.45.0 | 85 | 10/4/2026 |
| 0.44.0 | 82 | 10/4/2026 |
| 0.43.2 | 85 | 10/4/2026 |
| 0.43.1 | 80 | 10/4/2026 |
| 0.43.0 | 81 | 10/4/2026 |
| 0.42.0 | 84 | 10/4/2026 |
| 0.41.1 | 86 | 10/4/2026 |
| 0.41.0 | 90 | 10/4/2026 |