The Mica compiler is a single statically linked executable plus its standard library. It has no runtime of its own to install and no daemon to run.

Zero-install: the container

If Docker is available, nothing needs installing at all — the released compiler ships as a ready-to-use image for both x86-64 and ARM64, and docker pull selects your architecture automatically. New to Mica? The guided version of this path — empty folder to source-level debugging in fifteen minutes — is Get started with Mica.

docker run -it micalang/mica

The image carries the compiler, binutils and gdb, so compiling, running and debugging work immediately; C toolchains for interop work are one command away inside the container (mica-install-gcc, mica-install-clang).

It is also a ready-made VS Code dev container: with the Mica extension you get diagnostics, go to definition, hover and the document outline, and F5 compiles and debugs the file you have open under gdb. Copy .devcontainer/ and .vscode/ from gitlab.com/mica-lang/mica-container into your project — or clone that repository and “Reopen in Container” for the quickest first experiment. The image’s Dockerfile lives in the same repository.

Everything below is the native installation.

What you need

Two system packages, and nothing else:

PackageWhy
binutilsMica emits assembly and hands it to as and ld. It has no built-in assembler or linker.
libc6-devCompiled programs link against the C library and its startup objects.

On Debian or Ubuntu the package pulls both in automatically:

sudo apt install ./mica_<version>_<arch>.deb

The compiler binary itself is statically linked, so it has no library dependencies of its own — the two packages above are for the programs it produces, not for running the compiler.

Supported systems. 64-bit Linux with glibc, on x86_64 (x86-64-v3 or later — Intel Haswell, AMD Zen) or AArch64 (ARMv8.0-A). There is no Windows or macOS build; see platform and toolchain.

Download

arm64
Download 6.12.8
File
mica_6.12.8_arm64.deb
Size
2.7 MB
Built
2026-08-05
SHA-256e1bf42dfd6283199e2ce7029eb9d8cbebb5bf0134a821595c74af726bb7dcca2
amd64
Download 6.12.8
File
mica_6.12.8_amd64.deb
Size
3.5 MB
Built
2026-08-05
SHA-2568c734753db9a72f516f5b670474481daac08ee054bb06c80990560ce4900fd64

Version 6.12.8, built from commit 6aaa3230. Verify a download with sha256sum against the hash above.

Install

# from the directory holding the .deb
sudo apt install ./mica_<version>_<arch>.deb

apt resolves binutils and libc6-dev for you. If you use dpkg directly, install the dependencies afterwards:

sudo dpkg -i mica_<version>_<arch>.deb
sudo apt-get install -f

Check it worked

mica --version

Then compile something. Save this as Hello.mica:

program Hello;

imp
    WriteLn : std;

begin
    WriteLn("hello from mica");
end.

and build it:

mica --compile --link --optimize release \
     --platform linux,amd64,utf-8 \
     --source Hello.mica --build build
./build/Hello

You should see hello from mica. Substitute arm64 for amd64 on an AArch64 machine.

What gets installed

Path
/usr/bin/micathe compiler driver
/usr/lib/mica-stdlib-<arch>.athe standard library
/usr/lib/mica-stdlib-fixedarena-<arch>.afreestanding deployment class
/usr/lib/mica-stdlib-mc-<arch>.amulticore tasking
/usr/lib/mica-stdlib-fixedarena-mc-<arch>.aboth

You do not normally name any of these. The compiler resolves the right archive from the --platform, --memory-class and --tasking you ask for.

The Dragon SDK — the compiler’s backend as a C API, for building your own language on it — is a separate package under a different licence, with its own download and install page. The compiler alone will happily compile a program that imports the dragon surface — only the link asks for the SDK’s archive, and says so by name if it is not there.

The interop contracts and the standard library’s published import surfaces are part of the compiler binary and are not installed separately. Upgrading from 6.12.2 or earlier removes the /usr/lib/contracts/ directory, and upgrading from 6.12.3 or earlier removes the /usr/lib/mica-stdlib-utf-*.external files the older packages installed.

One thing that catches people out

The string encoding is fixed per binary, and the format specifier follows it. Under utf-8 a string is %s; under utf-32 it is %ls. Get it wrong and the compiler tells you exactly which specifier it expected — it checks format strings at compile time rather than letting a mismatch reach the output.

Building for the other architecture

Cross-compiling — producing an AArch64 binary on an x86_64 machine, or the reverse — needs the cross binutils, plus a user-mode emulator if you want to run the result:

sudo apt install binutils-aarch64-linux-gnu qemu-user-binfmt
export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu

Then name the target architecture in --platform:

mica --compile --link --optimize release \
     --platform linux,arm64,utf-8 \
     --source Hello.mica --build build

You also need the standard library for that architecture, which means installing the package built for it.

See also