# log-update

> Log by overwriting the previous output in the terminal. Useful for rendering progress bars, animations, etc.

Latest version **8.0.0** (published 2026-04-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install log-update
pnpm add log-update
yarn add log-update
bun add log-update
```

## Health

**Score 60/100 (C)** — status: active.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 8.0.0 |
| Published | 2026-04-05 |
| First published | 2015-08-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=22 |
| Dependencies | 6 |
| Unpacked size | 17.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1165 |
| Author | Sindre Sorhus |
| Maintainers | sindresorhus |
| Keywords | log, logger, logging, cli, terminal, term, console, shell, update, refresh, overwrite, output, stdout, progress, bar, animation |

## Links

- npm: https://www.npmjs.com/package/log-update
- Repository: https://github.com/sindresorhus/log-update
- Homepage: https://github.com/sindresorhus/log-update#readme
- Issues: https://github.com/sindresorhus/log-update/issues
- Funding: https://github.com/sponsors/sindresorhus
- npm.io page: https://npm.io/package/log-update

## Dependencies (6)

- [wrap-ansi](https://npm.io/package/wrap-ansi.md) ^10.0.0
- [cli-cursor](https://npm.io/package/cli-cursor.md) ^5.0.0
- [slice-ansi](https://npm.io/package/slice-ansi.md) ^9.0.0
- [strip-ansi](https://npm.io/package/strip-ansi.md) ^7.2.0
- [ansi-escapes](https://npm.io/package/ansi-escapes.md) ^7.3.0
- [string-width](https://npm.io/package/string-width.md) ^8.2.0

## Alternatives

- [cli-color](https://npm.io/package/cli-color.md) — 3.4M weekly downloads
- [log](https://npm.io/package/log.md) — 1.3M weekly downloads
- [logstash-client](https://npm.io/package/logstash-client.md) — 4.5K weekly downloads
- [@nocobase/plugin-logger](https://npm.io/package/@nocobase/plugin-logger.md) — 2.0K weekly downloads
- [child-process-debug](https://npm.io/package/child-process-debug.md) — 695 weekly downloads

## Recent versions

- 8.0.0 (latest) — 2026-04-05
- 7.2.0 — 2026-02-27
- 7.1.0 — 2026-02-05
- 7.0.2 — 2025-11-19
- 7.0.1 — 2025-09-23
- 7.0.0 — 2025-09-15
- 6.1.0 — 2024-07-26
- 6.0.0 — 2023-10-28
- 5.0.1 — 2022-04-20
- 5.0.0 — 2021-10-18
- 4.0.0 — 2020-02-20
- 3.4.0 — 2020-02-02
- 3.3.0 — 2019-09-03
- 3.2.0 — 2019-04-01
- 3.1.1 — 2019-03-31
- … 9 more at https://npm.io/package/log-update/versions

## README

# log-update

> Log by overwriting the previous output in the terminal.\
> Useful for rendering progress bars, animations, etc.

![](screenshot.gif)

It performs partial redraws when possible to reduce flicker.

## Install

```sh
npm install log-update
```

## Usage

```js
import logUpdate from 'log-update';

const frames = ['-', '\\', '|', '/'];
let index = 0;

setInterval(() => {
	const frame = frames[index = ++index % frames.length];

	logUpdate(
`
        ♥♥
   ${frame} unicorns ${frame}
        ♥♥
`
	);
}, 80);
```

You can use [yoctocolors](https://github.com/sindresorhus/yoctocolors) or [chalk](https://github.com/chalk/chalk) to colorize the output.

## API

### logUpdate(text…)

Log to stdout.

### logUpdate.clear()

Clear the logged output.

### logUpdate.done()

Persist the logged output.

Useful if you want to start a new log session below the current one.

### logUpdate.persist(text…)

Write text to the terminal that persists, similar to `console.log()`.

Unlike the main `logUpdate()` method which updates in place, `persist()` writes to the terminal in a way that preserves the output in the scrollback history.

```js
import logUpdate from 'log-update';

// Update in place
logUpdate('Processing...');
logUpdate('Still processing...');

// Write permanent output
logUpdate.persist('✓ Task complete');

// Continue updating
logUpdate('Next task...');
```

### logUpdateStderr(text…)

Log to stderr.

### logUpdateStderr.clear()
### logUpdateStderr.done()
### logUpdateStderr.persist(text…)

### createLogUpdate(stream, options?)

Get a `logUpdate` method that logs to the specified stream.

#### options

Type: `object`

##### showCursor

Type: `boolean`\
Default: `false`

Show the cursor. This can be useful when a CLI accepts input from a user.

```js
import {createLogUpdate} from 'log-update';

// Write output but don't hide the cursor
const log = createLogUpdate(process.stdout, {
	showCursor: true
});
```

##### defaultWidth

Type: `number`\
Default: `80`

The width to use when the stream doesn't provide a `columns` property.

This is useful when the output is piped, redirected, or in environments where the terminal size is not available.

```js
import {createLogUpdate} from 'log-update';

// Use custom width when the stream doesn't provide columns
const log = createLogUpdate(process.stdout, {
	defaultWidth: 120
});
```

##### defaultHeight

Type: `number`\
Default: `24`

The height to use when the stream doesn't provide a `rows` property.

This is useful when the output is piped, redirected, or in environments where the terminal size is not available.

```js
import {createLogUpdate} from 'log-update';

// Use custom height when the stream doesn't provide rows
const log = createLogUpdate(process.stdout, {
	defaultHeight: 50
});
```

## Examples

- [listr](https://github.com/SamVerschueren/listr) - Uses this module to render an interactive task list
- [ora](https://github.com/sindresorhus/ora) - Uses this module to render awesome spinners
- [speed-test](https://github.com/sindresorhus/speed-test) - Uses this module to render a [spinner](https://github.com/sindresorhus/elegant-spinner)

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