# Introduction

> Understand how Retest tests your app and choose where to begin.

Source: https://rehearsal.dev/retest/docs

Retest is an open source test runner and automation engine for web, iOS simulator, macOS and Electron apps. It is for developers and coding agents who need to check an app before release. You write TypeScript tests and get a record of what happened.

A test can use exact checks, optional AI checks or both. This test saves a task and checks the title the page shows:

```ts filename="tests/task.retest.ts"
import { expect, test } from '@rehearsal-labs/retest'

test('saves a task', async ({ page }) => {
  await page.goto('/')
  await page.getByTestId('task-title').fill('Release checklist')
  await page.getByTestId('save-task').click()
  await expect(page.getByTestId('saved-task')).toHaveText('Release checklist')
})
```

The test enters a title, clicks Save once and waits for the saved title to appear. If the title never matches, the failure shows the expected text, the text Retest found and the line in your test.

## Why Retest

- **A pass you can trust.** A test with no assertions or a missing await fails, and a required AI check that cannot decide stays inconclusive. If the browser disappears after input was sent, the result is `outcome_unknown`, so you know to check the app before repeating the action.
- **Input like a person's.** Actions use mouse, keyboard or touch input, and each action is sent once. Before clicking, Retest waits for a visible, stable, enabled and uncovered element. Checks can wait for the result without sending that input again.
- **One test across platforms.** Follow a flow through web, iOS simulator, macOS and Electron apps in the same test. Each app has its own named fixture, so you can create a task on one platform and check it on another.
- **Made for coding agents.** Retest detects common coding agent environments and prints a short failure report with the next command to inspect it. Your agent can read the recorded steps and values before deciding what to change.

## How it works

- **The runner.** Your config names the apps and targets a test uses. The runner loads the test files, opens those apps and records each action and check.
- **Its own drivers.** Retest drives Chromium, Firefox, WebKit and Electron through drivers of its own, with no Playwright, Puppeteer or Selenium underneath. iOS simulator and macOS apps run through XCTest, using pinned builds of WebDriverAgent and a macOS runner. The core package has zero runtime dependencies; AI checks use optional provider packages.
- **The run folder.** Each run leaves events, results, logs and captured evidence in a folder. Use `retest inspect` to read it without running tests again, or generate an HTML report; a run that stopped early stays incomplete.

If you have written Playwright tests, the API will feel familiar. [Coming from Playwright](https://rehearsal.dev/retest/docs/scaling-up/from-playwright.md) covers the differences and how to try an existing test.

## Get started

- [Quick start](https://rehearsal.dev/retest/docs/quick-start.md): Install Retest and run your first test.
- [Core concepts](https://rehearsal.dev/retest/docs/core-concepts.md): Learn how apps, actions and checks fit together.
- [Coding agents](https://rehearsal.dev/retest/docs/coding-agents.md): Give your coding agent tests and evidence it can read.
- [One test across platforms](https://rehearsal.dev/retest/docs/platforms/across-platforms.md): Follow a flow through several versions of your app.
