Pre-alpha. Nova is in active development. The compiler builds and runs real programs, but the language is not yet API-stable. Expect rough edges.

System requirements

Linux
x86-64, kernel 4.15+
glibc 2.17+ or musl
macOS
13 Ventura+
Apple Silicon or Intel
Windows
Windows 10 / 11
x86-64; MSVC 2022 toolchain
Build from source
Rust 1.78+
Clang 17+ or MSVC 2022

Installation

1

Download the installer script

The installer downloads a pre-built binary, verifies the checksum, and places nova in ~/.local/bin.

curl -fsSL https://nv-lang.org/install.sh | sh

Or download a release tarball and unpack manually.

2

Add to PATH

If ~/.local/bin is not already on your PATH, add it to your shell profile:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

For Zsh use ~/.zshrc instead.

3

Verify

nova --version

Expected output

nova 0.1.0-bootstrap (2026-05-18)
1

Install via Homebrew

brew tap nv-lang/nova
brew install nova

Or use the installer script:

curl -fsSL https://nv-lang.org/install.sh | sh
2

Verify

nova --version

Expected output

nova 0.1.0-bootstrap (2026-05-18)
Prerequisite: Install Visual Studio 2022 with the "Desktop development with C++" workload, which provides the MSVC linker and CRT headers.
1

Install via winget

winget install NvLang.Nova

Or download the .msi installer from the GitHub Releases page.

2

Verify (PowerShell)

nova --version

Expected output

nova 0.1.0-bootstrap (2026-05-18)
1

Prerequisites

Install Rust (stable, 1.78+) and Clang 17+ (or MSVC 2022 on Windows).

rustup update stable
2

Clone and build

git clone https://github.com/nv-lang/nova
cd nova/compiler-codegen
cargo build --release

The compiler binary lands at target/release/nova-codegen. Add it to your PATH or symlink it as nova.

3

Run the test suite (optional)

cargo test --lib

Expect ~300 tests to pass. One known-failing test (fn_static_method) is a pre-existing WIP.

Your first Nova program

Create a file called hello.nv:

module hello

fn main() {
    println("Hello, Nova!")
}

Compile and run:

nova run hello.nv

Output

Hello, Nova!

Effects in 30 seconds

Nova requires every side effect to be declared in the function signature. The compiler verifies that no undeclared effects are performed — at compile time, not at runtime.

// Effects appear between parameters and return type.
// Io means this function may perform I/O.
// The compiler rejects calls to Io functions from non-Io contexts.
fn greet(name str) Io -> () {
    println("Hello, ${name}!")
}

fn main() {
    greet("Nova")
}

Effects appear between parameters and the return type. The compiler verifies statically that every effect is declared — no hidden I/O, no surprise failures.

Editor setup

VS Code
Syntax highlighting, basic language server.
Install extension →
JetBrains IDEs
IntelliJ / CLion / Rider plugin. Syntax + structure view.
Install plugin →
Vim / Neovim
Tree-sitter grammar and LSP config via Mason.
View on GitHub →

Next steps