Termin

Termin is an open-source application platform that compiles constrained English specifications into running software whose security properties are enforced by the structure of the language itself.

Termin is three things at once.

A language for describing applications. You write what the application does — its content, its roles, its workflows, its pages — and the compiler produces a running web application with structural security properties.

An ecosystem of conforming implementations. The specification is open, the conformance suite is public, and applications run on any conforming runtime. Presentation, storage, identity, and compute providers let the same application target different operational environments without code changes.

A substrate designed for AI agents. The language is small enough that an LLM can fully master it. Agents can author Termin applications that are safe by construction, not by review. Agents can also participate in applications through declared scopes, typed channels, and complete audit logs — as real participants in workflows, not external consumers with API keys.

The sections below start with the first layer. The vision page explains what is true today and what is on the path. The roadmap shows the development timeline.

A .termin file describes content, roles, scopes, state machines, and operations. The compiler produces a .termin.pkg archive (a package containing the compiled specification). A conforming runtime serves it over HTTP. SQL injection, command injection, and broken access control are not achievable through Termin application code, because the language provides no construct for expressing them.

Every structural claim is backed by a test in the conformance suite.

What a .termin file looks like

Content called "products":
  Each product has a SKU which is unique text, required
  Each product has a name which is text, required
  Each product has a category which is one of: "raw material", "finished good", "packaging"
  Anyone with "inventory.read" can view products
  Anyone with "inventory.write" can update products
  Anyone with "inventory.admin" can create or delete products

State for products called "lifecycle":
  A product starts as "draft"
  A product can also be "active" or "discontinued"
  A draft product can become active if the user has "inventory.write"
  An active product can become discontinued if the user has "inventory.admin"

The full warehouse example is roughly 120 lines and implements content management, access control, state machines, event-driven computations, and a role-appropriate presentation layer.

What you get when you run it

When the compiler processes a .termin file, it produces a .termin.pkg archive. A conforming runtime reads that archive and serves a complete web application:

This is what you get from the 120-line warehouse example: a working inventory application with role-based access, state transitions, filterable tables, real-time updates, and a complete audit trail. No separate framework to learn. No plumbing to write. No access-control layer to audit.

Where to go next

About the project

Termin is authored by Jamie-Leigh Blake and released under Apache 2.0. There is no paid tier, no hosted offering, no enterprise edition, and no commercial services contract. The project has no monetization plan. Source is on GitHub. The conformance suite and IR (intermediate representation) schema are in a separate repository.

Termin is pre-v1.0. The IR format is versioned and breaking changes between minor versions are still permitted. See the roadmap for the path to v1.0.