Mica 6.12.4 is released for Linux x86-64 and AArch64. It is a tooling release with three changes in the compiler itself — a language server, the last contract file leaving the disk, and exact linker surfaces — and it arrives together with two things that make the toolchain much easier to reach: version 3.0.0 of the VS Code extension on both marketplaces, and an official Docker image.
The compiler is now a language server
mica --lspStarting with 6.12.4, the compiler binary speaks the Language Server Protocol. Diagnostics appear when a file opens and on every save; go to definition, hover, and the document outline work across everything a file declares. The VS Code extension is the packaged client, and any LSP-capable editor can be pointed at the same command.
The detail worth knowing: this is not a companion tool with its own opinion of the language. The server runs the compiler’s own front end over the document you are editing, and the diagnostics it publishes are the compiler’s own error records, at the exact positions and spans the build would report. If the editor underlines it, the build would refuse it; if the editor is quiet, the build is too. Hover shows the resolved signature the compiler sees, and definition follows the same name resolution the analyzer uses — not a parallel index that can drift out of step.
There is also nothing to install beyond the compiler. The server reads no configuration files, spawns no helper processes, and — thanks to the second change in this release — consults not a single file on disk beyond the source it is asked about.
Nothing on disk decides what Mica believes
6.12.3 moved the curated C, POSIX and Linux interop contracts inside the
compiler binary. 6.12.4 completes the thought: the standard library’s own
published import surfaces move in as well. The package now ships no contract
file of any kind — seven files: the compiler, the four standard-library
archives, and the package’s own licence and changelog. Upgrading removes the
two .external files earlier versions installed under /usr/lib/.
What this buys is a sentence we could not print one release ago: changing what
Mica believes — about the system interface, and now about its own standard
library — means replacing the compiler. There is no file an attacker, a
misbehaving tool, or an accident can edit to alter what the compiler trusts
about write, about mmap, or about Copy from the strings unit.
The release verification treats that claim as testable, not aspirational: the
package gate installs into an empty root, compiles, links and runs real
programs under both string encodings, simulates the upgrade from the previous
release to prove the old files actually leave, and plants a hostile contract
file beside the installed archives to prove it changes nothing. A vendored
standard library named explicitly with --stdlib still carries its own
contract beside its own archive — trust follows intent.
Exported means exported
Until now, every root-level routine in a compiled unit became a global linker symbol, whether the unit exported it or not. In 6.12.4, the linker surface is exactly the exported surface: private helpers, internal machinery, and generated code leave the global namespace entirely.
This is visible hygiene — nm on a Mica archive now reads like the library’s
documentation — but it is also behaviour. Two units of one binary may finally
keep same-named private functions; that was a multiple definition link
failure before. A library built from several source files now publishes every
unit’s exports in its emitted contract, not just the main unit’s. And because
every unit’s exports share the binary’s name, exporting the same name from two
units is refused when the library is built — with both units named — instead
of surfacing as a duplicate symbol at some future importer’s link.
The extension, rebuilt
Version 3.0.0 of the VS Code extension is live on the Visual Studio Marketplace and Open VSX. It carries the language-server client, and its grammar is now generated from the compiler’s own lexical tables — 85 words, including the entire contextual vocabulary of the modern language — so the highlighting can never again drift behind the language it describes.
One line to a full toolchain
docker run -it micalang/micaThe official image is 77 MB, based
on Ubuntu 26.04, and serves both architectures under one name — docker pull
picks yours. Inside: the released compiler, binutils, and gdb. Because Mica
emits standard DWARF v5, debugging is ordinary: you can set a breakpoint on a
line of a .mica file, hit it, and inspect variables, in a stock container
with no special privileges.
The image doubles as a VS Code dev container with F5 debugging preconfigured —
copy two folders from
the container repository into
your project and reopen. C toolchains for interop work are one command away
inside (mica-install-gcc, mica-install-clang).
One engineering note we like: the image build installs the released .deb
through apt from the public download channel and runs the compiler before
any layer is kept — so every image that reaches the registry has proven the
packaging, on both architectures.
Getting 6.12.4
6.12.4 passed the full release gate before tagging: the complete test corpus through the compiler, the same corpus through the legacy lowering path as a differential oracle, and the corpus under Go’s race detector — 9,649 test runs on the widest gate, on both architectures.
Install it natively or as a container — and if you try the language server, we would genuinely like to hear how it behaves in your editor: info@mica-dev.com.