System requirements
C toolchain and Boehm GC development files
C toolchain, e.g. Visual Studio Build Tools
A C compiler is still required
Installation
Download the Oracle bundle for your platform from the release page.
Verify the archive against SHA256SUMS for that release, then unpack it.
The bundles include the CLI, nova-lsp, standard library and C runtime.
Follow the README-INSTALL.md inside your archive.
Windows x86_64
Unpack nova-oracle-0.1.0-windows-x86_64.zip. Install a C compiler, for example Visual Studio Build Tools with C++ support. Boehm GC libraries and headers are bundled.
In PowerShell, from the directory containing nova.exe, dot-source the setup script. The leading dot keeps the environment settings in this session:
. .\setup-env.ps1
nova --version
Linux x86_64
Unpack nova-oracle-0.1.0-linux-x86_64.tar.gz. On Debian/Ubuntu, install the C toolchain and Boehm GC development files:
sudo apt-get install clang cmake make libgc-dev build-essential
In Bash, from the root of the unpacked distribution:
source ./setup-env.sh
nova --version
Source builds and Carina
The release page also provides source snapshots with submodules. For an Oracle source build, use the repository's Linux build guide and the platform prerequisites.
Carina 0.2.0 is the compiler written in Nova. Its published binary is Windows x86_64 only; the accepted milestone is self-compilation, not the full Oracle CLI or package ecosystem. Follow the separate archive's instructions.
Your first Nova program
Create a separate project directory. Add nova.toml first: the compiler searches upward for this package manifest.
[package]
name = "hello"
version = "0.1.0"
In the same directory, create hello.nv. Its module name matches the package name:
module hello
fn main() {
println("Hello, Nova!")
}
From the project directory, in the session where you ran the setup script, build and run. Windows PowerShell:
nova build hello.nv
.\hello.exe
Linux Bash:
nova build hello.nv
./hello
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.