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 — arm64 for a Raspberry Pi 4 or 5 on 64-bit Raspberry Pi OS (or any other aarch64 machine), x64 otherwise. uname -m tells you which: aarch64 or x86_64. A 32-bit Raspberry Pi OS reports armv7l, and there is no package for it.

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

macOS — arm64 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_lang.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          # 295 language + 126 unit + 10 host-capture + 8 --check

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

eTamil on the VS Code Marketplace is the shortest way to start: it carries the compiler, the nUlakam standard library, the example programs and the eTamil font, so there is nothing on this page left to do. Highlighting for all 203 keywords in every spelling, completions for the 97 builtins and 940 nUlakam functions, errors from --check as you type, and eTamil: Open an example for one of twenty-nine working programs.

Its grammar and completion data are generated from lexer.rs, and CI fails if they drift — so the editor cannot fall behind the compiler. To run a compiler of your own instead, point etamil.compilerPath at it; to use etamil at a terminal as well, run eTamil: Install the compiler for use outside the editor.

Where next