Assay — Infrastructure Testing & Automation Runtime
Description: Assay is a 9 MB Lua runtime for infrastructure testing, Kubernetes automation, HTTP servers, and AI agent integration. __MODULE_COUNT__ modules. Replaces kubectl, Python, Node.js, curl, jq.

__HEADER__
Replaces your entire infrastructure scripting toolchain.
One 9 MB binary. __MODULE_COUNT__ modules. Linux, macOS, Docker, Rust crate.
Modules Install
Kubernetes
30+ resources
ArgoCD
Sync, health
Prometheus
PromQL, alerts
Vault
Secrets, PKI
Grafana
Dashboards
GitHub
PRs, issues
OpenClaw
AI agent tools
Gmail
Search, send
Google Cal
Events CRUD
Loki
Logs
Unleash
Feature flags
S3
Object storage
Temporal
Workflows
cert-manager
TLS certs
Ory Stack
Kratos/Hydra/Keto
Zitadel
OIDC identity
+34
More
View all →
9 MB
Static binary
51
Modules
Lua 5.5
+ Rust/Tokio
5 ms
Cold start

## Core Capabilities

### HTTP Server & SSE

Build web services with async route handlers. Handlers can call http.get, sleep, and any async builtin. SSE streaming built in. Header values can be arrays for multiple `Set-Cookie`, `Link`, etc.

    http.serve(8080, {
      GET = {
        ["/login"] = function(req)
          return {
            status = 200,
            headers = {
              ["Set-Cookie"] = {
                "session=abc; Path=/",
                "csrf=xyz; Path=/",
              },
            },
            json = { ok = true },
          }
        end
      }
    })

### Kubernetes & GitOps

30+ K8s resource types, ArgoCD, Kargo, Flux, Traefik. In-cluster and cross-cluster auth.

    local k8s = require("assay.k8s")
    local pods = k8s.list("default", "pod")
    local argo = require("assay.argocd")
    local c = argo.client(url, {token=t})
    local apps = c:applications()

### AI Agent Integration

OpenClaw platform tools, GitHub PRs/issues, Gmail, Google Calendar. Build AI-powered workflows.

    local oc = require("assay.openclaw")
    local c = oc.client()
    c:send("discord", "#ops", "Done!")
    local r = c:llm_task("Summarize")
    c:state_set("key", {v="1.2"})

### Monitoring & Observability

Prometheus, Grafana, Loki, Alertmanager. Query metrics, push logs, manage alerts and dashboards.

    local prom = require("assay.prometheus")
    local r = prom.query(url, "up")
    assert.gt(#r, 0, "No targets")
    local loki = require("assay.loki")
    loki.push(url, "log line")

### Security & Secrets

Vault, cert-manager, ESO, Dex, Zitadel. JWT signing, OIDC, secret management.

    local vault = require("assay.vault")
    local c = vault.client(url, {token=t})
    local s = c:kv_get("my/secret")
    local jwt = crypto.jwt_sign(
      {sub="svc"}, key, "HS256")

### Infrastructure Testing

Builtin assertions, structured YAML checks with retry and backoff. Verify deployments, health endpoints, and service readiness.

    # checks.yaml — retry + backoff
    checks:
      - name: api-healthy
        type: http
        url: http://api:8080/health
        retries: 5
        backoff: 3s
        expect:
          status: 200

9 MB static binary — `FROM scratch`, 5 ms cold start, 14x smaller than postman/newman. See full size & speed comparison →

## Two Modes

Auto-detected by file extension:

### Lua Scripts (.lua)

    #!/usr/bin/assay
    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 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

`FROM scratch` — no shell, no package manager, just the static binary:

Runtime | Compressed | vs Assay
--- | --- | ---
Assay | 9 MB | 1x
alpine/python | 17 MB | 2x
bitnami/kubectl | 35 MB | 4x
Node.js alpine | 57 MB | 6x
alpine/k8s | 60 MB | 7x

## Install

### Pre-built Binary

    # Linux (x86_64, static)
    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 / Rust Library

    # CLI tool
    cargo install assay-lua

    # As a Rust dependency
    # Cargo.toml: assay-lua = "0.6"

### mise

    # .mise.toml
    "github:developerinlondon/assay" = "v0.6.1"

__FOOTER__