# @sindresorhus/base62

> Encode & decode strings, bytes, and integers to Base62

Latest version **1.0.0** (published 2025-09-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install @sindresorhus/base62
pnpm add @sindresorhus/base62
yarn add @sindresorhus/base62
bun add @sindresorhus/base62
```

## Health

**Score 40/100 (D)** — status: maintenance-mode.

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

Warnings: low downloads.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2025-09-16 |
| First published | 2024-05-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=18 |
| Dependencies | 0 |
| Unpacked size | 14.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 94 |
| Author | Sindre Sorhus |
| Maintainers | sindresorhus |
| Keywords | base62, base, base64, base-62, encode, decode, shorten, compress, compact, alphanumeric, serialization, url, safe, text, string, number, integer, bigint, bytes, uint8array, algorithm, transformation, encoder, decoder, encoding, decoding, url-friendly, url-safe |

## Links

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

## Alternatives

- [flatbuffers](https://npm.io/package/flatbuffers.md) — 6.0M weekly downloads
- [jwt-simple](https://npm.io/package/jwt-simple.md) — 259.5K weekly downloads
- [@exodus/patch-broken-hermes-typed-arrays](https://npm.io/package/@exodus/patch-broken-hermes-typed-arrays.md) — 28.5K weekly downloads
- [@native-to-anchor/buffer-layout](https://npm.io/package/@native-to-anchor/buffer-layout.md) — 12.2K weekly downloads
- [binary-parser-encoder](https://npm.io/package/binary-parser-encoder.md) — 5.3K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2025-09-16
- 0.1.0 — 2024-05-05

## README

# base62

> Encode & decode strings, bytes, and integers to [Base62](https://en.wikipedia.org/wiki/Base62)

Base62 is ideal for URL shortening, creating readable codes, and compact data representation, because it compresses large values into shorter, alphanumeric strings, maximizing space efficiency and readability.

## Install

```sh
npm install @sindresorhus/base62
```

## Usage

```js
import base62 from '@sindresorhus/base62';

const encodedString = base62.encodeString('Hello world!');
console.log(encodedString);
//=> '28B5ymDkgSU62aA0v'

console.log(base62.decodeString(encodedString));
//=> 'Hello world!'

console.log(base62.encodeString('🦄'));
//=> '95s3vg'

console.log(base62.encodeInteger(1337));
//=> 'LZ'
```

> [!NOTE]
> The output may differ from other Base62 encoders due to variations in alphabet order and byte encoding.

## API

It uses the most common alphabet for Base62: `0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`

### `encodeString(string: string): string`

Encodes a string to a Base62 string.

> [!CAUTION]
> The result format is not yet guaranteed to be stable across package versions. Avoid using it for persistent storage.

### `decodeString(encodedString: string): string`

Decodes a Base62 encoded string created with `encodeString()` back to the original string.

### `encodeBytes(bytes: Uint8Array): string`

Encodes bytes to a Base62 string.

> [!CAUTION]
> The result format is not yet guaranteed to be stable across package versions. Avoid using it for persistent storage.

### `decodeBytes(encodedString: string): Uint8Array`

Decodes a Base62 string created with `encodeBytes()` back to bytes.

### `encodeInteger(integer: number): string`

Encodes a non-negative integer to a Base62 string.

### `decodeInteger(encodedString: string): number`

Decodes a Base62 string to an integer.

### `encodeBigInt(integer: bigint): string`

Encodes a non-negative bigint to a Base62 string.

### `decodeBigInt(encodedString: string): bigint`

Decodes a Base62 string to a bigint.

### Custom alphabets

You can use a custom alphabet by using the `Base62` class:

```js
import {Base62} from '@sindresorhus/base62';

// Create instance with custom alphabet
const customBase62 = new Base62({
	alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
});

console.log(customBase62.encodeInteger(1337));
//=> 'Vj' (different from default 'LZ')

// Or use special characters
const symbolBase62 = new Base62({
	alphabet: '!@#$%^&*()_+-=[]{}|;:,.<>?/~`0123456789ABCDEFGHIJKLMNOPQRSTUVW'
});
console.log(symbolBase62.encodeInteger(42));
//=> 'D'
```

> [!NOTE]
> The alphabet must be exactly 62 unique characters.

### `Base62`

#### `constructor(options?)`

Create a new Base62 encoder/decoder instance.

##### options

Type: `object`

###### alphabet

Type: `string`\
Default: `'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'`

Custom alphabet containing exactly 62 unique characters.

The `Base62` class has the same methods as the exported functions: `encodeString()`, `decodeString()`, `encodeBytes()`, `decodeBytes()`, `encodeInteger()`, `decodeInteger()`, `encodeBigInt()`, and `decodeBigInt()`.

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