MAL maligator

experimentalalphaAOT JavaScript

JavaScript,
ahead
of time.

Maligator is an experimental AOT JavaScript compiler, exploring its identity in public.

It already produces configurable native executables. It is not yet battle-tested, uniformly fast, or trying to be a drop-in Node replacement. The alpha is here to make the progress visible—and invite better ideas.

A focused Belgian Malinois with a mischievous expression
Focused. Curious. Known to bite into difficult runtime problems.

Progress, not promises

The line so far.

The graphs use committed project data. They exist to show movement and regressions—not to manufacture an “Nx faster” headline. Weeks without a trustworthy full result stay empty.

Test262 compatibility

Authoritative compiled/normal baseline from scripts/test262.json. Strict and sloppy results are folded together; the chart always uses a true 0–100% scale.

latest passing
Exact weekly Test262 results
Date Pass Passed Failed Skipped Commit

Compiling the compiler

Fresh-process median to load Maligator’s compiler source, compile it, and emit C. Startup and file I/O count; the C compiler and linker do not. Erasable TypeScript syntax is stripped before timing because the native compiler does not yet include that frontend. Node runs the same prepared source as a neutral reference.

Starting nowlower is better
Maligator nativeNode reference
Exact self-compile results and environment
Date Maligator Node Runs Environment Commit

The honest alpha

What it is.
What it isn’t.

A compatibility percentage is useful evidence, not a product identity. These are the capabilities that make Maligator interesting today—and the constraints that still define using it.

It can do this.

  1. 01
    Produce native executables

    Compile JavaScript and erasable TypeScript applications ahead of time into standalone native programs.

  2. 02
    Shape the runtime per build

    Select eval, Realms, RegExp, Temporal, Intl services, web APIs, curated Node APIs, and Maligator’s own surface.

  3. 03
    Carry application assets

    Embed files or selected directory trees in the executable and materialize the exact captured bytes at runtime.

  4. 04
    Compile at runtime—when selected

    An eval-enabled build embeds the compiler and executes dynamic JavaScript through the interpreter; eval-free builds leave that payload out.

  5. 05
    Run most of Test262

    More than fifty thousand applicable tests pass in the current strict-and-sloppy compiled baseline.

It cannot claim this.

  1. 01
    Battle-tested software

    Maligator is only now being used in real project work. That is exposing bugs, rough edges, and assumptions quickly.

  2. 02
    Drop-in Node compatibility

    The Node surface is intentionally curated: enough compatibility to build useful things, not a promise to reproduce all of Node.js.

  3. 03
    Uniformly competitive speed

    Some focused paths are promising. Other ordinary JavaScript constructs remain much slower than Node. Performance is uneven.

  4. 04
    A settled destination

    The project does not yet know whether its strongest identity will be tiny deployment, configurable runtimes, self-hosting, performance, or something not found yet.

  5. 05
    Broad release support

    The current packaged alpha targets macOS arm64 and remains unsigned. Other deployment targets are not presented as ready.

Dogfooding

This page is the example.

The homepage is one self-contained HTML file. A small Maligator program embeds it as an asset and serves it from the resulting executable behind plain HTTP—ready for a future TLS-terminating reverse proxy.

website/server.mtssimplified
import { readFileSync } from "node:fs";

const html = readFileSync(
  mal.assets.materialize("site"),
  "utf8",
);

Mal.serve({
  port: Number(process.env.PORT ?? "3000"),
  fetch() {
    return new Response(html, {
      headers: { "Content-Type": "text/html; charset=utf-8" },
    });
  },
});
website/maligator.build.tssimplified
export default defineBuild({
  assets: {
    site: { type: "file", path: "website/index.html" },
  },
  engine: { eval: false, regexp: false },
  surface: { webPlatform: true, node: true },
});
npm run site:build

Ideas welcome

What should this become?

Follow the progress, reply with an idea, or open an issue with something concrete. The alpha’s most useful outcome is discovering the project’s identity through real use.