Closed PreviewCompiler source opens July 1, 2026. Playground and binary available today.Join Discord →
MetaScript
The Secret Weapon

Raiser

Goal: a typed virtual machine that beats V8 cold starts by 10x. No JIT warmup, no compilation wait.

What is Raiser?

Raiser is a bytecode VM that runs your MetaScript code instantly. Types known at compile time means no runtime type checking - every operation is as fast as it can be.

Run with Raiser
# Run with Raiser VM
msc run --target=raiser src/game.ms

Why Raiser is Fast

V8/JSCore path: Source → Parse → Bytecode → Interpret (cold) → Profile → JIT → Fast
Raiser path: Source → Parse → Type Check → Typed Bytecode → Fast (always)
No JIT warmup
Peak performance from first run
No type guards
Types proven at compile time
No hidden classes
Direct memory offsets
No deoptimization
No speculative optimization to undo

Tiny hand-written Assembly VM (~15KB) fits in L1 cache. V8 is ~MB.

The Secret: Types Eliminate Runtime Checks

V8 and JavaScriptCore spend most of their time figuring out types at runtime:

V8's ADD opcode:
  1. Load operand A
  2. Check type of A (number? string? object?)
  3. Load operand B
  4. Check type of B
  5. Dispatch to correct operation
  6. Store result

Raiser's ADD opcode:
  1. Load operand A (known i32)
  2. Load operand B (known i32)
  3. Add
  4. Store result

V8 does 6 operations. Raiser does 4. Every single opcode.

Use Cases

Instant Feedback Loop

No compile wait. No bundle step. No restart. Change your code and see results in milliseconds. Raiser reloads running code while preserving application state - perfect for rapid iteration during development.

# Start watch mode - instant hot reload
msc run --watch --target=raiser src/app.ms

# Edit code → Save → See changes instantly
# No rebuild. No restart. State preserved.

Game Scripting

game/scripts/player.ms
@derive(Script)
class PlayerController {
  speed: f32 = 5.0
  health: i32 = 100

  @update
  tick(dt: f32): void {
    const input = Input.getAxis("horizontal")
    this.transform.x += input * this.speed * dt
  }

  @on("damage")
  takeDamage(amount: i32): void {
    this.health -= amount
    if (this.health <= 0) {
      this.die()
    }
  }
}

Tweak game logic while the game runs. Test balance changes without restarting levels.

Plugin Systems

Users extend your app without recompiling. Full type safety for plugin APIs. Reload plugins on-the-fly.

Configuration as Code

Config files that can compute values, not just declare them. MetaScript's build.ms is executable code with full type safety - loop over environments, compose settings programmatically, share logic across configs. Update and reload without redeploying.

When to Use Raiser

ScenarioRecommendation
Production deploymentC backend
Game scriptingRaiser
Plugin systemsRaiser
Development iterationRaiser
Browser appsJS backend
Distributed systemsErlang backend