Caution
Ignis is under active development and evolving. It is currently in its early stages and is an experimental language. APIs and syntax may change between versions.
Ignis is a general-purpose programming language with strong, static typing, and immutability by default. Inspired by TypeScript and Rust, Ignis compiles to C and produces native executables via GCC.
- Strong static typing:
i8-i64,u8-u64,f32,f64,boolean,char,str,atom - Immutability by default:
letfor immutable,let mutfor mutable - Generics: Type parameters for functions, records, enums, and type aliases
- Records and enums: User-defined types with fields, methods, and variants
- Traits: Lang traits (
Drop,Clone,Copy) and user-defined traits - Pattern matching:
matchexpressions,if let,while let,let else - Namespaces: Module-level organization with
::access - References and pointers:
&T,&mut T,*T,*mut T - Control flow:
if/else,while,for,for-of,break,continue - Extension methods:
@extension(Type)for adding methods to existing types - Function overloading: Multiple functions with the same name, different signatures
- Modules:
import/exportfor multi-file projects - FFI:
externblocks for C interop - Borrow checking: Rust-style borrow analysis
See docs/LANGUAGE_REFERENCE_CURRENT.md for full language documentation.
- Linux (amd64 for release artifacts)
- GCC,
ar(binutils), andmake
# Install to /usr/local (requires sudo)
curl -fsSL https://raw.githubusercontent.com/Ignis-lang/ignis/main/scripts/install.sh | sudo bash
# Install to ~/.local (no sudo required)
curl -fsSL https://raw.githubusercontent.com/Ignis-lang/ignis/main/scripts/install.sh | bash -s -- --prefix ~/.local# Build from source with the installer
curl -fsSL https://raw.githubusercontent.com/Ignis-lang/ignis/main/scripts/install.sh | bash -s -- --build
# Or build manually
git clone https://github.com/Ignis-lang/ignis.git
cd ignis
cargo build --release -p ignis
./target/release/ignis --helpcd scripts
makepkg -si# Run from flake
nix run github:Ignis-lang/ignis
# Install in your profile
nix profile install github:Ignis-lang/ignis
# Development shell
nix develop github:Ignis-lang/ignisOr with traditional Nix:
nix-build
./result/bin/ignis --help# Uninstall from /usr/local
curl -fsSL https://raw.githubusercontent.com/Ignis-lang/ignis/main/scripts/uninstall.sh | sudo bash
# Uninstall from ~/.local
curl -fsSL https://raw.githubusercontent.com/Ignis-lang/ignis/main/scripts/uninstall.sh | bash -s -- --prefix ~/.localsha256sum -c ignis-linux-amd64.tar.gz.sha256
# Optional: verify detached signature if present
gpg --verify ignis-linux-amd64.tar.gz.asc ignis-linux-amd64.tar.gzCreate a file hello.ign:
import Io from "std::io";
function main(): void {
Io::println("Hello, Ignis!");
return;
}
Build and run:
# Build the standard library (first time only)
ignis build-std
# Compile and run
ignis build hello.ign
./build/hello# Compile a single file
ignis build main.ign
# Compile a project (uses ignis.toml)
ignis build
# Build the standard library
ignis build-std
# Additional options
ignis build main.ign --emit-c out.c # Output generated C code
ignis build main.ign --dump hir # Dump HIR for debugging
ignis build main.ign --dump hir --dump-hir main # Dump HIR for a specific function
ignis build main.ign --debug --debug-trace analyzer
ignis build main.ign --debug # Enables -vv logs + debug traces
ignis build main.ign -O # Enable optimizationsimport Io from "std::io";
import String from "std::string";
record Box<T> {
value: T;
}
function identity<T>(x: T): T {
return x;
}
function main(): void {
let box: Box<i32> = Box { value: 42 };
let result: i32 = identity<i32>(box.value);
Io::println(String::toString(result));
return;
}
For multi-file projects, create an ignis.toml:
name = "myproject"
version = "0.1.0"
[build]
source_dir = "src"
out_dir = "build"Ignis is open for contributions. You can:
- Report bugs or issues
- Propose new features
- Submit pull requests with improvements