Neural Networks, Stripped to the Binary
A declarative language that compiles ML models to standalone, zero-dependency native binaries.
model my_model {
layer input = Input(shape: [4]);
layer fc1 = Dense(units: 3);
layer out = Dense(units: 2);
}
$ cat input.bin | ./my_model > output.bin
$ python3 -c "import numpy as np; print(np.fromfile('output.bin', np.float32))"
[0.87 0.13]
$ file my_model
my_model: ELF 64-bit, statically linked
Key Features
No Runtime Dependencies
Compiled models are self-contained static binaries.
No Heap Allocation
All memory is statically allocated at compile time.
Human-Readable Source
Model architectures defined in plain-text .nnl files.
Systems-First
Targets bare-metal-capable output.
From Training to Deployment
NNLang fits into your existing ML workflow — train anywhere, deploy a single binary.
Train
Train your model with any framework — PyTorch, TensorFlow, JAX, etc.
Export
Export weights as ONNX or NumPy (.npy) files.
Describe
Write a .nnl model definition — or import directly from ONNX.
Compile & Deploy
Build a single static binary. No runtime, no dependencies.
One Binary. Zero Baggage.
Traditional ML Deployment
- Python runtime
- PyTorch / TensorFlow
- CUDA / cuDNN
- NumPy, SciPy, …
- Model server (Flask, FastAPI)
- Docker container
NNLang Deployment
- Single static binary
Installation
cargo install nnlang
Requires Rust toolchain and a C compiler (gcc, clang, or cc).
Or download pre-built binaries from GitHub Releases.
Quick Start
-
Write a model
version 0.2; model my_model { config { weights: "./weights"; io: "stdio"; } layer input = Input(shape: [4]); layer fc1 = Dense(units: 3, activation: "relu"); layer fc2 = Dense(units: 2); } -
Compile
nnc compile model.nnl --emit exe -o model -
Run
cat input.bin | ./model > output.bin
Weight files go in weights/ directory. See docs for details.
Examples
Complete models with pre-generated weights in the examples/ folder.
- Simple MLP — Minimal feedforward network
- MNIST CNN — Convolutional neural network for digit classification
- ResNet Block — Residual block with skip connections
- ONNX Import — Convert ONNX models to NNLang