Getting Started
This guide takes you from zero to a working Rank program. By the end you will have installed the compiler, written a .rank file, and produced your first output.
If you want the language model before you install anything, read Introduction and Concepts. After this guide, use the CLI reference and Examples as your working reference.
Requirements
- Node.js 20 or newer
- npm 10 or newer
Install
npm install -g @rank-lang/cli
Verify it worked:
rank --help
You should see the command summary printed to your terminal.
Your first program
Create a new project directory with a manifest and a source file:
mkdir hello-rank
cd hello-rank
Create rank.toml:
manifestVersion = 1
[package]
name = "hello-rank"
version = "0.1.0"
source = "src"
Create src/main.rank:
greeting = `Hello, Rank!`
config = {
message: greeting,
version: 1,
}
pub main = || config
Check the program
Run the type-checker to validate the program without producing output:
rank check src/main.rank
No output means no errors. If there is a problem, the compiler prints a diagnostic with a source location.
Produce output
Run the program and emit YAML, which is the default:
rank src/main.rank
You should see:
message: Hello, Rank!
version: 1
If you prefer JSON, pass --format json:
rank src/main.rank --format json
{
"message": "Hello, Rank!",
"version": 1
}
The primary rank command prints YAML for ordinary document results by default and supports --format json for JSON output. If you need multiple generated artifacts, return Emit::manifest(...) from pub main instead. See Output and manifests.
Add a type annotation
Rank lets you annotate bindings with explicit types. Add a type to config in src/main.rank:
Config = Object {
message: string,
version: number,
}
greeting = `Hello, Rank!`
config: Config = {
message: greeting,
version: 1,
}
pub main = || config
Run rank check src/main.rank again — the compiler now validates that config matches the Config type.
Try introducing a type error:
config: Config = {
message: greeting,
version: `not a number`,
}
rank check src/main.rank
The compiler reports the mismatch with a source location before any output is produced.
Read an environment variable
Rank reads environment variables through the Env<T> {} built-in. Update src/main.rank:
SysEnv = Object {
APP_ENV: string,
...: string,
}
env = Env<SysEnv> {}
config = {
message: `Hello, Rank!`,
version: 1,
env: env.APP_ENV,
}
pub main = || config
Run it with the variable set:
APP_ENV=production rank src/main.rank
message: Hello, Rank!
version: 1
env: production
The same command also accepts --format json when you need machine-readable stdout.
If APP_ENV is not set, the compiler reports a missing environment variable diagnostic.
What's next
- Concepts — understand the design principles behind Rank
- Language reference — bindings, types, functions, imports, and the standard library
- Output and manifests — single-document output and multi-file generation
- Errors and diagnostics — common failure modes and how to interpret them
- CLI reference — all commands and flags
- Faker provider — generate typed fake data