# is-progressive

> Check if JPEG images are progressive

Latest version **5.0.1** (published 2024-07-06) · MIT license · 0 weekly downloads

## Install

```sh
npm install is-progressive
pnpm add is-progressive
yarn add is-progressive
bun add is-progressive
```

## Health

**Score 30/100 (F)** — status: abandoned.

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

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 5.0.1 |
| Published | 2024-07-06 |
| First published | 2015-01-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=18 |
| Dependencies | 2 |
| Unpacked size | 8.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 196 |
| Author | Sindre Sorhus |
| Maintainers | sindresorhus |
| Keywords | jpg, jpeg, progressive, file, image, img, picture, photo, detect, check, is, exif, buffer, stream, fs |

## Links

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

## Dependencies (2)

- [read-chunk](https://npm.io/package/read-chunk.md) ^5.0.0
- [uint8array-extras](https://npm.io/package/uint8array-extras.md) ^1.3.0

## Alternatives

- [memory-cache](https://npm.io/package/memory-cache.md) — 795.0K weekly downloads
- [@httptoolkit/proxy-agent](https://npm.io/package/@httptoolkit/proxy-agent.md) — 11.2K weekly downloads
- [express-cache-controller](https://npm.io/package/express-cache-controller.md) — 5.3K weekly downloads
- [http-cache-middleware](https://npm.io/package/http-cache-middleware.md) — 4.5K weekly downloads
- [cache2](https://npm.io/package/cache2.md) — 1.5K weekly downloads

## Recent versions

- 5.0.1 (latest) — 2024-07-06
- 5.0.0 — 2024-07-05
- 4.0.0 — 2021-10-17
- 3.0.0 — 2016-05-11
- 2.0.1 — 2015-07-12
- 2.0.0 — 2015-07-03
- 1.0.1 — 2015-02-16
- 1.0.0 — 2015-01-10

## README

# is-progressive

> Check if JPEG images are [progressive](http://www.faqs.org/faqs/jpeg-faq/part1/section-11.html)

Can be useful to make sure your images are progressive, which is important for performance:

> Progressive JPEGs are better because they are faster. Appearing faster is being faster, and perceived speed is more important that actual speed. - [Progressive JPEGs: a new best practice](https://calendar.perfplanet.com/2012/progressive-jpegs-a-new-best-practice/)

The check is fast as it only reads a small part of the file.

## Install

```sh
npm install is-progressive
```

## Usage

```js
import isProgressive from 'is-progressive';

console.log(await isProgressive.file('baseline.jpg'));
//=> false

isProgressive.fileSync('progressive.jpg');
//=> true
```

```js
// Check if a remote JPEG image is progressive without downloading the whole file
import https from 'node:https';
import isProgressive from 'is-progressive';

const url = 'https://raw.githubusercontent.com/sindresorhus/is-progressive/main/fixture/progressive.jpg';

https.get(url, async response => {
	console.log(await isProgressive.stream(response));
	//=> true
});
```

### API

Prefer the file methods if you're dealing directly with files. Those methods are optimized to read in the least amount of bytes necessary to determine whether it's a progressive JPEG image.

#### .buffer(buffer)

Returns whether the `buffer` is a progressive JPEG image.

##### buffer

Type: `Uint8Array`

The buffer of a JPEG image.

Must be at least `65535` bytes when the file is larger than that.

#### .stream(stream)

Returns a `Promise<boolean>` indicating whether the file stream is a progressive JPEG image.

##### stream

Type: `stream.Readable`

A data stream with a JPEG image.

#### .file(filePath)

Returns a `Promise<boolean>` indicating whether the file at the `filePath` is a progressive JPEG image.

##### filePath

Type: `string`

The file path to the image.

#### .fileSync(filePath)

Whether the file at the `filePath` is a progressive JPEG.

##### filePath

Type: `string`

The file path to the image.

## Build-system integration

Don't use this with a build-system like Gulp/Grunt as you can easily make the images progressive with the [`imagemin`](https://github.com/imagemin/imagemin) *([Gulp](https://github.com/sindresorhus/gulp-imagemin)/[Grunt](https://github.com/gruntjs/grunt-contrib-imagemin)-task)* `progressive` option instead of just warning about it.

## Related

- [is-progressive-cli](https://github.com/sindresorhus/is-progressive-cli) - CLI for this module

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