Pre-AlphaMetaScript is in early design phase. The compiler is not yet available.Join Discord for updates
MetaScript
THE IMPOSSIBLE, NOW POSSIBLE

TypeScript, now native.

TypeScript generics and mental model — metal performance and control.

HTTP Server Throughputrequests/sec (higher is better)
C
1200K
NATIVE
Rust
1150K
NATIVE
MetaScript
1140Koptimized
NATIVE
MetaScript
840Kdefault
NATIVE
Bun
320K
RUNTIME
Deno
195K
RUNTIME
Node.js
78K
RUNTIME

* Synthetic benchmark on Apple M2 • MetaScript compiles to native C

Your TypeScriptcompiles to C
server.ms
import * as http from "std/http";

const server = http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "text/plain" });
  res.end("Hello World");
});

server.listen(3000);
output.c
// Compiled to native C
void _lambda_0(msHttpRequest* req, msHttpResponse* res) {
  ms_http_writeHead(res, 200, headers);
  ms_http_end(res, ms_str_literal("Hello World"));
}

int main() {
  msHttpServer* server = ms_http_createServer(_lambda_0);
  ms_http_listen(server, 3000);
  return 0;
}

What Makes MetaScript Different

Full TypeScript GenericsTHE IMPOSSIBLE

Conditional types, mapped types, infer keyword — the complete type system, monomorphized to native code.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
Learn more

Three Runtimes

Same code compiles to C (native), JavaScript (browser/Node), or Erlang (distributed). Choose per use case.

msc build --target=c # or js, erlang
Learn more

Operator Overloading

Define custom operators like |> (pipeline), <> (diamond), <=> (spaceship). DSLs made easy.

const result = data |> transform |> filter;
Learn more

Extension Methods

Add methods to any type. Zero-cost — compiles to static function calls, not prototype pollution.

"hello".isEmpty() // false
Learn more

Distinct Types

Prevent bugs TypeScript allows. UserId and OrderId are different types, not both "string".

type UserId = distinct string;
Learn more

Defer & Memory Control

Zig-style defer for cleanup. Optional @stack/@arena annotations when you need control.

const f = open("x"); defer f.close();
Learn more

Who MetaScript is for

For JavaScript developers

You already know 80% of what you need. MetaScript only opens the remaining 20%: the part that lets you build native binaries, engines, backends, and tools with performance close to C/Rust - using the same JavaScript-shaped language you've been speaking for years.

Start as a JavaScript developer

For systems developers

MetaScript doesn't try to replace Rust or C. It's the place where you can bring your systems skills down to where millions of JS developers live. Instead of trying to teach the whole world Rust, you ship one MetaScript package and instantly put your work in front of them.

Start as a systems developer

Why Developers Choose MetaScript

Ship native binaries without leaving your TypeScript mental model

Cut cold starts and memory usage without rewriting everything in Rust or Go

Use C, npm, and BEAM ecosystems from one language and package manager

Deploy to Lambda, CLI, browsers, or distributed systems with the same codebase

Get 90% of C performance with code that looks like JavaScript

Build tools and engines that JS developers can use without learning Rust