# doi-utils

> Set of utility functions to help with handling DOI(Digital Object Identifier)

Latest version **2.0.6** (published 2025-06-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install doi-utils
pnpm add doi-utils
yarn add doi-utils
bun add doi-utils
```

## Health

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

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

Warnings: low downloads.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 2.0.6 |
| Published | 2025-06-09 |
| First published | 2022-05-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Dependencies | 0 |
| Unpacked size | 11.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Rowan Cockett |
| Maintainers | rowanc1, stevejpurves, fwkoch |
| Keywords | doi, tookit |

## Links

- npm: https://www.npmjs.com/package/doi-utils
- Repository: https://github.com/continuous-foundation/doi-utils
- Issues: https://github.com/continuous-foundation/doi-utils/issues
- npm.io page: https://npm.io/package/doi-utils

## Recent versions

- 2.0.6 (latest) — 2025-06-09
- 2.0.5 — 2025-03-04
- 2.0.4 — 2025-01-15
- 2.0.3 — 2024-05-09
- 2.0.2 — 2023-11-08
- 2.0.1 — 2023-10-11
- 2.0.0 — 2023-06-09
- 1.0.9 — 2022-11-29
- 1.0.8 — 2022-11-29
- 1.0.7 — 2022-11-25
- 1.0.6 — 2022-11-25
- 1.0.5 — 2022-11-25
- 1.0.4 — 2022-06-28
- 1.0.3 — 2022-06-20
- 1.0.2 — 2022-06-20
- … 5 more at https://npm.io/package/doi-utils/versions

## README

# `doi-utils`

[![doi-utils on npm](https://img.shields.io/npm/v/doi-utils.svg)](https://www.npmjs.com/package/doi-utils)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/continuous-foundation/doi-utils/blob/master/LICENSE)
![CI](https://github.com/continuous-foundation/doi-utils/actions/workflows/ci.yml/badge.svg)

A small utility for validating, normalizing, and extracting DOIs from text strings.
This repository follows the advice of [CrossRef](https://www.crossref.org/blog/dois-and-matching-regular-expressions/) for regular expression patterns.

> For the 74.9M DOIs we have seen this matches 74.4M of them. If you need to use only one pattern then use this one.

The utility also recognizes URLs that are likely DOIs, and has specific handling for some repositories (e.g. eLife, Zenodo).

## Install

```bash
npm install doi-utils
```

## Overview & Usage

```ts
import { doi } from 'doi-utils';

const isValid = doi.validate('http://doi.org/10.1016/j.cageo.2015.09.015');

doi.buildUrl('http://dx.doi.org/10.1016/j.cageo.2015.09.015');
doi.buildUrl('http://www.doi.org/10.1016/j.cageo.2015.09.015');
doi.buildUrl('http://doi.org/10.1016/j.cageo.2015.09.015');
doi.buildUrl('doi:10.1016/j.cageo.2015.09.015');
// All of these produce a normalized, secure DOI url:
// https://doi.org/10.1016/j.cageo.2015.09.015
```

## Included Utilities

- `validate` - Validates if a single DOI string is valid, is tolerant of leading link or `doi:` strings.
- `validatePart` - Validate the "10.1016/j.cageo.2015.09.015" part of a DOI.
- `normalize` - Normalizes a DOI url or string into a DOI of the form `10.1000/xyz000`
- `buildUrl` - Builds a URL to https://doi.org, includes normalization
- `isOpenFunderRegistry` - Returns true if the DOI is in the [Open Funder Registry](https://www.crossref.org/documentation/funder-registry/)

## Options

- `strict`: only accept doi.org URLs and `doi:` prefixes

---

As of v2.0.0 this package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).

---

<p style="text-align: center; color: #aaa; padding-top: 50px">
  Made with love by
  <a href="https://continuous.foundation" target="_blank" style="color: #aaa">
    Continuous Science Foundation <img src="https://continuous.foundation/images/logo-small.svg" style="height: 1em" />
  </a>
</p>

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