A tiny interpreted language with expressive expectations and recovery.
See installation steps in docs/INSTALL.md.
Build (Debug) and run an example:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build --config Debug
.\build\Debug\forge.exe run .\examples\expect_showcase.fg
Windows PowerShell note: If running from build\Debug, pass paths like ..\..\examples\expect_showcase.fg.
Terminal install (Windows):
# Install latest release into %LOCALAPPDATA%\ForgeLang\bin and add to PATH
irm https://raw.githubusercontent.com/FrostByte232/ForgeLang/main/scripts/install.ps1 | pwsh -c -
# Then open a new terminal and run
forge --version
forge --help
- Lexer, parser, type checker, and interpreter
- @expect system with recovery blocks, suggestions, composite analysis, journaling, and summaries
- CLI filters for expectations: severity and tags
- Built-ins: println, length()
See docs/EXPECTATIONS.md for the full @expect feature guide.
Run a program:
.\build\Debug\forge.exe run path\to\file.fg
Flags:
- -i, --interactive Enable interactive expectation recovery
- --expect-min-severity=<info|warn|error|fatal> Filter expectations below severity
- --expect-include-tags=a,b Only include these tags
- --expect-exclude-tags=a,b Exclude these tags
- --no-color Disable ANSI colors
- --list-examples List bundled example scripts
- -h, --help Show usage
- examples/expect_showcase.fg — Demonstrates @expect variants, composite analysis, suggestions, and summary.
List bundled examples:
.\build\Debug\forge.exe --list-examples
Typical workflow:
cmake --build build --config Debug
.\build\Debug\forge.exe ..\..\composite_condition_test.fg
Project structure highlights:
- include/ headers
- src/ sources
- examples/ runnable scripts
- docs/ feature docs
Prebuilt binaries (Windows) will be attached to GitHub Releases for tags v*. Create a new release by pushing a tag, e.g. v0.1.0.
To install from the latest release manually:
$uri = "https://github.com/FrostByte232/ForgeLang/releases/latest/download/forge-windows-x64.zip"
$dest = "$env:LOCALAPPDATA/ForgeLang/bin"; New-Item -ItemType Directory -Path $dest -Force | Out-Null
Invoke-WebRequest -Uri $uri -OutFile "$env:TEMP/forge.zip" -UseBasicParsing
Expand-Archive -Path "$env:TEMP/forge.zip" -DestinationPath $dest -Force
setx PATH "$env:Path;$dest" | Out-Null
MIT
.png)

