A typed language that compiles to C

Ignis is strongly typed and immutable by default, with generics, traits, pattern matching and borrow checking. It emits portable C and links native executables through GCC.

v0.4.0
Current release
No GC
Ownership checked
C ABI
Links with anything
main.ignignis build
import Io from "std::io";

record Point {
  public x: f64;
  public y: f64;
}

function main(): i32 {
  let p: Point = Point { x: 3.0, y: 4.0 };
  Io::println("Hello, Ignis!");
  return 0;
}
→ ./main · exit 0 · Hello, Ignis!
Write

Types that hold at the edges

Immutability by default, explicit references and pointers, exhaustive pattern matching.

Check

Ownership before codegen

Borrow analysis over HIR, drop schedules resolved for every exit path.

Build

C out, native binary in

Monomorphized generics lowered to C, compiled and linked with GCC.

The language, in three doors

Language reference

Syntax · types · traits

Every construct with the grammar it parses from — records, enums, generics, closures, extern blocks and compile-time directives.

Read the reference ↗

Standard library

io · fs · path · test · libc

Collections, UTF-8 strings, filesystem and path handling, a C runtime, and a test namespace with assertions and snapshots.

Browse std ↗

About the project

Compiler · roadmap · license

Why Ignis exists, how the Rust compiler is structured from parser to C codegen, and where the language goes after v0.4.

About Ignis ↗

Install and compile in one step

$ curl -fsSL https://raw.githubusercontent.com/Ignis-lang/ignis/main/scripts/install.sh \
    | sudo bash
$ ignis build src/main.ign
$ ./main

Requires Linux amd64, GCC, binutils and make. v0.4.0 is experimental — syntax may change between versions.