Getting started

Get started

Run eTamil in your browser with nothing installed, or install the compiler — a single binary that needs neither Rust nor a C toolchain.

Two ways in. Run eTamil in your browser right now, or install the compiler and use it locally. The browser editor is the compiler — the same lexer, parser, type checker and VM, built to WebAssembly — so what works there works on your machine.

Try it now, nothing installed

வட்டி.qmz in your browser · Ctrl-Enter to run
// எளிய வட்டி — simple interest, exact to the paisa செயல் வட்டி_கணக்கு(அசல், வீதம், ஆண்டு) { திரும்பு அசல் * வீதம் * ஆண்டு; } தொகை = 50000; அச்சு(வட்டி_கணக்கு(தொகை, 7.5%, 3));

Press Ctrl+Enter to run. Nothing is uploaded and nothing is stored. Databases, the HTTP server and உள்ளிடு need a machine of their own and say so when you try them; everything else works here, including file statements against an in-memory filesystem.

Ready for more than a scratchpad? Install it below.

Download and install

No Rust, no C toolchain, no build step. The archive carries the compiler, the eTamil standard library and the examples; the script copies them into place and puts etamil on your PATH.

Windows (PowerShell)

Expand-Archive etamil-windows-x64.zip -DestinationPath .
.\etamil-windows-x64\install.ps1

Linux

tar -xzf etamil-linux-x64.tar.gz
./etamil-linux-x64/install.sh

macOSarm64 for Apple Silicon, x64 for Intel. uname -m tells you which one you are on.

tar -xzf etamil-macos-arm64.tar.gz
./etamil-macos-arm64/install.sh
xattr -dr com.apple.quarantine ~/.local/lib/etamil

That last line is not optional. These builds are not notarized, so macOS quarantines anything downloaded through a browser and Gatekeeper refuses to run it — “cannot be opened because the developer cannot be verified” — rather than asking. Clearing the flag once is enough.

Open a new terminal afterwards — the installer edits PATH, and a shell that is already running does not see the change — then check it:

etamil --version

Nothing is left behind that a plain delete cannot undo: the Windows installer puts everything under %LOCALAPPDATA%\Programs\eTamil, the Linux and macOS one under ~/.local, and none of them needs administrator rights.

Why no runtime to install. The Windows binary links the C runtime statically, so it does not need the Visual C++ Redistributable. The Linux binary is built against musl, so it is one fully static ELF that does not depend on the build machine’s glibc.

The packages carry the PostgreSQL and MySQL drivers, since a downloaded binary cannot have a cargo feature added to it later; the LLVM backend is not included, because it needs LLVM present on the machine that runs the compiler. Every archive is listed with its SHA-256 on the releases page.

Build from source

Worth doing if you want the LLVM backend, or to work on the compiler itself.

Prerequisites

Rust 1.88+ (edition 2024) and a C toolchain — the bundled SQLite and the crypto crates compile C.

With Cargo

git clone https://github.com/Maruff/etamil_compiler.git
cd etamil_compiler/etamil_compiler
cargo build --release

The binary is target/release/etamil (etamil.exe on Windows). Put it on your PATH:

Linux / macOS

sudo cp target/release/etamil /usr/local/bin/etamil

Windows (PowerShell)

Copy-Item "target\release\etamil.exe" "$env:USERPROFILE\bin\etamil.exe"

Verify:

etamil --version

Your first program

echo 'அச்சு "வணக்கம் உலகம்!";' > hello.etamil
etamil --vm hello.etamil

On Windows, write the file as UTF-8:

'அச்சு "வணக்கம் உலகம்!";' | Out-File hello.etamil -Encoding UTF8
etamil --vm hello.etamil

Then something that earns its keep — an income tax calculator that reads from stdin:

echo "950000" | etamil --vm examples/basic_samples/example.qmz

Optional features

SQLite is built in. The rest are behind Cargo features, so a default build does not carry their dependencies.

cargo build --release --features postgres,mysql

The LLVM backend is only needed for --llvm, and only available on Linux and macOS:

cargo build --release --features llvm

The LLVM backend still compiles a subset of the VM, though a growing one: it now handles numeric functions, arrays, records, array iteration, and imports resolved before codegen. Heterogeneous values and other unsupported constructs are rejected rather than emitted as incorrect IR. Use --vm for real work.

Running the tests

cd etamil_compiler
cargo test          # 196 language tests + 59 unit tests + 8 --check tests

tests/language_tests.rs covers the front end end-to-end by asserting on program results, not exit codes — every bug those cover exited 0 while producing the wrong answer. CI runs the build and full suite on Linux and Windows for every push and pull request.

Every example also runs with its expected outcome checked, including the ones that are supposed to fail:

./scripts/run_examples.sh
python3 scripts/transliterate.py --check   # romanization audit

Editor support

A VS Code extension lives in eTamil_Code/ in the compiler repository: highlighting for all 202 keywords in every spelling, completions for the 59 builtins and 254 nUlakam functions, and errors from --check shown as you type.

Its grammar and completion data are generated from lexer.rs, and CI fails if they drift — so the editor cannot fall behind the compiler. If it cannot find the compiler it offers to fetch this package for you — eTamil: Install the compiler in the command palette.

Where next