Haiku

Getting Started

Haiku runs your tests as plain English — on iOS, in Python, in Rust, and more. Write what your code should do; Haiku compiles it to a real test in your existing toolchain.

Haiku lets you write tests in plain English. Describe what your app or your code should do; Haiku compiles your description to a real test in the framework your language already uses — XCUITest for iOS, pytest for Python, cargo test for Rust — and runs it.

No selectors, no boilerplate, no new test runner to adopt.

How it works

  1. Write a .haiku file. The filename's extension chooses the target: login.ios.haiku for an iOS UI test, test_parser.py.haiku for Python, cache.rs.haiku for Rust.
  2. Recite with haiku recite <file>. Behind the scenes Haiku translates your English into the right native artifact — a .sim action sequence for iOS, a pytest module for Python, a Rust integration test for cache.rs.haiku, and so on — then runs it through your language's real test runner and reports pass/fail step by step. The translation step is cached, so repeated runs on an unchanged spec skip straight to execution.

Filename → target

The filename extension is the single source of truth for what Haiku does with a spec. Plain .haiku files are not accepted — every spec carries a platform extension.

FilenameTargetStatus
foo.ios.haikuiOS Simulator (XCUITest)available
foo.macos.haikumacOScoming
foo.web.haikuWeb browsercoming
foo.android.haikuAndroid Emulatorcoming
foo.py.haikuPython (pytest)available
foo.rs.haikuRust (cargo test)available
foo.go.haikuGo (go test)experimental
foo.ts.haikuTypeScriptexperimental
foo.java.haikuJavaexperimental
foo.rb.haikuRubyexperimental

Requirements

  • macOS with Apple Silicon (arm64)
  • Roughly 6 GB of free disk space for the bundled local AI models
  • Xcode (for .ios.haiku targets — Haiku builds an XCUITest driver against your installed Xcode the first time you run an iOS spec)

Next steps

On this page