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 — 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.
- 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_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
-
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.