HUMAN UNDERSTANDABLE, MACHINE WRITABLE.

vary

A readable, statically-typed programming
language that measures test strength.



Install the toolchain manager and latest compiler. Vary is currently in alpha. Full install docs →

curl -fsSL https://github.com/ccollicutt/vary/releases/latest/download/install.sh | sh

Features

Why varylang

A lie detector for tests

Tests can lie. Mutation testing exposes the ones that do. vary mutate shows which tests are weak, which mutations survived, and exactly what to fix.

Contracts and assertions

Contracts (in / out) declare what a function expects and what it promises. observe assertions check behaviour at runtime. Both are part of the language, not annotations you bolt on.

One CLI for the entire workflow

Run, check, test, format, and mutate from a single binary. Everything ships with the compiler. No plugins or extra tools required. Get started in minutes.

Fast JVM execution

Vary compiles to JVM bytecode and runs on any JVM. Mutation testing uses bytecode patching, so mutants run without recompiling.

See it in action

What Vary looks like

Testing built into the language

Tests are not bolted on through a framework. test blocks and observe assertions are part of the language. You write checks next to the code they check.

Readable syntax

Vary keeps the clarity developers like in Python while adding static typing and compile-time checks. No semicolons, no ceremony.

Mistakes caught before runtime

Static typing, null safety, and compile-time analysis flag errors before the program runs. You get those checks without the code getting verbose.

Core ideas

What makes Vary different

From the blog

Articles