# dl-vampire

> download file like a vampire

Latest version **2.1.7** (published 2025-12-04) · MIT license · 0 weekly downloads

## Install

```sh
npm install dl-vampire
pnpm add dl-vampire
yarn add dl-vampire
bun add dl-vampire
```

## Health

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

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

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 2.1.7 |
| Published | 2025-12-04 |
| First published | 2019-01-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 7 |
| Unpacked size | 24.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 7 |
| Author | magicdawn |
| Maintainers | magicdawn |
| Keywords | dl, download, fs, vampire, download-manager |

## Links

- npm: https://www.npmjs.com/package/dl-vampire
- Repository: https://github.com/magicdawn/dl-vampire
- Homepage: https://github.com/magicdawn/dl-vampire#readme
- Issues: https://github.com/magicdawn/dl-vampire/issues
- npm.io page: https://npm.io/package/dl-vampire

## Dependencies (7)

- [ms](https://npm.io/package/ms.md) ^2.1.3
- [got](https://npm.io/package/got.md) ^14.6.5
- [debug](https://npm.io/package/debug.md) ^4.4.3
- [lodash](https://npm.io/package/lodash.md) ^4.17.21
- [fs-extra](https://npm.io/package/fs-extra.md) ^11.3.2
- [proxy-agent](https://npm.io/package/proxy-agent.md) ^6.5.0
- [promise.retry](https://npm.io/package/promise.retry.md) ^2.1.0

## Alternatives

- [unionfs](https://npm.io/package/unionfs.md) — 2.2M weekly downloads
- [path-starts-with](https://npm.io/package/path-starts-with.md) — 35.9K weekly downloads
- [redzip](https://npm.io/package/redzip.md) — 1.2K weekly downloads
- [vscode-anymatch](https://npm.io/package/vscode-anymatch.md) — 848 weekly downloads
- [@ledgerhq/coin-filecoin](https://npm.io/package/@ledgerhq/coin-filecoin.md) — 793 weekly downloads

## Recent versions

- 2.1.7 (latest) — 2025-12-04
- 2.1.6 — 2025-06-03
- 2.1.5 — 2025-06-03
- 2.1.4 — 2025-04-08
- 2.1.3 — 2025-03-27
- 2.1.2 — 2024-07-05
- 2.1.1 — 2024-03-20
- 2.1.0 — 2024-01-29
- 2.0.0 — 2023-10-17
- 1.4.1 — 2023-05-20
- 1.4.0 — 2022-12-11
- 1.3.3 — 2022-12-11
- 1.3.2 — 2022-12-11
- 1.3.1 — 2022-07-29
- 1.3.0 — 2022-07-29
- … 17 more at https://npm.io/package/dl-vampire/versions

## README

# dl-vampire

> download file like a vampire

[![Build Status](https://img.shields.io/github/actions/workflow/status/magicdawn/dl-vampire/ci.yml?branch=main&style=flat-square)](https://github.com/magicdawn/dl-vampire/actions/workflows/ci.yml)
[![Coverage Status](https://img.shields.io/codecov/c/github/magicdawn/dl-vampire.svg?style=flat-square)](https://codecov.io/gh/magicdawn/dl-vampire)
[![npm version](https://img.shields.io/npm/v/dl-vampire.svg?style=flat-square)](https://www.npmjs.com/package/dl-vampire)
[![npm downloads](https://img.shields.io/npm/dm/dl-vampire.svg?style=flat-square)](https://www.npmjs.com/package/dl-vampire)
[![npm license](https://img.shields.io/npm/l/dl-vampire.svg?style=flat-square)](http://magicdawn.mit-license.org)

![vampire](https://cdn.jsdelivr.net/gh/magicdawn/dl-vampire/vampire.jpeg)

## Highlight

- [x] skip mechanism, local file & content-length
- [x] retry / timeout support
- [x] stream to file, not ate memory like the [download](https://github.com/kevva/download/issues?utf8=%E2%9C%93&q=memory+) module
- [x] download progress support, via awesome [got](https://github.com/sindresorhus/got) module

## Install

```sh
$ npm i dl-vampire --save
```

## API

```js
import dl, { Vampire, readUrl } from 'dl-vampire'
```

### `dl(options: DlOptions) => Promise<{skip: boolean}>`

| name                          | type                 | required | default value                | description                                                                                                           |
| ----------------------------- | -------------------- | -------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `options.url`                 | `String`             | `true`   |                              | the download url                                                                                                      |
| `options.file`                | `String`             | `true`   |                              | the local target file path                                                                                            |
| `options.onprogress`          | `function(progress)` |          |                              | [got `downloadProgress` event listener](https://github.com/sindresorhus/got#ondownloadprogress-progress)              |
| `options.retry`               | `Object`             |          | `{times: 5, timeout: false}` | retry options, will pass to [promise.retry](https://github.com/magicdawn/promise.retry#pretry)                        |
| `options.skipExists`          | `boolean`            |          | `true`                       | if local file already exists _AND_ file stat size match response `content-length` size, the download will be skiped   |
| `options.expectSize`          | `number`             |          |                              | validate local file `stat.size === expectSize`, if check pass the download will be skiped                             |
| `options.expectHash`          | `string`             |          |                              | validate local file `file.hash === expectHash`, using `expectHashAlgorithm` if check pass the download will be skiped |
| `options.expectHashAlgorithm` | `string`             |          | `'md5'`                      | the expect hash algorithm, default `md5`                                                                              |
| `options.useChromeUa`         | `Boolean`            |          | `true`                       | use `user-agent` of the Chrome Browser                                                                                |
| `options.useProxyEnv`         | `Boolean`            |          | `true`                       | use `proxy-agent` module, will use `http_proxy` / `https_proxy` / `all_proxy` env variable                            |
| `options.requestOptions`      | `Object`             |          |                              | custom request options, see [request options](https://github.com/request/request#requestoptions-callback)             |

- if finally the download is skiped, the return promise will resolve to `{skip: true}`
- else it will resolve to `{skip: false}`

#### `options.retry.*`

| name                    | type                   | description                                                                                                 |
| ----------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------- |
| `options.retry.times`   | `Number`               | max retry times                                                                                             |
| `options.retry.timeout` | `Number` / `false`     | `false` disables timeout check, `Number`: max wait in ms                                                    |
| `options.retry.onerror` | `function(err, index)` | when retry happens, this hook will be called, whether a normal error or a timeout error, index is `0` based |

more see https://github.com/magicdawn/promise.retry

#### `ts types`

```ts
// options for dl() / readUrl()
import type { DlOptions, ReadUrlOptions, ReadUrlOptionsWithEncoding } from 'dl-vampire'

// onpregress type, and progress arg type
import type { OnProgress, Progress } from 'dl-vampire'
```

## Changelog

[CHANGELOG.md](CHANGELOG.md)

## License

the MIT License http://magicdawn.mit-license.org

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