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 --lsp

Starting 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/mica

The 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.