Systems programming language
NovaC. Systems code with modern ergonomics.
NovaC is a systems programming language. Its compiler turns NovaC into clean C99, which GCC or Clang builds into a native program, so you keep your existing C toolchain and gain memory safety checked at compile time.

In the language
- Ownership checked at compile time
- No garbage collector
- Readable C99 output
- A content-addressed build cache
Who it is for
C runs almost everywhere, and memory bugs in C are costly. NovaC keeps the output and the toolchain, and moves the checking into the compiler.
Embedded and systems developers
Target anything a C compiler supports, without a runtime or garbage collector in the way.
Teams with C toolchains
Keep GCC or Clang, your build system and your optimisation flags.
Language and compiler enthusiasts
Read the C that your program turns into, and see exactly what the compiler did.
What it offers
Safety in the compiler, speed from your C toolchain.
Memory safety
Ownership and borrowing are checked at compile time, which rules out use-after-free and similar mistakes without a garbage collector.
Abstractions that compile away
Iterators, closures and generics are designed to turn into the C you would have written by hand.
Readable C99 output
The generated C is human-readable, so you can inspect it and debug it with familiar tools.
Native through your compiler
GCC or Clang does the final build, so its optimisations and flags are available to you.
A content-addressed build cache
Results are cached by a hash of the source, so identical code is not compiled twice, on one machine or across a team.
Written in Rust
The compiler itself is a Rust program with a parser, a high-level and a mid-level representation, and a C code generator.
Compiler pipeline
From a source file to a native binary.
Write NovaC
Source files use the .nc extension and read like modern systems code, with functions, ownership and types.
Compile to C99
The NovaC compiler parses and checks the program, then emits clean C99.
Build natively
Your C compiler turns that C into a native binary, using the optimisation settings you choose.
NovaC
Interested in NovaC?
Tell us what you would like to build with it, and we will tell you where it stands.


