Assay — Lightweight Lua Runtime for Kubernetes
Description: Assay is a single ~9 MB binary that replaces 50-250 MB Python/Node/kubectl containers and dozens of MCP servers in Kubernetes Jobs.

# One Binary. 40+ Modules. Zero MCP Servers.

Assay is a ~9 MB static binary that replaces 50–250 MB Python/Node/kubectl containers and dozens of MCP servers in Kubernetes Jobs.

View MCP Comparison → Install Now ↓
9 MB
Binary size
(vs 50–250 MB containers)
40+
Built-in modules
15 ms
Context query latency
5 ms
Cold start time

## What is Assay?

Assay is a universal API execution engine — a lightweight Lua runtime purpose-built for Kubernetes. It runs in two modes, auto-detected by file extension:

### Lua Script Mode

Run any Lua script with all builtins available — HTTP client/server, SSE streaming, JSON, crypto, database, and 23 embedded stdlib modules:

    -- Lua mode: query Prometheus directly
    local prom = require("assay.prometheus")
    local result = prom.query("http://prom:9090", "up")
    assert.gt(#result, 0, "No targets up")
    log.info("Targets up: " .. #result)

### YAML Check Mode

Structured verification with retry, backoff, parallel execution, and JSON output:

    # YAML mode: orchestrated checks
    assay checks.yaml  # retry, backoff, parallel, structured JSON output

    # checks.yaml
    timeout: 120s
    retries: 3
    backoff: 5s
    checks:
      - name: grafana-healthy
        type: http
        url: http://grafana:80/api/health
        expect:
          status: 200
          json: ".database == \"ok\""

## Container Image Size

Assay ships as a `FROM scratch` container — no shell, no package manager, just the static binary. Compare compressed pull sizes:

Runtime | Compressed | vs Assay
--- | --- | ---
Assay | 6 MB | 1x
Python alpine | 17 MB | 3x
bitnami/kubectl | 35 MB | 6x
Python slim | 43 MB | 9x
Node.js alpine | 57 MB | 12x
alpine/k8s | 60 MB | 10x

## Replace Your MCP Servers

Assay replaces 42 popular MCP servers. Instead of running 10 separate `npx -y` processes consuming 500 MB of npm dependencies, use one 9 MB binary with 40+ modules built in.

Every MCP server you remove is one fewer process to manage, one fewer `node_modules` to update, and one fewer attack surface in your cluster.

View full MCP comparison →

## Install

### Pre-built Binary (fastest)

    # Linux (x86_64, static — runs on any distro)
    curl -L -o assay https://github.com/developerinlondon/assay/releases/latest/download/assay-linux-x86_64
    chmod +x assay && sudo mv assay /usr/local/bin/

    # macOS (Apple Silicon)
    curl -L -o assay https://github.com/developerinlondon/assay/releases/latest/download/assay-darwin-aarch64
    chmod +x assay && sudo mv assay /usr/local/bin/

### Docker

    docker pull ghcr.io/developerinlondon/assay:latest

### Cargo

    cargo install assay-lua

## Quick Example

A complete health check script — JWT auth, HTTP request, assertion — in 10 lines:

    #!/usr/bin/assay
    local token = crypto.jwt_sign({
      iss = "assay", sub = "health-check",
      exp = time() + 300
    }, env.get("JWT_SECRET"), "HS256")

    local resp = http.get("https://api.example.com/health", {
      headers = { Authorization = "Bearer " .. token }
    })
    assert.eq(resp.status, 200, "API health check failed")
    log.info("API healthy: " .. resp.body)