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/micaThe image carries the compiler, binutils and gdb, so compiling, running and
debugging work immediately; C toolchains for work at the C boundary 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:
| Package | Why |
|---|---|
binutils | Mica emits assembly and hands it to as and ld. It has no built-in assembler or linker. |
libc6-dev | Compiled 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>.debThe 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
Version 7.5.0, built from commit 45d7ae888.
Verify a download with sha256sum against the hash above.
Install
# from the directory holding both .deb files
sudo apt install ./mica_<version>_<arch>.deb ./mica-dragon-rt_<version>_<arch>.debThe compiler depends on mica-dragon-rt — the Dragon runtime its programs
link — so the two install as one act; apt resolves binutils and
libc6-dev for you. If you use dpkg directly, install the dependencies
afterwards:
sudo dpkg -i mica_<version>_<arch>.deb mica-dragon-rt_<version>_<arch>.deb
sudo apt-get install -fCheck it worked
mica --versionThen 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/HelloYou should see hello from mica. Substitute arm64 for amd64 on an AArch64
machine.
What gets installed
Installing mica also installs mica-dragon-rt, the Dragon runtime — the
floor every compiled program links, packaged separately because the same floor
serves programs produced by any compiler built on the Dragon backend. On disk,
the pair looks like this:
/usr/bin/
└── mica the compiler driver (mica)
/usr/lib/
├── mica-stdlib-<arch>.a the standard library (mica)
├── mica-dragon-rt-<arch>.a the Dragon runtime (mica-dragon-rt)
├── mica-dragon-rt-fixedarena-<arch>.a … freestanding memory class
├── mica-dragon-rt-mc-<arch>.a … multicore tasking
├── mica-dragon-rt-fixedarena-mc-<arch>.a … both
└── mica-dragon-gpu-<arch>.a the device floor, linked when a tensor is placed on gpu
/usr/share/doc/
├── mica/copyright Mica Compiler License 1.0
└── mica-dragon-rt/copyright Mica Runtime License 1.0You do not normally name any of these. The compiler resolves the right archives
from the --platform, --memory-class and --tasking you ask for. Both are
static: a compiled program is one self-contained binary, and the machines it
runs on need no Mica package at all.
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-gnuThen name the target architecture in --platform:
mica --compile --link --optimize release \
--platform linux,arm64,utf-8 \
--source Hello.mica --build buildYou also need the standard library for that architecture, which means installing the package built for it.
See also
- Installing the Dragon SDK — the backend as a C API, a separate package under its own licence
- Platform and toolchain — targets, ABIs, build axes
- The facts sheet — every fact on one page, the AI surface included
- Licensing — free for any use, including commercial