Can you make
it leak?
One secret. One public boundary.
Try to get the first past the second.
A fictional key, shown for illustration. You’re testing the path a secret-labelled value could take—not guessing a password.
No API key. No model judging your answer. Every verdict comes from AILANG’s compiler in your browser.
Loading the AILANG compiler…
Downloading the actual compiler as WebAssembly.
You edit real AILANG source code below. The compiler checks its types and information-flow labels on your device. The example functions are not executed.
Your .ail sourceAILANG compiler · WASMCompiler verdictPrint the key
Send it straight to public output.
string<secret>string{not secret}Loading an isolated AILANG v0.35.0 compiler…
AILANG compiler result
The boundary is waiting.
Check the example to see whether the compiler permits this data flow.
AILANG diagnostics
Inspect compiler response
Static analysis only. Experiments are never executed and no key is transmitted.
The label travels with the data.
Formatting a string, calling a helper, or wrapping a value in a record does not automatically make it public. The compiler tracks the label to the restricted output.
Authority is not sanitisation.
Declassify explicitly permits lowering a label. A gate that returns the original secret can pass this check. Its implementation still needs review and appropriate contracts.
Know what a pass means.
This is single-module, explicit-flow analysis. It does not prove freedom from every prompt injection, implicit flow, or cross-module leak. Editing away the policy is changing the rules, not defeating them.
What actually runs here?
A Web Worker runs a WASM build pinned to AILANG v0.35.0. The bridge parses and type-checks your source, then invokes types.CheckModuleIFC—the same information-flow pass used by the CLI. The stock browser module loader currently omits that pass, so this demo calls it explicitly. No JavaScript pattern matcher decides whether an attack is blocked.
Only single-module experiments containing function declarations, without imports or top-level values, are supported. Syntax errors, type errors, compiler failures and timeouts are reported separately from an information-flow rejection. The worker is disposable so a difficult experiment cannot keep the page frozen.
Source and reproducible CLI checks