# @appium/support

> Support libs used across Appium packages

Latest version **7.2.7** (published 2026-08-24) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @appium/support
pnpm add @appium/support
yarn add @appium/support
bun add @appium/support
```

## Health

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

Positive: has types; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score; popular repo.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 7.2.7 |
| Published | 2026-08-24 |
| First published | 2021-05-26 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | ^20.19.0 \|\| ^22.12.0 \|\| >=24.0.0 |
| Dependencies | 24 |
| Unpacked size | 461.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 21992 |
| Author | https://github.com/appium |
| Maintainers | jlipps, nick.mokhnach, kazucocoa |
| Keywords | android, automation, firefoxos, ios, javascript, selenium, testing, webdriver |

## Links

- npm: https://www.npmjs.com/package/@appium/support
- Repository: https://github.com/appium/appium
- Homepage: https://appium.io
- Issues: https://github.com/appium/appium/issues
- npm.io page: https://npm.io/package/@appium/support

## Dependencies (24)

- [glob](https://npm.io/package/glob.md) 13.0.6
- [klaw](https://npm.io/package/klaw.md) 4.1.0
- [uuid](https://npm.io/package/uuid.md) 14.0.2
- [axios](https://npm.io/package/axios.md) 1.19.0
- [jsftp](https://npm.io/package/jsftp.md) 2.1.3
- [plist](https://npm.io/package/plist.md) 4.0.0
- [which](https://npm.io/package/which.md) 6.0.1
- [yauzl](https://npm.io/package/yauzl.md) 3.4.0
- [semver](https://npm.io/package/semver.md) 7.8.5
- [archiver](https://npm.io/package/archiver.md) 8.0.0
- [asyncbox](https://npm.io/package/asyncbox.md) 6.4.2
- [bluebird](https://npm.io/package/bluebird.md) 3.7.2
- [lockfile](https://npm.io/package/lockfile.md) 1.0.4
- [form-data](https://npm.io/package/form-data.md) 4.0.6
- [pluralize](https://npm.io/package/pluralize.md) 8.0.0
- [type-fest](https://npm.io/package/type-fest.md) 5.8.0
- [shell-quote](https://npm.io/package/shell-quote.md) 1.10.0
- [teen_process](https://npm.io/package/teen_process.md) 4.2.1
- [@appium/types](https://npm.io/package/@appium/types.md) 1.7.0
- [bplist-parser](https://npm.io/package/bplist-parser.md) 0.3.2
- [@appium/logger](https://npm.io/package/@appium/logger.md) 2.0.11
- [bplist-creator](https://npm.io/package/bplist-creator.md) 0.1.1
- [sanitize-filename](https://npm.io/package/sanitize-filename.md) 1.6.4
- [normalize-package-data](https://npm.io/package/normalize-package-data.md) 8.0.0

## Alternatives

- [@snazzah/davey](https://npm.io/package/@snazzah/davey.md) — 1.5M weekly downloads
- [@vendure/testing](https://npm.io/package/@vendure/testing.md) — 8.3K weekly downloads
- [vue-simple-context-menu](https://npm.io/package/vue-simple-context-menu.md) — 6.6K weekly downloads
- [cypress-webpack-preprocessor-v5](https://npm.io/package/cypress-webpack-preprocessor-v5.md) — 2.1K weekly downloads
- [@backstage/plugin-catalog-backend-module-puppetdb](https://npm.io/package/@backstage/plugin-catalog-backend-module-puppetdb.md) — 1.3K weekly downloads

## Recent versions

- 7.2.7 (latest) — 2026-08-24
- 8.0.0-beta.0 (beta) — 2026-09-19
- 7.0.0-rc.1 (rc) — 2025-08-14
- 7.2.6 — 2026-07-25
- 7.2.5 — 2026-06-18
- 7.2.4 — 2026-06-18
- 7.2.3 — 2026-05-31
- 7.2.2 — 2026-05-07
- 7.2.1 — 2026-05-06
- 7.2.0 — 2026-05-06
- 7.1.1 — 2026-04-23
- 7.1.0 — 2026-04-09
- 7.0.6 — 2026-03-08
- 7.0.5 — 2026-01-26
- 7.0.4 — 2025-12-04
- … 89 more at https://npm.io/package/@appium/support/versions

## README

# @appium/support

> Utility functions used to support Appium drivers and plugins

[![NPM version](https://img.shields.io/npm/v/@appium/support.svg)](https://npmjs.org/package/@appium/support)
[![Downloads](https://img.shields.io/npm/dm/@appium/support.svg)](https://npmjs.org/package/@appium/support)

## Usage in drivers and plugins

Drivers and plugins are recommended to have Appium as a peer dependency, as it already includes
these utility functions. Add the following line to `peerDependencies` section of your module's
`package.json`:

```js
  "peerDependencies": {
    "appium": "^<minimum_server_version>"
  }
```

Afterwards import it in your code similarly to the below example:

```js
import {timing, util} from 'appium/support';
```

## Usage in helper modules

If you want to use this module in a helper library, which is not a driver or a plugin,
then add the following line to `dependencies` section of your module's `package.json`:

```js
  "dependencies": {
    "@appium/support": "<module_version>"
  }
```

Afterwards import it in your code similarly to the below example:

```js
import {timing, util} from '@appium/support';
```

## Categories

All utility functions are split into a bunch of different categories. Each category has its own file under the `lib` folder. All utility functions in these files are documented.

|Category|Description|
|-|-|
|console|Wrappers for the command line interface abstraction used by the Appium server|
|doctor|Common doctor utilities that can be used by drivers and plugins|
|env|Several helpers needed by the server to cope with internal dependencies and manifests|
|fs|Most of the functions here are just thin wrappers over utility functions available in [Promises API](https://nodejs.org/api/fs.html#promises-api)|
|image-util|Utilities to work with images. Use [sharp](https://github.com/lovell/sharp) under the hood.<br>:bangbang: Node >=18.17 is required to use these utilities|
|logging|See [the logging section below](#logging)|
|mjpeg|Helpers needed to implement [MJPEG streaming](https://en.wikipedia.org/wiki/Motion_JPEG#Video_streaming)|
|net|Helpers needed for network interactions, for example, upload and download of files|
|node|Set of Node.js-specific utility functions needed, for example, to ensure objects immutability or to calculate their sizes|
|npm|Set of `npm`-related helpers|
|plist|Set of utilities used to read and write data from [plist](https://en.wikipedia.org/wiki/Property_List) files in javascript|
|process|Helpers for interactions with system processes. These APIs don't support Windows.|
|system|Set of helper functions needed to determine properties of the current operating system|
|tempdir|Set of helpers that allow interactions with temporary folders|
|timing|Helpers that allow to measure execution time|
|util|Miscellaneous utilities|
|zip|Helpers that allow to work with archives in `.zip ` format|

## logging

This is a basic logger defaulting to [npmlog](https://github.com/npm/npmlog) with special
consideration for running tests (doesn't output logs when run with `_TESTING=1`).

### Logging levels

There are a number of levels, exposed as methods on the log object, at which logging can be made.
The built-in ones correspond to those of [npmlog](https://github.com/npm/npmlog#loglevelprefix-message-),
and are: `silly`, `verbose`, `info`, `http`, `warn`, and `error`. There is also a `debug` level.

The default threshold level is `verbose`.

The logged output, by default, will be `level prefix message`. So

```js
import {logging} from 'appium/support';
let log = logging.getLogger('mymodule');
log.warn('a warning');`
```

Will produce

```shell
warn mymodule a warning
```

### Environment variables

There are two environment variable flags that affect the way `logger` works.

|Variable|Description|
|-|-|
|`_TESTING`|If set to `1`, logging output is stopped|
|`_FORCE_LOGS`|If set to `1`, overrides the value of `_TESTING`|

### Usage

`log.level`

- Get and set the threshold level at which to display the logs. Any logs at or above this level will
be displayed. The special level `silent` will prevent anything from being displayed ever. See
[npmlog#level](https://github.com/npm/npmlog#loglevel) for more details.

`log[level](message)`

- Logs `message` at the specified `level`
```js
import {logging} from 'appium/support';
let log = logging.getLogger('mymodule');

log.info('hi!');
// => info mymodule hi!
```

`log.unwrap()`

- Retrieves the underlying [npmlog](https://github.com/npm/npmlog) object, in order to manage how
logging is done at a low level (e.g., changing output streams, retrieving an array of messages,
adding log levels, etc.).

```js
import {logging} from 'appium/support';
let log = logging.getLogger('mymodule');

log.info('hi!');

let npmlogger = log.unwrap();

// any `npmlog` methods
let logs = npmlogger.record;
// logs === [ { id: 0, level: 'info', prefix: 'mymodule', message: 'hi!', messageRaw: [ 'hi!' ] }]
```

`log.errorWithException(error)`

- Logs the error passed in, at `error` level, and then returns the error. If the error passed in is
not an instance of [Error](https://nodejs.org/api/errors.html#errors_class_error) (either directly,
or a subclass of `Error`), it will be wrapped in a generic `Error` object.

```js
import {logging} from 'appium/support';
let log = logging.getLogger('mymodule');

// previously there would be two lines
log.error('This is an error');
throw new Error('This is an error');

// now is compacted
throw log.errorWithException('This is an error');
```

## License

Apache-2.0

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