Meet Ovis: a compiler that reads plain English A developer has released Ovis, an experimental programming language whose source code is written in plain English and compiled through LLVM into native executables that can call any C library. A deterministic parser handles every line, with a small local language model invoked only when a line is ambiguous; the model never writes code, instead selecting among readings that already type-check, and each choice is recorded in `@[meaning: …]` annotations and a committed lockfile so subsequent builds run fully offline and reproducibly. The language ships with 171 built-in phrases and lets users define their own, and the model runs locally via llama.cpp so code never leaves the machine. Everything starts with a small thought, what if I merge LLM & LLVM? Will I able to write English Pseudo-code with the performance of a compiled language? Ovis https://github.com/ovis-lang/ovis is a programming language whose source code is plain English, compiled through LLVM into a native executable. You write lines the way you would say them, such as show the average of numbers rounded to 2 decimals , and get a fast binary that can call any C library. The twist is how it reads English. A deterministic parser reads every line. A small language model built into the compiler steps in only when a line is unclear, and even then it never writes code: it picks one of the readings that already type-check. Every choice it makes is written down, so the next build needs no model at all. That makes Ovis different from "ask an AI to write the code". There is no hidden prompt and no code you didn't see. The program is your English, and the compiler shows you exactly how it read it. Ovis is an experiment, and the language is still changing. This post describes it as of October 2026. Here is a whole Ovis program. It finds the primes below 50, and it defines its own phrase, n is prime , along the way: Finds the prime numbers below 50. to n is prime: if n < 2: give back false divisor = 2 while divisor divisor <= n: if n is divisible by divisor: give back false divisor = divisor + 1 give back true primes = empty list of whole numbers for each n in the numbers from 2 to 49: if n is prime: add n to primes show primes show "Found", length of primes, "primes" If you know Python, the shape is familiar: a line ending in : opens an indented block, name = value makes a variable, and Ovis works out the types. What is new is that is divisible by , add … to … and length of are phrases, not keywords. The library has 171 of them, and to WORDS parameter …: adds your own. A phrase you define works on any line, as a statement or as a value. Say you write mean of numbers , but the library only knows average of numbers . Ovis lists the readings that make sense there, the model picks one, and Ovis writes its choice just above your line: @ meaning: show "Average:", average of numbers rounded to 2 decimals show "Average:", mean of numbers rounded to 2 decimals You can read that line, change it, or delete it to ask again. And when the model isn't sure, Ovis doesn't guess. It stops and asks you: bash $ ovis run examples/vague.ovis examples/vague.ovis, line 4: "show square root of x + 7" is unclear. Did you mean one of these? Write it in the source: show square root of x + 7 show square root of x + 7 Ovis is a normal compiler with one extra step for unclear lines. Most lines go straight from the parser to code; only lines with no single reading become questions. Phrases are just templates, so the library is readable and extendable. Here is average of , straight from the phrase files: js expr average of {xs: int } : float = / float prelude sum int $xs float len $xs alias: average value of {xs} stmt add {x: T} to {xs: T } = append $xs $x The model runs locally through llama.cpp, so your code never leaves your machine. A background daemon keeps it loaded between builds and quits after 15 minutes unused. An AI in the compiler sounds like a recipe for builds that change from one run to the next. Ovis is designed so that can't happen. @ meaning: … lines and a