# Vary

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

- [Get Started](/docs/getting-started/)
- [Documentation](/docs/)
- [Syntax Overview](/docs/syntax-overview/)

## Why Vary

**A lie detector for tests.** Tests can lie. <a href="/docs/mutation/lie-detector/">Mutation testing</a> exposes the ones that do. <a href="/docs/mutation/testing/">vary mutate</a> shows which tests are weak, which mutations survived, and exactly what to fix.

**Contracts and assertions.** <a href="/docs/contracts/">Contracts</a> (<code>in</code> / <code>out</code>) declare what a function expects and what it promises. <a href="/docs/test-dsl/">observe</a> assertions check behaviour at runtime. Both are part of the language, not annotations you bolt on.

**One CLI for the entire workflow.** <a href="/docs/cli/">Run, check, test, format, and mutate</a> from a single binary. Everything ships with the compiler. No plugins or extra tools required. <a href="/docs/getting-started/">Get started in minutes</a>.

**Fast JVM execution.** Vary compiles to <a href="/docs/compiler/">JVM bytecode</a> and runs on any JVM. Mutation testing uses <a href="/docs/mutation/advanced/">bytecode patching</a>, so mutants run without recompiling.

## Recent Articles

- [What's new in Vary v147-alpha.1](/articles/whats-new-in-vary-v147/) — v147-alpha.1 adds Via, an early-alpha application server system for Vary apps. It also ships declarative API and persistence infrastructure, managed SQLite bindings, Javalin-backed HTTP service jars with OpenAPI output, and stronger Via deploy diagnostics.
- [Introducing Via secrets and config](/articles/introducing-via-secrets-and-config/) — Via separates plain runtime config from secrets. Apps declare the secret names they need, the runner gives each instance a short-lived workload token, and the config server returns values only when the token, app, deploy, instance, and declared secret name all match.
- [Golden Path: Install Via and the Echo Server](/articles/deploy-echo-server-on-via-minimal-commands/) — Unpack echo.zip to a temporary workspace, install and initialize Via, create the echo app/domain, copy examples/echo to a clean temporary Git repo, then run target doctor, preflight, deploy once, CLI smoke, and direct HTTP smoke with --apply-manifest.
- [What Via Learns from Heroku](/articles/what-via-learns-from-heroku/) — Heroku's best idea was everything around the source push: build, release, config, runtime, and logs owned by the platform. Via keeps that shape, but makes `vary app deploy` the command people use.
