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
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
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.
- Windows — Visual Studio Build Tools with the Desktop development with C++
workload. The MSVC linker is not optional: without it even
cargo checkfails, because proc-macro crates link as DLLs. - Linux / macOS — a working
cc(build-essential, or the Xcode command line tools).
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
-
Language tour
Syntax, three spellings, exact decimals, functions, collections and modules.
-
Finance & accounting
GST, double entry and the three statements.
-
Backend
HTTP routes, SQL drivers, JSON and auth.
-
Status
What works today, what is partial, and what is not built.