# @cucumber/pretty-formatter

> pretty-formatter Rich formatting of Cucumber progress and results for the terminal

Latest version **4.0.2** (published 2026-09-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install @cucumber/pretty-formatter
pnpm add @cucumber/pretty-formatter
yarn add @cucumber/pretty-formatter
bun add @cucumber/pretty-formatter
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 4.0.2 |
| Published | 2026-09-01 |
| First published | 2021-01-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 2 |
| Unpacked size | 253.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 4 |
| Author | David Goss |
| Maintainers | cukebot |

## Links

- npm: https://www.npmjs.com/package/@cucumber/pretty-formatter
- Repository: https://github.com/cucumber/pretty-formatter
- Homepage: https://github.com/cucumber/pretty-formatter#readme
- Issues: https://github.com/cucumber/pretty-formatter/issues
- npm.io page: https://npm.io/package/@cucumber/pretty-formatter

## Dependencies (2)

- [luxon](https://npm.io/package/luxon.md) ^3.7.2
- [@cucumber/query](https://npm.io/package/@cucumber/query.md) 16.1.1

## Recent versions

- 4.0.2 (latest) — 2026-09-01
- 4.0.1 — 2026-08-05
- 4.0.0 — 2026-06-11
- 3.3.1 — 2026-05-14
- 3.3.0 — 2026-05-03
- 3.2.0 — 2026-02-22
- 3.1.0 — 2026-02-18
- 3.0.0 — 2026-01-31
- 2.4.1 — 2025-11-02
- 2.4.0 — 2025-10-27
- 2.3.0 — 2025-09-19
- 2.2.0 — 2025-09-11
- 2.1.0 — 2025-08-17
- 2.0.1 — 2025-07-19
- 2.0.0 — 2025-07-18
- … 5 more at https://npm.io/package/@cucumber/pretty-formatter/versions

## README

<h1 align="center">
  <img alt="" width="75" src="https://github.com/cucumber.png"/>
  <br>
  pretty-formatter
</h1>
<p align="center">
  <b>Rich formatting of Cucumber progress and results for the terminal</b>
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/@cucumber/pretty-formatter" style="text-decoration: none"><img src="https://img.shields.io/npm/v/@cucumber/pretty-formatter?style=flat&color=dark-green" alt="Latest version on npm"></a>
  <a href="https://github.com/cucumber/pretty-formatter/actions" style="text-decoration: none"><img src="https://github.com/cucumber/pretty-formatter/actions/workflows/test-javascript.yaml/badge.svg" alt="Build status"></a>
</p>

![Example output of the pretty formatting, showing the different colors used](../screenshots/all-statuses.cucumber.pretty.png)

## Usage

This package is used internally in `@cucumber/cucumber` to provide the `summary`, `progress` and `pretty` formatters; you don't need to install or manage it yourself.
For usage, see https://github.com/cucumber/cucumber-js/blob/main/docs/formatters.md.

You can use these low-level classes to provide formatting for a different implementation of Cucumber.

### SummaryPrinter

Prints a summary of test results including non-passing scenarios, statistics, and snippets.

```typescript
import { SummaryPrinter } from '@cucumber/pretty-formatter'

const printer = new SummaryPrinter()

// each time a message is emitted
printer.update(envelope)
```

Can also be used to summarise a test run that already happened, with a pre-populated `Query` object:

```typescript
import { Query } from '@cucumber/query'
import { SummaryPrinter } from '@cucumber/pretty-formatter'

const query = new Query()

// each time a message is emitted
query.update(envelope)

// later
SummaryPrinter.summarise(query)
```

### ProgressPrinter

Prints test progress as single-character status indicators.

```typescript
import { ProgressPrinter } from '@cucumber/pretty-formatter'

const printer = new ProgressPrinter()

// each time a message is emitted
printer.update(envelope)
```

### PrettyPrinter

Prints test progress in a prettified Gherkin-style format.

```typescript
import { PrettyPrinter } from '@cucumber/pretty-formatter'

const printer = new PrettyPrinter()

// each time a message is emitted
printer.update(envelope)
```

### Themes

Here's the schema for a theme:

```ts
interface Theme {
    attachment?: Style
    dataTable?: {
        all?: Style
        border?: Style
        content?: Style
    }
    docString?: {
        all?: Style
        content?: Style
        delimiter?: Style
        mediaType?: Style
    }
    feature?: {
        all?: Style
        keyword?: Style
        name?: Style
    }
    location?: Style
    rule?: {
        all?: Style
        keyword?: Style
        name?: Style
    }
    scenario?: {
        all?: Style
        keyword?: Style
        name?: Style
    }
    status?: {
        all?: Partial<Record<TestStepResultStatus, Style>>
        icon?: Partial<Record<TestStepResultStatus, string>>
        progress?: Partial<Record<TestStepResultStatus, string>>
    }
    step?: {
        argument?: Style
        keyword?: Style
        text?: Style
    }
    tag?: Style
    symbol?: {
        bullet?: string
    }
}

enum TestStepResultStatus {
    UNKNOWN = "UNKNOWN",
    PASSED = "PASSED",
    SKIPPED = "SKIPPED",
    PENDING = "PENDING",
    UNDEFINED = "UNDEFINED",
    AMBIGUOUS = "AMBIGUOUS",
    FAILED = "FAILED"
}
```

`Style` is any [Node.js supported modifier](https://nodejs.org/api/util.html#modifiers) or an array of them.

See the [default theme](./src/theme.ts) for a good example. It's exported as `CUCUMBER_THEME`, so you can clone and extend it if you'd like.

---
_Source: https://npm.io/package/@cucumber/pretty-formatter · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
